Intereting Posts
Как ограничить 1 изображение за сообщение только на домашней странице? удалить пользовательскую таксономию Локализация строк, которые поступают извне плагина? Запретить доступ к папке загрузок с исключениями wp-cli работает неправильно. Нет ответа от команд Как разместить свою форму комментариев над комментариями? Использование фильтра «excerpt_more» для определенного типа сообщения Создание предварительного просмотра в пользовательском мета-окне Индикатор подменю, который ссылается на подменю Изменить постоянную ссылку автора с помощью htaccess? Пользовательское меню: имена ссылок Что такое файл шаблона для макетов тем в bbPress? Удалите все файлы и базу данных удалённого сайта в многопользовательском режиме Добавление идентификатора категории или пули в меню WP Nav Создать страницы автоматически, если они не существуют

Сообщение находится в категории потомков, не работающих в 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-запрос для каждого сообщения …

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