Intereting Posts
Контроль доступа пользователя в боковую панель архива и категорий Импорт мультимедиа в онлайн-WordPress из локальной разработки Магазин WordPress: включение custormers для выбора цвета продукта с помощью эскизов изображений на пользовательских полях Как получить идентификатор домашней страницы? Обрезание изображения перед вставкой в ​​сообщение Какое влияние на производительность WordPress на количество классов / файлов в плагине? Интеграция с настраиваемым типом Pods с меню навигации и current_menu_parent WordPress, получающий css и файлы сценариев с клиентской машины, а не на серверной машине Как удалить ВСЕ комментарии из определенной категории в базе данных WordPress? Визуальный редактор работает только для пользователя admin Отображать данные, когда категория пуста Переписывание на другую страницу на основе существования строки запроса? Каков наилучший способ хранения нескольких полей? Запрос типа персонализированного сообщения, упорядочение с помощью пользовательской таксономической разбивки на страницы не работает Фиксированные значения для одинаковых почтовых переводов

Список страниц для отображения только вспомогательных страниц с белыми списками

В моей настраиваемой теме я хочу показать все родительские страницы, но для некоторых из этих родительских страниц я не хочу показывать свои подстраницы.

Я знаю, что вы можете добавить все эти подстраницы к аргументу «исключить» функции wp_list_pages, но я хочу убедиться, что всякий раз, когда кто-то добавляет новую подстраницу, этот файл также не будет отображаться.

Исключить дерево может быть возможным, но это также игнорирует родительскую страницу.

Мой код:

$subtitle_walker = new Subtitle_Walker(); $args = array( 'authors' => '', 'child_of' => 0, 'date_format' => get_option('date_format'), 'depth' => 2, 'echo' => 1, 'exclude' => '', 'exclude_tree' => '', 'include' => '', 'link_after' => '', 'link_before' => '', 'post_type' => 'page', 'post_status' => 'publish', 'show_date' => '', 'sort_column' => 'menu_order', 'title_li' => '', 'walker' => new Subtitle_Walker ); wp_list_pages($args); 

Простейшей вещью для идентификаторов страниц в белый список для wp_list_pages() является использование самоотдачи / однократного запуска обратного вызова фильтра внутри get_pages() , который является функцией извлечения данных из кэша или из нового запроса в БД.

У вас есть несколько вариантов:

Фильтрация итогового результата DB

Чтобы отфильтровать список возвращенных страниц, вы можете создать себе быстрый плагин с обратным вызовом фильтра, который вы можете использовать в своих шаблонах:

 <?php /** Plugin Name: WPSE (#165677) Whitelist pages Callback */ function wpse165677_whitelist_pages( $pages, $arguments ) { if ( empty( $pages ) ) return $pages; // Remove instantly remove_filter( current_filter(), __FUNCTION__, 10 ); // whitelist: loop through pages and build your return array of allowed pages return $pages; } 

Затем в шаблоне:

 add_filter( 'get_pages', 'wpse165677_whitelist_pages', 10, 2 ); wp_list_pages( [ // your arguments ] ); 

Это вызывает некоторые ненужные страницы, но это быстрое решение и может не повредить производительность, если у вас нет сотен страниц.

Игнорировать страницы с белым списком в MarkUp

Просто создайте пользовательский ходок, который только строит подстраницу MarkUp для ваших белых страниц.

Предварительная выборка и исключение страниц

Вы можете сделать запрос только для идентификатора

 $wpdb->prepare( "SELECT id FROM{$wpdb->posts} WHERE {$wpdb->posts}.post_type = 'page' AND {$wpdb->posts}.id IN (%s)", join( ",", [ /* IDs Array */ ] ), ); 

где вы затем просто различаете это возвращаемое значение для всех возвращаемых идентификаторов типа post post, чтобы создать черный список. Затем верните это внутри обратного вызова в wp_list_pages_excludes , который используется для заполнения аргумента exclude . Вы можете использовать wp_parse_id_list() чтобы упростить wp_parse_id_list() списка.

 add_filter( 'wp_list_pages_excludes', function( $blacklist ) { // logic to build blacklist return $blacklist; } 

Пропустить аргументы

Ни в docBlock, ни в Codex wp_list_pages() не объясняется, что на этих аргументах функций нет фильтра, прежде чем они будут переданы get_pages() . Поэтому аргумент include работает и над этой функцией. Имейте в виду, что этот аргумент нельзя использовать вместе с 'child_of', 'parent', 'exclude', 'meta_key', 'meta_value', or 'hierarchical'.

Вывод

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