Вот мой код
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page','post_parent'=>$parid,'orderby'=>'title','order'=>'ASC' ));
Отображает только подстраницы первого уровня. Мне нужны все подстраницы, подстраницы под ... и все. Я искал решение, и я могу получить все подстраницы, используя get_pages и wp_list_pages.
Но мне действительно нужно отсортировать заказ по мета-значению. Поэтому я должен использовать пользовательский запрос.
пожалуйста помоги. Благодарность
wp-query
query-posts
query
phpuser
источник
источник
Ответы:
Почему бы просто не использовать
get_pages()
?например
Но если это действительно должен быть
WP_Query()
объект, используйте похожий метод:источник
WP_Query()
?Проблема
То, что у вас возникают проблемы, это "Как мне сделать X?" Это не одношаговое действие, это многошаговый процесс, и его нужно разбить на части.
Вам не нужно делать это:
Вам нужно сделать это:
Общее решение
Итак, чтобы понять, как бесконечно делать это, пока вы не достигнете конца, без жесткого кодирования, вам нужно понять рекурсивные функции.
например
Применение рекурсии к этой проблеме для решения
Итак, ваш родитель есть
$parid
, а в мета-посте есть ключ$metakey
.Давайте передадим его в функцию, чтобы захватить его детей.
Затем мы отсортируем массив $ children, ключами будут идентификаторы записей, а значения будут мета-значениями.
и давайте определим функцию как:
Это дает вам массив идентификаторов постов и значений, упорядоченных по убыванию. Вы можете использовать другие функции сортировки PHP, чтобы сделать это от высшего к низшему.
А как же дети?
В середине нашего цикла нам нужно сделать рекурсивный вызов, передавая дочерний, а не родительский идентификатор.
Итак, это:
Становится так:
С этой модификацией функция теперь извлекает детей, детей детей, детей детей детей ..... и т. Д.
В конце вы можете обрезать значения в массиве, чтобы получить такие идентификаторы:
Используя эту стратегию, вы можете заменить значение мета-ключа любой другой метрикой или использовать рекурсивные функции другими способами.
Поскольку для полного кода требуется всего несколько секунд базового понимания и быстрой вставки копии, я не оскорбляю ваш разум блоком кода полной вставки копии.
преимущества
Проблемы, с которыми вы столкнетесь
Моя рекомендация
Я бы порекомендовал вам либо сгладить иерархию страниц, либо использовать таксономию. Например, если вы оцениваете посты, имейте таксономию Page Rating с условиями 1,2,3,4 и 5 и т. Д. Это даст вам список постов из коробки.
Кроме того, используйте навигационные меню и полностью обойти эту проблему
источник
Рекурсивно получить все текущие подстраницы
Вот рекурсивный подход с использованием
get_children
. Поместите следующее в свойfunctions.php
:Как это использовать
Используйте указанную выше функцию где угодно, например, так:
Функция поддерживает
args
параметр (строку запроса или массив) иoutput
тип (см. Выше).Так что вы также можете использовать это так:
И из-за зависимости
get_children
=>get_posts
=>WP_Query
вы можете использовать мета значения, как изначально запрашивал автор этого вопроса.источник
Не уверен, что это именно то, что вам нужно, но вы можете использовать функцию wp_list_pages и использовать параметры child_of и глубины.
Для получения дополнительной информации см. Следующую страницу Кодекса: http://codex.wordpress.org/Function_Reference/wp_list_pages
источник
Я сделал рекурсивную функцию, которая получает все дочерние идентификаторы родительской страницы. После того, как у нас есть идентификаторы, мы делаем запрос для страниц и можем упорядочить результаты по мета-ключу / значению.
Если вам нужно отсортировать дочерние элементы по мета-ключу / значению иерархическим образом, вы должны передать значения meta_key и order_by в WP_Query в функции _get_children_ids (вместо окончательного WP_Query).
Если нет, то более простой способ получить весь дочерний идентификатор:
источник
Я ДЕЛАЮ ЭТУ РАБОТУ, ТОЛЬКО КОПИРУЙТЕ ВСТАВИТЬ КОД НА ВАШ ФАЙЛ PAGE.PHP
источник
$post -> ID
?), B) не то, что просили, C) не очень хорошо объяснил.