Загрузка пользовательских шаблонов страниц в панель администратора WordPress - PullRequest
1 голос
/ 08 февраля 2020

У меня есть несколько пользовательских шаблонов страниц в моей теме. Но я хочу скрыть некоторые с помощью плагина и показывать только собственный шаблон домашней страницы на странице, которая была установлена ​​в качестве главной страницы "is_front_page" или "is_home". Это то, что я использую в своем плагине, чтобы не показывать некоторые шаблоны страниц.

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

add_filter( 'theme_page_templates', 'je_remove_page_template' );
  function je_remove_page_template( $pages_templates ) {
  unset( $pages_templates['page-topimage.php'] );
  unset( $pages_templates['page-home.php'] );
  return $pages_templates;
}

Приведенный выше код работает совершенно нормально, но мне нужно условие там, чтобы показать домашнюю страницу. php когда страница настроена на главную страницу. Я пробовал этот код, но он не работает.

if ( is_front_page() ) :

    add_filter( 'theme_page_templates', 'je_remove_page_template' );
    function je_remove_page_template( $pages_templates ) {
    unset( $pages_templates['page-topimage.php'] );
    return $pages_templates;
    }

    else :

    function je_remove_page_template( $pages_templates ) {
    unset( $pages_templates['page-topimage.php'] );
    unset( $pages_templates['page-home.php'] );
    return $pages_templates;
    }

endif;

Любые идеи о том, как я могу заставить это работать?

1 Ответ

0 голосов
/ 08 февраля 2020

Несколько вещей:

Во-первых, кажется, вы только добавили вызов 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)

...