Публикация окончательного решения в качестве ответа (Исаак поместил его в качестве комментария) только для тех, кто все еще ищет.
Исаак был на правильном пути с добавлением фильтра через functions.php
.Он ошибся, позвонив по номеру is_front_page()
, который пока не работает, потому что мы находимся в pre_get_posts
, а запрос еще не выполнен.
Однако у нас есть идентификатор текущей страницы.Таким образом, мы все еще можем решить эту проблему, посмотрев в регистр опций WordPress опцию page_on_front
, которая возвращает идентификатор страницы, которую пользователь установил в качестве главной страницы.
(Для обзора всех опций WordPress,просто зайдите <yourwordpressinstallation>/wp-admin/options.php
в вашем браузере.)
Что делает для следующего решения в соответствии с предложением Ijaas :
add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query) {
// Compare queried page ID to front page ID.
if(!is_admin() && $wp_query->get("page_id") == get_option("page_on_front")) {
// Set custom parameters (values based on Isaacs question).
$wp_query->set("post_type", "album");
$wp_query->set("posts_per_page", -1);
// WP_Query shouldn't actually fetch the page in our case.
$wp_query->set("page_id", "");
}
}
Возможно, вам придется изменить несколько условныхтеги, обеспечивающие работу всех плагинов, в зависимости от степени изменения запроса.
Надеюсь, это кому-нибудь поможет.
Обновление: , как отмечено ниже , добавьте !is_admin()
в выражение if
, чтобы убедиться, что функция работает только на внешнем интерфейсе.Если вы хотите, чтобы это действие выполнялось только для начального запроса, вы также можете добавить проверку основного запроса $wp_query->is_main_query()
.