• Перевод WooCommerce?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, если надо вывести текст, то вместо echo __('My text'); используйте _e('My text');.

    Во-вторых, обе функции (как и остальные функции локализации) ожидают второй параметр: _e( 'My text', 'my-textdomain' ).

    Именно по my-textdomain WordPress будет искать и загружать необходимые файлы переводов.
    Ответ написан
    2 комментария
  • Как сделать текст поверх картинки в динамических блоках на css в WP?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    через backgrond-image нельзя же, потому что не вписать <?php the_post_thumbnail(); ?> в свойствах css, и position: absolute нельзя использовать

    Можно, просто вместо функции the_post_thumbnail(), которая выводит html-код изображения (то есть весть тег IMG), используйте функцию the_post_thumbnail_url(), которая выводит только URL картинки:
    <div class="post-head" style="background: url( <?php the_post_thumbnail_url(); ?> );">
        <h1><?php the_title(); ?></h1>
    </div>

    Ну а через класс .post-head уже дополнительные стили вешаете.
    Ответ написан
    1 комментарий
  • Какой плагин больше всего подходят для сортированного поиска?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    https://searchwp.com/
    https://facetwp.com/
    https://wordpress.org/plugins/elasticpress/

    и многие другие. Гугл в помощь.
    Ответ написан
    Комментировать
  • Важно ли использовать сетку для верстки?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    зачем нужна сетка для верстки

    Сетка нужна для удобства и консистентности верстки.

    будь то бутстрап или грид

    Бутстрап это большой фреймворк, сетка - лишь маленькая его часть. А грид - это и есть "сетка". С терминологией надо бы порядок навести.

    если я все равно в контейнере отступаю в пкс от краев, задаю ширину в стилях и помещаю все в контейнер, а для телефонов оптимизирую через медиа запросы

    Поздравляю, вы создаете и используете собственную сетку! :) Исходя из этого, решите для себя сами - достаточно ли вам вашей собственной сетки, удобно ли с ней работать. Если да - тогда сторонние готовые решения вам не нужны. Если нет - тогда используйте готовую сетку и не парьтесь.
    Ответ написан
    Комментировать
  • Почему не работают домены в homestead?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Директива folders маппит корневую папку с проектами, которая с хоста маппится на виртуалку. В вашем случае это ~/Documents/dev/server – в этой папке у вас должны лежать все проекты.

    Директива sites содержит конкретный маппинг папок проектов, где каждому домену соответствует папка проекта в корневой папке всех проектов (см. выше), то есть /home/vagrant/server/project. Путь отсюда будет использован в конфиге сервера в директиве root.

    folders:
        - map: ~/Documents/dev/server
          to: /home/vagrant/server
    
    sites:
        - map: homestead.test
          to: /home/vagrant/server/homestead
        - map: example.test
          to: /home/vagrant/server/example

    В вашей файловой системе это должно выглядеть вот так:

    ~/Documents
       - dev
         - server (вот эту папку маунтим на виртуалку)
           - homestead (конкретный проект)
           - example (конкретный проект)

    После этого не забываем homestead up --provision
    Ответ написан
    3 комментария
  • Сильно ли сократится нагрузка/ответ от сервера при таком раскладе?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вариант 1: Вместо MySQL используйте Redis.
    Вариант 2: Продолжайте использовать MySQL, но добавьте кеш в Memcached / Redis.
    Ответ написан
    5 комментариев
  • Как увеличить количество голосований в блоке рейтинга?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Хранятся циферки эти в базе данных, скорее всего в wp_postmeta. Зайдите, найдите, измените 5 на 745 (к примеру).
    Ответ написан
    Комментировать
  • Есть ли нормальный терминал для Sublime Text 3?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Решил вернуться в саблайм, так как все остальное тормознутое слишком

    Потому что ST – это редактор, а не IDE. Быстрее он в первую очередь потому, что лишен большей части функционала, которая есть в IDE.

    Подскажите пожалуйста, если какой либо терминал?

    Если на ST навесить адекватный терминал (если бы он существовал), да еще стопочку полезных инструментов, то он бы превратился почти в IDE, и стал бы таким же "тормознутым", как и остальные IDE.

    Из того что есть:

    - https://packagecontrol.io/packages/TerminalView (macOS / Linux)
    - https://packagecontrol.io/packages/termX (macOS)
    Ответ написан
    4 комментария
  • Как подключить пакет из бибекета в композер?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    "repositories": [
     {
       "type": "vcs",
       "url":  "git@bitbucket.org:user/repository-name.git"
     }
    ],
    "require": {
      "user/repository-name": "dev-master"
    },


    Если репа приватная – читать тут (и менять адрес репы с git@bitbucket.org на https).
    Ответ написан
    Комментировать
  • Какой php-фреймворк посоветуете изучить новичку?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Лично я брал бы сразу 3 - Yii, Symfony, Laravel. Все 3 во многом похожи, у всех 3 есть существенные и даже принципиальные различия, плюс и минусы. Да, это немного замедлит начальный этап. Но польза будет огромная.
    Ответ написан
    1 комментарий
  • Wp buddypress - стоит ли создавать социальную сеть на buddypress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    При всей моей любви к WordPress, а также при всем уважении к John James Jacoby (один из главных разрабов BuddyPress а также мегакрутой и эффектиный разраб), не стоит. Есть специализированные решения которые будут заметно лучше в работе, управлении, сопровождении и тд.
    Ответ написан
    1 комментарий
  • Wordpress Plugin Api: Почему не выводятся все вкладки nav-tabs?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В коде должен быть порядок.
    Глобальный scope забивать не нужно.

    <?php
    /*
     * Example plugin.
     *
     * Plugin Name: Example plugin
     * Description: Plugin description.
     * Version: 0.1.0
     * Author: Ihor Vorotnov
     * Author URI: https://ihorvorotnov.com
     * Text Domain: cm
     * Domain Path: /languages
     * License: GPL-2.0+
     * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
    */
    
    // Exit if accessed directly
    defined( 'ABSPATH' ) or die();
    
    /**
     * Define default configuration for tabs and return it.
     *
     * @param null $key
     *
     * @return array
     */
    function cm_config( $key = null ) {
    
    	// Define configuration
    	$config = array(
    		'main' => array (
    			'title'     => 'Основные',
    			'variables' => array (
    				'variable1' => 'color 1',
    				'variable2' => 'color 2',
    			),
    		),
    		'header' => array (
    			'title'     => 'Хедер',
    			'variables' => array (
    				'variable1' => 'color 1',
    				'variable2' => 'color 2',
    			),
    		),
    		'header1' => array (
    			'title'     => 'Хедер1',
    			'variables' => array (
    				'variable1' => 'color 1',
    				'variable2' => 'color 2',
    			),
    		),
    	);
    
    	// If specific element of the config is requested
    	if ( ! is_null( $key ) && array_key_exists( $key, $config ) ) {
    		return $config[ $key ];
    	}
    
    	// Otherwise return the whole config
    	return $config;
    }
    
    /**
     * Helper function to determine currently active tab and make sure it exists.
     *
     * @return string
     */
    function cm_active_tab() {
    
    	// If the tab slug is passed via GET and it actually exists
    	if ( isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], cm_config() ) ) {
    		return esc_attr( $_GET['tab'] );
    	}
    
    	// Otherwise, the 'main' tab is the default
    	return 'main';
    }
    
    /**
     * Register options page.
     */
    function cm_add_plugin_page() {
    
    	add_options_page(
    		'Color Manager',
    		'Color Manager',
    		'manage_options',
    		'cm_settings',
    		'cm_options_page_output'
    	);
    }
    add_action( 'admin_menu', 'cm_add_plugin_page' );
    
    /**
     * Render options page HTML.
     */
    function cm_options_page_output() {
    	?>
    	<div class="wrap">
    		<h1>Color Manager</h1>
    
    		<h2 class="nav-tab-wrapper">
    			<?php do_action( 'cm_settings_tabs' ); ?>
    		</h2>
    		<?php do_action( 'cm_settings_content' ); ?>
    	</div>
    	<?php
    }
    
    /**
     * Render tabs dynamically.
     */
    function cm_render_tabs() {
    
    	// Get the plugin config without globals everywhere
    	$config = cm_config();
    
    	// Loop through the elements from config and build tab links
    	foreach ( $config as $slug => $element ) {
    
    		// Build URL for current element
    		$url = admin_url( 'options-general.php?page=cm_settings&tab=' ) . $slug;
    		// Set default css class(es)
    		$classes = 'nav-tab';
    
    		// Add css class to active tab
    		if ( cm_active_tab() == $slug ) {
    			$classes .= ' nav-tab-active';
    		}
    
    		// Render the tab link HTML
    		printf( '<a href="%s" class="%s">%s</a>',
    			$url,
    			$classes,
    			$element['title']
    		);
    
    	}
    }
    add_action( 'cm_settings_tabs', 'cm_render_tabs' );
    
    /**
     * Render tab content dynamically.
     */
    function cm_render_tab_content() {
    
    	// Get currently active tab slug
    	$active_tab = cm_active_tab();
    	// Get data for this tab from the config
    	$data = cm_config( $active_tab );
    
    	var_dump( $data );
    
    	// Load corresponding template part or call the function to render requested content.
    
    	// --------------------------------------------------------------
    	// Your code here...
    	// --------------------------------------------------------------
    
    }
    add_action( 'cm_settings_content', 'cm_render_tab_content' );


    5a46194f2130c669082458.jpeg
    Ответ написан
    Комментировать
  • Как заставить Contact Form7 отправлять письма?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Смотрите консоль браузера, ajax-запрос от формы возвращает какую-то ошибку. Поправьте ее и все будет в порядке.
    Ответ написан
    Комментировать
  • Оптимальная конфигурация для сервера?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если вопрос поставлен таким образом - то current stable, то есть PHP 7.2 и MariaDB 10.2.
    Главное - убедиться, что ваш код работает с ними как положено.
    Ответ написан
    Комментировать
  • Как заменить конструкцию query_posts на get_posts?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, форматируйте код адекватно, эти длинные строки читать - адски неудобно (особенно отлавливать ваши двойные $$, лишние скобки и тд):

    // Параметры удобнее задавать отдельно
    $args = array(
        'post_type' => APP_POST_TYPE,
        'ignore_sticky_posts' => true,
        'meta_query' => array( 
            array(
                'key' => 'cp_category', 
                'value' => 'Не определено', 
                'compare' => '=',
            ),
        ), 
    );
    // Получаем массив постов.
    $categories = get_posts( $args );
    
    // Перебираем массив, обязательно as $post, чтобы корректно работала функция setup_postdata()
    foreach( $categories as $post ) {
        // Устанавливаем текущую запись в глобальный scope
        setup_postdata( $post );
        // Подключаем шаблон, который уже сможет видеть корректные данные из глобального scope
        get_template_part( 'loop', 'ad_listing' ); 
    }
    // Очищаем глобальный scope
    wp_reset_postdata();

    Не тестил, но должно работать.
    Ответ написан
    9 комментариев
  • Как показать блок в header везде кроме постов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    if ( ! is_single() ) {
        // код будет выполнен только если это одна запись и ее тип не страница или аттачмент 
    }

    Впрочем, этот код изолирует также и любые custom post type, поэтому если надо исключить только записи типа post, то:
    if ( ! is_singular( 'post' ) ) {
        // код будет выполнен везде кроме single типа post
    }
    Ответ написан
    Комментировать
  • Что значит "Отсутствует заголовок CORS «Access-Control-Allow-Origin»"?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Произвожу стандартную замену названий директорий Wordpress, чтобы не было так ясно, что это Wordpress.

    Прекратите фигней заниматься. Это совершенно бесполезное занятие.

    отсутствует заголовок CORS «Access-Control-Allow-Origin»

    Это по кросс-доменным запросам. Настраивается на уровне сервера.
    Ответ написан
  • Насколько критично иметь "business entity, license or registration" для работы с Upwork Enterpise клиентами?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Многие корпоративные клиенты не смогут / не захотят работать с физлицом. Поэтому требуется юрлицо, с которым можно подписать контракт, закрепить юридическую ответственность, проводить бухгалтерию нормально и тд. В общем, работать в белую в режиме B2B (business to business) а не с каким-нибудь левым Васей из Мухосранска. Вот и вся кухня.

    Если кратко – регистрируете себе ФЛП (на самом деле давно пора), подписываете доки с Enterprise клиентом, выставляете инвойсы, получаете бабки банковским переводом на свой счет, платите налоги и спите спокойно.
    Ответ написан
    Комментировать
  • Как много кода помещается на экране разных ноутбуков?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Общие "субъективные рекоммендации":

    1. 15" удобнее и лучше всем, кроме мобильности. Если не надо каждый день туда-назад возиться с ноутом по городу в общественном транспорте и гулять по паркам с пивасиком наперевес, то 13 сразу в топку. Впрочем, даже если возиться в рюкзаке, то 15ка не тяжелая. Я свою в путешествия таскаю, и хожу с рюкзаком за плечами и ноутом в нем по up to 30км в день. И норм.

    2. Внешний монитор - только 4К/5К, и только 27+ дюймов. Все что меньше по диагонали и с огромными пикселями - ад после ретины. Кровь из глаз идет. А глаза ведь не вечные. Когда вам стукнет сильно за 30, эти самые глаза спасибо скажут.

    3. Для работы с внешним монитором (4/5К, возможно даже с 2мя) - только 15 с дискретной видяхой. Тут как бы не о чем даже говорить.

    4. Не нужно стремиться скейлить разрешалово и втиснуть в экран как можно больше всего. Во-первых, мозг больше устает когда слишком много визуального мусора, фокус внимания страдает. Во-вторых, нативное разрешалово всегда наиболее комфортно глазу. Итого, лично у меня получается:

    - МБП 15" с нативным 1440x900
    - Внешний AOC 27" U2777PQU с нативным 1920х1080

    Скриншоты:

    МБП 15" @ 1440x900 (native retina)

    5a44cac97ffb8238621649.jpeg

    Внешний 27" @ 1920x1080 (native 4k)

    5a44cad2bc633871105891.jpeg

    Также у меня кастомная тема с размером шрифта 17. Ибо мелкий код и плотные строчки - это плохо читается, нагружает глаза и повышает усталость в конце дня:

    5a44cb1ac82f0772676014.jpeg

    Дополнительно добавлю, что когда сам с винды спрыгивал и собирался брать МБП, тоже думал что буду во всю использовать возможность поместить в экран как можно больше всего. Типа, стану мега-супер-производительнее. И поначалу пробовал. Со временем пришел к тому, что более качественное изображение выигрывает.
    Ответ написан
  • Как в PHPStorm сделать backspace нормальным?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    С enter видимо ничего не получится, нужно привыкать тыкать в начало строки, а не в начало текста...


    Strip trailing spaces в помощь. И забудьте о ручной чистке навсегда.

    5a44c64432b14788882995.jpeg
    Ответ написан