отобразить текущие категории портфолио из определенного родителя

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

Я хотел бы попросить помощи с этим кодом для моей страницы на WordPress. Я хотел бы отображать только текущие категории портфолио на странице портфолио. Я использовал этот код, но он показывает все категории портфолио от родителя ‘6’. Спасибо!

<?php 
$args = array(

  'hierarchical' => 1,
  'taxonomy' => 'portfolio_category',
  'hide_empty' => 0,
  'parent' => 6,
);
$categories = get_categories($args);

foreach($categories as $category) {

  echo '<a href="' . get_category_link($category->cat_ID) . '" title="' . $category->name . '">' . $category->name . '</a><br>';

  } 

?>

$term_id = $current_term_id;      
  $args = array(

      'hierarchical' => 1,
      'taxonomy' => 'portfolio_category',
      'hide_empty' => 0,
      'parent' => 6,
    );
    $categories = get_categories($args);

    foreach($categories as $category) {

     if( $term_id != $category->cat_ID){
          continue;
      }



      echo '<a href="' . get_category_link($category->cat_ID) . '" title="' . $category->name . '">' . $category->name . '</a><br>';

      }             

Я предполагаю, что у вас есть текущая категория портфолио в переменной $current_term_id. Однако, если у вас нет идентификатора текущей категории и вы находитесь на архивной странице, вы можете получить его, используя get_queried_object().

$current_term = get_the_terms( get_the_ID(), 'portfolio_category' );
$term_id = '';
if( !empty( $current_term ) ){
$term_id = $current_term[0]->term_id;      
}
  $args = array(

      'hierarchical' => 1,
      'taxonomy' => 'portfolio_category',
      'hide_empty' => 0,
      'parent' => 6,
    );
    $categories = get_categories($args);

    foreach($categories as $category) {

     if( $term_id != $category->cat_ID){
          continue;
      }



      echo '<a href="' . get_category_link($category->cat_ID) . '" title="' . $category->name . '">' . $category->name . '</a><br>';

      }  

теперь отображается только один (первый) из списка отмеченных категорий портфолио, но если первый не от родителя «6», то ничего не отображается:

Если я отмечу эти:

родитель 1

  • –ребенок 11
  • –ребенок 12
  • –ребенок 13

родитель 2 (ID=6)

  • –ребенок 21
  • –ребенок 22 (X)

родитель 3…

тогда отображается ребенок 22 (это ожидаемо).

Но если я отмечу эти:

родитель 1

  • –ребенок 11
  • –ребенок 12 (X)
  • –ребенок 13

родитель 2 (ID=6)

  • –ребенок 21
  • –ребенок 22 (X)

родитель 3…

тогда ничего не отображается. В этом случае, если я уберу 'parent' => 6, то отображается ребенок 12.

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

Ваш запрос связан с отображением текущих категорий портфолио на странице вашего WordPress-сайта, при условии, что вы хотите ограничиться конкретными подкатегориями родительской категории с ID=6. Даю вам подробное объяснение, как решить данную задачу, обращая внимание на представленный контекст и исправляя ошибки в вашем подходе.

Проблемы текущего кода:

  1. Ограничение по родительской категории: Код корректно задает parent => 6, что ограничивает категории только указанным родителем. Это должно работать, если вы уверены в правильности ID родителя.

  2. Определение текущей категории: Задача заключается в том, чтобы корректно идентифицировать текущую категорию. Ваша логика делает это для первой категории, но не учитывает ситуацию, когда первая категория не принадлежит родителю с ID=6.

Оптимальное решение:

  1. Получение текущей категории: Убедитесь, что вы правильно определяете текущую категорию, используя get_queried_object(), если ваш код выполняется на архивной странице.

  2. Условие получения категорий: Чтобы отобразить только те категории, которые принадлежат родителю с ID=6, вы должны сделать выборку категорий с учетом данного условия.

Вот код, который полностью учитывает ваш запрос:

<?php
// Получаем текущий объект категории
$current_category = get_queried_object(); 

// Убедитесь, что объект категории не пустой и это действительно объект термина
if (!empty($current_category) && is_object($current_category)) {
    $term_id = $current_category->term_id;

    $args = array(
        'hierarchical' => 1,
        'taxonomy' => 'portfolio_category',
        'hide_empty' => 0,
        'parent' => 6,
    );

    $categories = get_categories($args);

    // Для каждой категории проверяем, совпадает ли она с текущей
    foreach($categories as $category) {
        if ($term_id == $category->term_id) {
            echo '<a href="' . get_category_link($category->term_id) . '" title="' . esc_attr($category->name) . '">' . esc_html($category->name) . '</a><br>';
        }
    }
}
?>

Объяснение кода:

  • Проверка на текущий объект: get_queried_object() используется для получения текущей категории, если код выполняется в контексте архивной страницы. Это универсальный метод для получения ID текущей категории.

  • Фильтрация категорий: Код выполняет фильтрацию категорий по родителю с ID=6 и выводит только те категории, ID которых совпадает с текущей категорией. Так вы избегаете ситуации, когда отображается неправильная категория.

  • Безопасность и корректность: Не забудьте экранировать выводимые данные функциями esc_attr() и esc_html() для безопасного вывода HTML.

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

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

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