Как изменить SQL-запрос для функции get_pages()
В этой статье мы рассмотрим, как можно изменить параметры запроса функции get_pages()
, чтобы отобразить только страницы первого уровня в выпадающем списке на странице настроек "Чтение" в админ-панели WordPress.
Зачем это нужно?
По умолчанию функция get_pages()
возвращает все страницы, но иногда нужно ограничить выборку определенными условиями, например, показать только страницы, которые не имеют родительских страниц.
К сожалению, в WordPress нет хуков (специальных мест, где можно изменить код) для настройки параметров функции wp_dropdown_pages()
, которая использует get_pages()
.
Как это сделать?
Единственный способ изменить SQL-запрос — это использовать хук query
. Этот хук позволяет изменить SQL-запрос перед его выполнением.
Шаги для изменения SQL-запроса
-
Добавьте фильтр: Вставьте следующий код в файл
functions.php
вашей темы:add_filter( 'query', 'get_pages__change_sql_for_admin_pane' );
function get_pages__change_sql_for_admin_pane( $query ) {
if(
! ( did_action( 'in_admin_header' ) || did_action( 'customize_controls_head' ) )
|| in_array( 'get_pages', wp_list_pluck( debug_backtrace(), 'function' ), 1 )
)
return $query;// Разбиваем запрос на части
$split = preg_split( '/(WHERE|ORDER BY)/', $query, -1, PREG_SPLIT_DELIM_CAPTURE );
$WHERE = $split[2];// Добавляем условие для страниц первого уровня
if(
strpos( $WHERE, "post_type = 'page'" )
&& ! strpos( $WHERE, 'post_parent' )
){
$grip = "post_type = 'page'";
$add = 'AND post_parent = 0';$query = str_replace( $grip, "$grip $add", $query );
}
return $query;
} -
Проверка результата: После добавления кода на сайт, в выпадающем списке на странице "Чтение" будут отображаться только страницы первого уровня.
Обратите внимание
Важно помнить, что функция get_pages()
использует кэш объектов для хранения результатов. Если у вас установлено плагин кэширования, который сохраняет результаты между сессиями, изменения могут не сработать, или они могут повлиять на результаты запроса для других страниц. Убедитесь, что кэш очищен при внесении изменений.
Заключение
Теперь вы знаете, как изменить SQL-запрос для функции get_pages()
в WordPress, чтобы адаптировать вывод страниц в админ-панели. Следуйте инструкциям, и вы сможете легко настроить вывод страниц на своем сайте. Если у вас есть вопросы, не стесняйтесь задавать их!