Несколько вещей:
Во-первых, кажется, вы только добавили вызов add_filter
к условию is_front_page()
* true
Это, вероятно, часть этого.
Во-вторых, вы должны , а не определять и / или переопределять функции внутри if
операторов!
В-третьих, особенно для WordPress, с это Action Hook and Filter система, обычно рекомендуется всегда добавлять фильтры и действия и запускать if/else
или прерывать операторы типа внутри функции, чтобы упростить расширение.
Редактировать:
Основываясь на некоторых разъяснениях, я понимаю немного лучше. Вам необходимо получить идентификатор страницы, для которой задана первая страница, которая хранится как опция с именем page_on_front
в таблице параметров. Функция is_front_page()
будет работать только в рамках текущей $wp_query
l oop.
Я думаю, это решит ее для вас. Запустите функцию je_remove_page_template
для фильтра theme_page_templates
и сравните идентификатор текущей страницы с идентификатором, сохраненным в параметре page_on_front
:
add_filter( 'theme_page_templates', 'je_remove_page_template' );
function je_remove_page_template( $pages_templates ){
unset( $pages_templates['page-topimage.php'] );
$home_page_id = absint( get_option( 'page_on_front' ) );
$this_page_id = get_the_ID();
// If this isn't the home page, remove `page-home`
if( $this_page_id != $home_page_id ){
unset( $pages_templates['page-home.php'] );
}
return $pages_templates;
}
Также следует отметить, что что is_front_page()
отличается от is_home()
- убедитесь, что вы используете правильный! (Я верю, что вы, как правило, люди хотят IFP)