Как определить, какая страница редактируется в данный момент, используя встроенную функциональность WordPress?

Я написал модуль в свою тему WordPress, он слишком сложный и неуместный.

Мне нужно включить блок кода и мне нужен надежный способ определить, редактирует ли пользователь в данный момент определенные страницы.

По сути, мне нужен эквивалент внешней проверки:

if (is_front_page()) {

Но, когда на страницах редактора.

Требуется также иметь возможность ориентироваться на страницы, которым не присвоены специальные имена, такие как главная страница / страница магазина. Поэтому мне может понадобиться настроить таргетинг по идентификатору сообщения.

Каков самый чистый способ выполнить эту проверку?

Я пробовал функцию выше, а также:

$screen = get_current_screen();

Однако это приводит к критической ошибке:

Fatal error: Uncaught Error: Call to undefined function get_current_screen() in ... points to line.

Также были опробованы несколько других методов, я лишь отмечу несколько. Я думал, что смогу заставить одного работать, но, похоже, ни один из них не справился с задачей. Пожалуйста, может кто-нибудь указать мне в правильном направлении?

ИЗМЕНИТЬ Добавление фрагмента примера


// This creates the fatal error.
// $screen = get_current_screen();
// var_dump($screen);

// This is for the front-end 
// if (is_front_page()) {

// global $pagenow;
// var_dump($pagenow);
// if ($pagenow == 'post.php') {
// This returns string(8) "post.php" which is not descript enough.

// This is front-end
// global $post;
// $post_id = $post->ID;
// Post ID 3887 is Home

if ($post_id == '3887') {

    echo 'hello!';

    require_once('inc/overlays/page-template/fc-front-page.php');
    
} else {

    echo 'Well that did not work!';

}

Причина, по которой я это делаю, не имеет значения, я просто хочу включить файл в другую папку, вызываемый файл будет другим в зависимости от того, какая страница редактируется в данный момент!


person Jason Is My Name    schedule 27.04.2021    source источник
comment
Какую именно критическую ошибку вы видите?   -  person cabrerahector    schedule 27.04.2021
comment
@cabrerahector - обновленный вопрос для вас :)   -  person Jason Is My Name    schedule 27.04.2021
comment
Ах, я не думаю, что у вас обычно есть доступ к функциям администратора, таким как get_current_screen() из вашей темы, если только вы не используете в ней специальные хуки, например admin_init для пример.   -  person cabrerahector    schedule 27.04.2021
comment
С учетом сказанного, если вы хотите, чтобы мы чем-то помогли, поделитесь минимальным воспроизводимым примером ( и объясните, почему вы все это делаете), чтобы мы могли поделиться другими предложениями.   -  person cabrerahector    schedule 27.04.2021
comment
Добавил эту информацию для вас :) Мне нравится admin_init, однако мне все еще нужны знания о том, как определить, какая страница редактируется в данный момент.   -  person Jason Is My Name    schedule 28.04.2021


Ответы (1)


get_current_screen() действует только на страницах администратора.

Объект WP_Screen устанавливается после admin_init через ссылку current_screen хук действия. Вы можете обратиться к Справочнику по API/действиям подключаемого модуля и Действиям, выполняемым во время типичного запроса, чтобы последовательность пускового крючка.

Чтобы убедиться, что объект WP_Screen срабатывает, вы можете использовать следующую функцию. Он будет выводить экранный объект в виде html-комментария на страницах администратора, которые его поддерживают.

add_action( 'current_screen', 'print_r_get_current_screen' );

if ( ! function_exists( 'print_r_get_current_screen' ) ) {

    function print_r_get_current_screen() {

        echo PHP_EOL . '<!--' . PHP_EOL;
        print_r( get_current_screen() );
        echo PHP_EOL . '-->' . PHP_EOL;

    };

};

Но я не думаю, что использование текущего экрана поможет вам достичь того, что вы пытаетесь сделать.

Вы можете использовать get_option( 'page_on_front' );, чтобы получить идентификатор главной страницы.

add_action( 'init', 'print_r_get_option_page_on_front' );

if ( ! function_exists( 'print_r_get_option_page_on_front' ) ) {

    function print_r_get_option_page_on_front() {

        echo PHP_EOL . '<!--' . PHP_EOL;
        print_r( get_option( 'page_on_front' ) ); //... 0 if undefined, page ID if defined
        echo PHP_EOL . '-->' . PHP_EOL;

    };

};

Я уверен, что для woocommerce вы можете использовать woocommerce_get_page_id( 'shop' ).

person amarinediary    schedule 27.04.2021
comment
Цените интерес. Я не могу использовать их, если вы не можете показать мне, как! - person Jason Is My Name; 28.04.2021