Intereting Posts
«ID» для тегов и категории Отобразить только избранное изображение на первой странице Функция не работает ни в одном файле, кроме основного файла плагина WordPress Multisite: программно активировать / деактивировать плагин определенного блога параметр orderby не работает в пользовательском запросе wp_enqueue_script не загружает скрипты вообще Возврат URL-адреса изображения из его идентификатора привязки с использованием настраиваемого плагина типа сообщения Использование $ wpdb для извлечения сообщений с метаданными Что-то изменилось в отношении настраиваемых полей профиля в WP 4.8.2 (мои исчезли)? «Meta_value_num» не работает, когда значение обернуто в теги html Сложный WP_Query Зачем устанавливать второй параметр в функции перевода? Как изменить размер изображений из-за ширины контейнера автоматически на стороне сервера / без CSS WordPress Thumbnail добавить действие, если нет миниатюры включена ли сетевая сеть?

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

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