Условия для действия admin get_current_screen родительский файл edit.php?post_type=page

Вопрос или проблема

У меня есть плагин, который требует загрузки скриптов для панели администратора в выпадающем списке атрибутов страницы для типа публикации “страница”.

Однако этот скрипт вызывает Uncaught TypeError: для типов публикаций “пост”, что является правильным ответом, и я понимаю, что это не то, на чем мне следует сосредоточиться.

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

Были предприняты рациональные усилия, чтобы найти и исправить это, но без особого успеха. В class-wp-screen.php, строка 95, я нахожу $parent_base, но не знаю, как это отформатировать, чтобы это соответствовало условиям.

Мой код для модификации

add_action('admin_enqueue_scripts', 'gp_front_page_script');

function gp_front_page_script() 
{
    if ( isset( $_GET['post']) && isset( $_GET['action']) && $_GET['action'] == 'edit' ) 
    {
        wp_enqueue_script('gp_fp', 
        plugins_url() . '/network-plugins/includes/globals/genpages/front-page.js',
       array('jquery'));
    }
}

Как мне отформатировать условие, чтобы загружать скрипт на edit.php?post_type=page и не на любом другом экране, т.е. edit.php?

Вы можете использовать get_current_screen(), чтобы получить информацию о текущем экране. Мы хотим подключиться на или после load-edit.php, потому что get_current_screen() определяется непосредственно перед этим хуком.

Подключившись к load-edit.php, мы гарантируем, что этот код выполнится только на странице edit.php. Затем мы проверяем текущий экран, чтобы узнать, является ли тип публикации страницей. Если это так, мы подключаем скрипт.

add_action( 'load-edit.php', 'wpse_259909_load_edit' );
function wpse_259909_load_edit() {
  if( 'page' === get_current_screen()->post_type ) {
    add_action( 'admin_enqueue_scripts', 'gp_front_page_script' );
  }
}

function gp_front_page_script() {
  wp_enqueue_script(
    'gp_fp', 
    plugins_url() . '/network-plugins/includes/globals/genpages/front-page.js',
    array( 'jquery' )
  );
}

Если вам нужен скрипт на отдельных страницах редактирования, вы также можете добавить этот хук.

add_action( 'load-page.php', 'wpse_259909_load_edit' );

Если вам нужен скрипт на новых страницах редактирования, вы также можете добавить этот хук.

add_action( 'load-page-new.php', 'wpse_259909_load_edit' );

Я не уверен, почему приведенный выше код не работает для вас. Я добавил этот код в пустой плагин на чистой установке WP 4.7.3, и он подключает Javascript в заголовке после jQuery.

Хук load-edit.php срабатывает довольно рано в запросе, поэтому, возможно, вы добавляете хук слишком поздно.

Вы можете использовать get_current_screen() также в хуке admin_enqueue_scripts, но вам нужно убедиться, что вы находитесь на экране редактирования. Так что это тоже должно сработать.

add_action( 'admin_enqueue_scripts', 'gp_front_page_script' );    
function gp_front_page_script() {
  $current_screen = get_current_screen();
  if( 'edit' === $current_screen->parent_base && 'page' === $current_screen->post_type ) {
    wp_enqueue_script(
      'gp_fp', 
      plugins_url() . '/network-plugins/includes/globals/genpages/front-page.js',
      array( 'jquery' )
    );
  }
}

Ответ или решение

Чтобы загрузить скрипты на странице редактирования только для типов контента страницы (post_type=page) в административной панели WordPress, необходимо применять условную логику с использованием функции get_current_screen(). Ваша задача заключается в том, чтобы убедиться, что скрипт загружается исключительно на странице с параметром edit.php, где тип поста равен ‘page’.

Пошаговое руководство по условной загрузке скриптов

  1. Хук загрузки скриптов: Сначала необходимо использовать хук admin_enqueue_scripts. Этот хук позволяет вам регистрировать и загружать ваши скрипты в админке.

  2. Проверка текущего экрана: Используйте функцию get_current_screen(), чтобы получить информацию о текущем экране. Это позволит вам проверить, что вы находитесь на странице редактирования специфичного типа записи.

  3. Условие для проверки типа записи: Для вашего случая, нужно убедиться, что текущее значение parent_base равно ‘edit’ и post_type равно ‘page’.

Вычисление логики

Вот как можно структурировать ваш код, чтобы правильно выполнить вышеуказанные условия:

add_action('admin_enqueue_scripts', 'gp_front_page_script');

function gp_front_page_script() {
    $current_screen = get_current_screen();

    // Проверяем, что мы находимся на странице редактирования поста и это тип поста 'page'
    if (isset($current_screen->parent_base) && $current_screen->parent_base === 'edit' && $current_screen->post_type === 'page') {
        wp_enqueue_script('gp_fp', 
        plugins_url('/network-plugins/includes/globals/genpages/front-page.js'), 
        array('jquery'));
    }
}

Почему это работает

  • get_current_screen(): Эта функция возвращает объект, содержащий данные о текущем экране. Используя её, вы можете извлекать такие параметры, как parent_base и post_type.

  • Проверка на пустое значение: Мы используем isset(), чтобы предотвратить ошибки, если объект не определён.

  • Эффективная оптимизация: Скрипт будет загружен только тогда, когда вы находитесь на странице редактирования записей типа ‘page’, тем самым предотвращая его загрузку на страницах других типов записей.

Дополнительные настройки

Если необходимо, чтобы скрипт также загружался на экранах создания новых страниц или на страницах отдельных записей, можно добавить дополнительные хуки аналогично:

add_action('load-page.php', 'gp_front_page_script');
add_action('load-page-new.php', 'gp_front_page_script');

Заключение

Использование get_current_screen() в сочетании с условиями проверки типов записей является оптимальным решением для загрузки JavaScript, необходимого только для редактора страниц в WordPress. Данная практика позволяет поддерживать ваш код чистым и управляемым, избегая ненужной загрузки скриптов на других экранах административной панели. Такой подход улучшает производительность и уменьшает риск возникновения ошибок, гарантируя, что ваш скрипт будет работать только тогда, когда это действительно необходимо.

Оцените материал
Добавить комментарий

Капча загружается...