Задать вопрос
Ответы пользователя по тегу WordPress
  • Плагин advanced custom filed pro?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У PHP есть ограничение на количество переменных во входящем запросе, вам необходимо увеличить его в вашем файле php.ini:

    max_input_vars = 3000

    Значение по умолчанию - 500.
    Ответ написан
    Комментировать
  • Wordpress: один main.js файл для ajax и общих скриптов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если сайт делается под протокол HTTP/1.1, тогда конкатенация скриптов и стилей в бандлы – это нормально и правильно.

    Если сайт делается под протокол HTTP/2, тогда конкатенация файлов является антипаттерном и делать ее не нужно. По крайней мере в один файл, разбивайте на логичные компоненты / сборки.
    Ответ написан
  • Wordpres как вывести первый 4 запись в одно столбик, остальные по 3 в второй столбик?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    $count = 1;
    
    while ( have_posts() ) : the_post();
    
        if ( $count === 1 ) {
            echo '<div class="left-column">';
        }
    
        // Здесь вывод записи
    
        if ( $count === 4 ) {
            echo '</div>';
        }
    
        $count++;
    endwhile;


    Это выведет:
    <div class="left-column">
        запись
        запись
        запись
        запись
    </div>
    запись
    запись
    запись
    ...

    С помощью CSS div с классом left-column ставите слева, остальные записи складываете справа.
    Ответ написан
    Комментировать
  • Как запретить вывод записей в родительской категории из дочерних рубрик?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вам нужно черех хук pre_get_posts модифицировать основной запрос WP_Query, и указать выборку только из конкретной категории, без детишек. Есть 2 варианта.

    Вариант 1 – на всех архивах категорий всегда выводить только записи конкретно из запрошенного термина:

    /**
     * For category archives, always show only the posts in queried category, not their children.
     *
     * @param \WP_Query $query
     */
    function exclude_category_children( $query ) {
        if ( $query->is_category() && $query->is_main_query() ) {
            $query->set( 'tax_query', [
                [
                    'taxonomy'         => 'category',
                    'field'            => 'slug',
                    'terms'            => $query->query_vars['category_name'],
                    'include_children' => false
                ],
            ] );
        }
    }
    add_action( 'pre_get_posts', 'exclude_category_children' );

    Вариант 2 – то же самое, только без явного Tax_Query, хотя с промежуточным получением текущего термина:

    function exclude_category_children( $query ) {
        if ( $query->is_category() && $query->is_main_query() ) {
            $category = get_category_by_slug( $query->query_vars['category_name'] );
            $query->set( 'category__in', $category->term_id );
        }
    }
    add_action( 'pre_get_posts', 'exclude_category_children' );

    Параметр category__in заставляет WP_Query возвращать по строгому совпадению, поэтому будет без дочерних. Но нужно сначала получить ID категории, поэтому будет один дополнительный запрос. При использовании хука pre_get_posts первый вариант лучше. При использовании произвольного вторичного цикла WP_Query второй метод будет лучше (передать сразу ID категории в параметры нового WP_Query).
    Ответ написан
    2 комментария
  • Почему результат WPQuery выводится до текста страницы?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ответ Денис Янчевский правильный, я лишь допишу, что происходит это потому что шорткод должен возвращать данные, а ваш код (без буферизации) данные не возвращает, а выводит. Соответственно вывод происходит в момент выволпнения, до того как была собрана страница целиком.
    Ответ написан
    Комментировать
  • Как Wordpress выключает ресенд формы при обновлении страницы?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Для отправки форм в админке WordPress использует файл /wp-admin/admin-post.php, аналогичный более популярному и привычному /wp-admin/admin-ajax.php, после обработки данных на хуках происходит внутренний редирект. Отсюда и отсутствие данных в $_POST после такой оработки.

    Вот тут подробнее как этим пользоваться в своих целях.
    Ответ написан
    Комментировать
  • Как скрыть "featured image" внутри поста?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В шаблоне который выводит пост, если он используется и на главной, и в single, вывод featured image (скорее всего the_post_thumbnail() там стоит) оберните в if ( is_frontpage() )
    Ответ написан
    Комментировать
  • Как перенести Wordpress с PHP 5 на PHP 7?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    WordPress работает даже на PHP 7.2, я уже на нем все пилю. Xdebug еще не работает на 7.2, а WordPress уже. Ибо там нет ничего такого. А вот всякие говноплагины - это да, проблемка. Включаем дебаг, отлавливаем ошибки и правим. В большинстве случаев это какие-то deprecated нюансы, типа create_function или конструкторы класса старого образца.
    Ответ написан
    Комментировать
  • Как исправить эту ошибку parameter 2 to be array, string given in?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Видимо на каком-то хуке висит функция, которая 2м параметром должна принимать массив, а вы передаете ей строку. Самый простой способ решить - вместо $my_var (которая у вас строка) передать array( $my_var ) (то есть массив с этой строкой в виде элемента массива). Но в случаях, если требуется ассоциативный массив, это конечно не поможет. Впрочем, в этом случае надо смотреть в какой конкретно функции это происходит и читать ее сигнатуру, в доке будет описание переменной и подсказка что туда передавать.
    Ответ написан
  • Как сделать мультисайтовость в Wordpress на поддоменах, создавая каждый поддомен на хостинге?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Это необходимо для генерации сертификата Lets encrypt для каждого поддомена в отдельности.

    https://letsencrypt.org/2017/07/06/wildcard-certif...

    Wildcard-сертификаты (*.test.ru) уже на подходе.
    Ответ написан
    3 комментария
  • Как вывести заголовок записи на Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    мне надо сделать страницу с блогом (блог не на главной)

    1. Создаете статичную страницу Blog, в настройках чтения назначаете ее страницой блога, а в permalinks перед дефолтной схемой добавляете /blog/

    и надо сделать цикл вывода записей

    2. После выполнения п.1 главный цикл будет содержать что надо, как будто это обычный листинг блога, и the_title() в цикле будет выдавать заголовки записей.
    Ответ написан
    1 комментарий
  • Как сделать текст поверх картинки в динамических блоках на 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
    Хранятся циферки эти в базе данных, скорее всего в wp_postmeta. Зайдите, найдите, измените 5 на 745 (к примеру).
    Ответ написан
    Комментировать
  • 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-запрос от формы возвращает какую-то ошибку. Поправьте ее и все будет в порядке.
    Ответ написан
    Комментировать
  • Как заменить конструкцию 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»

    Это по кросс-доменным запросам. Настраивается на уровне сервера.
    Ответ написан