Intereting Posts
Можно вызвать wp_enqueue_style в wp_iframe применить таблицу стилей ко всему, что не только iframe? результаты поиска формы – динамическое добавление адресов электронной почты в контактную форму 7 Добавить атрибут multiple = "multiple" в раскрывающийся список категорий Создание URL-адреса Add Media Link в поле Есть ли способ удалить опцию для изменения Slug в post.php wp_nav_menu печатает детей с родительским именем Как использовать почтовые пользовательские метаданные в заголовках сообщений и постоянных сообщениях Отсутствует панель инструментов / панель администратора на странице поддомена с использованием интеграции WordPress Разделение подменю на столбцы или помещение существующих меню в другое меню в качестве элемента подменю Сообщение формы не работает внутри admin WP_List_Table Разработка безопасной формы отправки на передний конец Странное поведение на новой теме указывает на идиотизм Пользовательский столбец редактирования столбца – категория, не отображающая Как использовать скрипт Word Strength Meter Script Word по умолчанию Как получить пользовательские данные из пользовательской таблицы в базе данных wordpress по ID пользователя?

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

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

Я включил TAG для страниц в function.php, например:

function tags_support_all() { register_taxonomy_for_object_type('post_tag', 'page'); } // ensure all tags are included in queries function tags_support_query($wp_query) { if ($wp_query->get('tag')) $wp_query->set('post_type', 'any'); } // tag hooks add_action('init', 'tags_support_all'); add_action('pre_get_posts', 'tags_support_query'); 

И вот моя функция и короткий код, чтобы отображать ВСЕ дочерние элементы родителя:

 function my_list_child_pages() { global $post; if ( is_page() && $post->post_parent ) $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' ); else $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' ); if ( $childpages ) { $string = '<ul class="list-in-page-menu">' . $childpages . '</ul><div style="clear:both">'; } return $string; } add_shortcode('my_childpages', 'my_list_child_pages'); 

Но я не могу понять, как сортировать дочерние страницы с тегом «важно» в этой функции.

Это вообще возможно?

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

Пересмотрите свои структуры и изучите использование пользовательских типов сообщений и пользовательских таксономий. Вы также можете изучить пользовательские поля для определенных функций.

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

Функция wp_list_pages () имеет фильтр, который может пригодиться здесь:

 /** * Filter the array of pages to exclude from the pages list. * * @since 2.1.0 * * @param array $exclude_array An array of page IDs to exclude. */ $r['exclude'] = implode( ',', apply_filters( 'wp_list_pages_excludes', $exclude_array ) ); 

Лично я бы переосмыслил ваши структуры – Питер уже предложил это, но вы можете попытаться использовать его таким образом:

 function my_wp_list_pages_excludes( $exclude_array ) { // $exclude_array = get_all_your_non_important_pages_here(); return $exclude_array; } add_filter( 'wp_list_pages_excludes', 'my_wp_list_pages_excludes' ); 

Спасибо @PieterGoosen и @realloc.

Я придумал это решение:

Добавлен meta_key=important&meta_value=1 в wp_list_pages() . И вы будете использовать специальное поле для important: 1 страниц important: 1 .

Это для списка ВАЖНЫХ дочерних страниц.

 function important_list_child_pages() { global $post; if ( is_page() && $post->post_parent ) $childpages = wp_list_pages( 'meta_key=important&meta_value=1&sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' ); else $childpages = wp_list_pages( 'meta_key=important&meta_value=1&sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' ); if ( $childpages ) { $string = '<ul class="list-in-page-menu">' . $childpages . '</ul></div></div><div style="clear:both">'; } return $string; } 

И это исключено для дочерних страниц. ВАЖНЫЕ

 function non_important_child_pages() { global $post; $args=array( 'post_type' => 'page', 'meta_key' => 'important', 'meta_compare' => '=', 'meta_value' => '1' ); $pages = get_posts($args); if ($pages) { $pageids = array(); foreach ($pages as $page) { $pageids[]= $page->ID; } $excluded = 'exclude='.implode(",", $pageids); } if ( is_page() && $post->post_parent ) $childpages = wp_list_pages( '' . $excluded . '&sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0'); else $childpages = wp_list_pages( '' . $excluded . '&sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0'); if ( $childpages ) { $string = '<ul class="list-in-page-menu">' . $childpages . '</ul></div></div><div style="clear:both">'; } return $string; }