Intereting Posts
Флажки для отображения категорий Использование ACF для отображения данных на всех страницах создание глоссария с wordpress запрос mysql на wp_user и проблему user_meta Проблемы с использованием 'add_role' wp_enqueue_script не включается в нижний колонтитул Преимущества / Недостатки Использование редактора темы вместо страниц Частный контент «Родители» для школьного сайта Найти сообщения без избранных изображений? Как удалить подписчиков из публикации Author Drop Down Правильный способ обезвреживания метаданных Выполните несколько update_user_meta с помощью одной функции Отобразить все пользовательские термины таксономии и их соответствующие пользовательские сообщения С более чем страницей содержимого нижний колонтитул остается там, где нижняя часть экрана находилась в верхней строке прокрутки дублировать функции раздела комментариев и называть его чем-то другим для пользовательских типов сообщений

Сообщение находится в категории потомков, не работающих в home.php

Я создал настраиваемую функцию в functions.php, чтобы проверить, является ли post_is_in_descendant_category, и я контролирую ее из плагина, который возвращает true, это сообщение в категории потомков, оно хорошо работает

Но это не работает в моем home.php , странно то, что когда я проверяю, будет ли post_is_in_descendant_category для любой записи в файле home.php,

Я хочу знать причину этого и как его исправить

мой код для post_is_in_descendant_category

if ( ! function_exists( 'post_is_in_descendant_category' ) ) { function post_is_in_descendant_category( $cats, $_post = null ) { foreach ( (array) $cats as $cat ) { // get_term_children() accepts integer ID only $descendants = get_term_children( (int) $cat, 'category' ); if ( $descendants && in_category( $descendants, $_post ) ) return true; } return false; } } 

мой код плагина:

 function check_category(){ global $rtlDir; if ( $category_to_check = get_term_by( 'slug', 'category-3', 'category' )){ if(post_is_in_descendant_category($category_to_check->term_id)){ $rtlDir = true; }else{ $rtlDir = false; } } } add_filter("wp","check_category"); 

Solutions Collecting From Web of "Сообщение находится в категории потомков, не работающих в home.php"

home.php – это архив сообщений, и когда вы просматриваете home.php и выполняете функцию в плагине, (на 'wp' hook) нет текущей записи.

Таким образом, функция post_is_in_descendant_category вызывает in_category($descendants, null) которые никогда не смогут вернуть true, если нет текущей записи.

По этой причине вы должны запустить функцию плагина на 'the_post' действия 'the_post' , если вы хотите, чтобы он 'the_post' для каждой записи в архиве, например:

 add_filter("the_post", "check_category"); function check_category($post) { // here your code global $rtlDir; if ( $category_to_check = get_term_by( 'slug', 'category-3', 'category' ) ){ if( post_is_in_descendant_category($category_to_check->term_id, $post) ){ $rtlDir = true; } else { $rtlDir = false; } } } 

Это должно работать, но не кажется хорошим решением: это запускает дополнительный db-запрос для каждого сообщения …

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