Вопрос или проблема
Я хотел бы попросить помощи с этим кодом для моей страницы на 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. Даю вам подробное объяснение, как решить данную задачу, обращая внимание на представленный контекст и исправляя ошибки в вашем подходе.
Проблемы текущего кода:
-
Ограничение по родительской категории: Код корректно задает
parent => 6
, что ограничивает категории только указанным родителем. Это должно работать, если вы уверены в правильности ID родителя. -
Определение текущей категории: Задача заключается в том, чтобы корректно идентифицировать текущую категорию. Ваша логика делает это для первой категории, но не учитывает ситуацию, когда первая категория не принадлежит родителю с ID=6.
Оптимальное решение:
-
Получение текущей категории: Убедитесь, что вы правильно определяете текущую категорию, используя
get_queried_object()
, если ваш код выполняется на архивной странице. -
Условие получения категорий: Чтобы отобразить только те категории, которые принадлежат родителю с 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.