получить_категорию отображать только 1

Вопрос или проблема

Я нашел этот код, который идеально подходит для того, над чем я работаю, но требует небольших изменений. Что мне нужно, так это просто отобразить подкатегории родительской категории.

Как мне изменить get_categories(), чтобы получить только конкретные категории, которые мне нужны? Потому что это будет отображать все доступные категории.

function ba_SearchFilter($query) {
    if (!$query->is_search) {
        return $query;
    }
    if (isset($_POST['cat'])){
        $query->set('category__and', $_POST['cat']);
    }
    if (isset($_POST['tags'])){
        $query->set('tag__and', $_POST['tags']);
    }
    return $query;
}
//подключение фильтров к поиску
add_filter('pre_get_posts','ba_SearchFilter');

function ba_search_with_filters(){
    $out="<form role="search" method="get" id="searchform" action="". home_url( "https://wordpress.stackexchange.com/" ).'">
    <div><label class="screen-reader-text" for="s">Поиск:</label>
        <input type="text" value="" name="s" id="s" /><br />';
            $categories=  get_categories(); 
            foreach ($categories as $category) {
                $option = '';
                $option .= '<input type="checkbox" name="cat[]" id="cat[]" value="'.$category->term_id.'"> ';
                $option .= $category->cat_name .'<br />';
                $out.= $option;
            }
            $tags=  get_categories(); 
            foreach ($tags as $tag) {
                $option = '';
                $option .= '<input type="checkbox" name="tags[]" id="tags[]" value="'.$tag->term_id.'"> ';
                $option .= $tag->cat_name .'<br />';
                $out.= $option;
            }
    $out .='<input type="submit" id="searchsubmit" value="Поиск" />
        </div>
        </form>';
    return $out;
}

add_shortcode('search_with_filter','ba_search_with_filters');

Добавлен аргумент для $categories. Введите ID родительской категории, чтобы отобразить все подкатегории.

function ba_SearchFilter($query) {
    if (!$query->is_search) {
        return $query;
    }
    if (isset($_POST['cat'])){
        $query->set('category__and', $_POST['cat']);
    }
    if (isset($_POST['tags'])){
        $query->set('tag__and', $_POST['tags']);
    }
    return $query;
}
//подключение фильтров к поиску
add_filter('pre_get_posts','ba_SearchFilter');

function ba_search_with_filters(){
    $out="<form role="search" method="get" id="searchform" action="". home_url( "https://wordpress.stackexchange.com/" ).'">
    <div><label class="screen-reader-text" for="s">Поиск:</label>
        <input type="text" value="" name="s" id="s" /><br />';
        $args = array ( 'child_of' => 1 );
            $categories=  get_categories( $args ); 
            foreach ($categories as $category) {
                $option = '';
                $option .= '<input type="checkbox" name="cat[]" id="cat[]" value="'.$category->term_id.'"> ';
                $option .= $category->cat_name .'<br />';
                $out.= $option;
            }
    $out .='<input type="submit" id="searchsubmit" value="Поиск" />
        </div>
        </form>';
    return $out;
}

add_shortcode('search_with_filter','ba_search_with_filters');

Получите текущую категорию, в которой вы находитесь, исходя из $_POST. Затем получите все дочерние категории.

$args = array();

if ( isset( $_POST['cat'] ) ) {
  $args = array( 'child_of' => (int) $_POST['cat'] );
}

$categories = get_categories( $args );

Замените следующие две строки кода:

$categories= get_categories(); на $categories= get_categories(array('hide_empty' => 0 ));

и

$tags= get_categories(); на $tags= get_categories(array('hide_empty' => 0 ));

Я добавил параметр array('hide_empty' => 0 ), чтобы пропустить пустой список. Надеюсь, это поможет вам!

Ответ или решение

Как отобразить только подкатегории родительской категории с помощью функции get_categories()

В процессе разработки функционала поиска с фильтрами в WordPress, вам может понадобиться отобразить только подкатегории определенной родительской категории. Чтобы реализовать это, необходимо внести некоторые изменения в функцию ba_search_with_filters(), а также в аргументы, передаваемые в функцию get_categories(). Давайте рассмотрим, как этого добиться.

Шаг 1: Определение родительской категории

Для начала, вам нужно будет передать идентификатор родительской категории, подкатегории которой вы хотите отобразить. Это можно сделать с помощью переменной POST, которую вы можете получить из формы поиска.

Шаг 2: Изменение кода функции ba_search_with_filters()

  1. В функции ba_search_with_filters() вам нужно будет заменить часть, отвечающую за получение категорий, на код, который будет использовать переменную POST для получения идентификатора родительской категории.

  2. Также убедитесь, что вы указываете необходимые параметры в функции get_categories(), чтобы получать только те категории, которые вам нужны.

Вот как можно изменить вашу функцию:

function ba_search_with_filters(){
    $out = '<form role="search" method="get" id="searchform" action="'. home_url( "/search/") .'">
    <div><label class="screen-reader-text" for="s">Search for:</label>
        <input type="text" value="" name="s" id="s" /><br />';

    // Инициализация параметров для получения категорий
    $args = array( 'hide_empty' => 0 ); // получите все категории, включая пустые
    if ( isset( $_POST['cat'] ) ) {
        // Получаем подкатегории, если установлен идентификатор родительской категории
        $args['child_of'] = (int) $_POST['cat'];
    }

    $categories = get_categories($args); 
    foreach ($categories as $category) {
        $option = '';
        $option .= '<input type="checkbox" name="cat[]" id="cat[]" value="'.$category->term_id.'"> ';
        $option .= $category->cat_name .'<br />';
        $out .= $option;
    }

    $out .= '<input type="submit" id="searchsubmit" value="Search" />
        </div>
        </form>';
    return $out;
}

add_shortcode('search_with_filter', 'ba_search_with_filters');

Оптимизация SEO и читабельность

  • Убедитесь, что ваша форма поиска правильно захватывает и обрабатывает входные данные пользователя, что поможет улучшить пользовательский опыт.
  • Используйте понятные и описательные label для ваших полей ввода, это не только поможет пользователям, но и улучшит SEO.
  • Не забывайте об обработке пользовательских данных для предотвращения возможных уязвимостей, таких как SQL инъекции.

Заключение

С помощью приведенного выше кода вы можете легко отобразить только подкатегории для выбранной родительской категории. Корректируя параметры функции get_categories(), вы получаете гибкость в управлении категориями и точно настраиваете отображение необходимой информации для пользователей. Успехов в вашей работе с WordPress!

Оцените материал
Добавить комментарий

Капча загружается...