使用is_page在functions.php中排队脚本不起作用

问题描述 投票:0回答:1

任何人都可以帮助我使用后端块编辑器在某些页面上有条件地排列脚本吗?

我尝试使用开发人员文档中的 is_page() 进行任何操作,我无法理解为什么,函数调用没有 if 语句。

function alerts_enqueue() {
    if (is_page( 'Page Title' ) ) {
        wp_enqueue_script('alerts-script', get_stylesheet_directory_uri() . '/js/alerts.js', true);
    }
}
add_action( 'enqueue_block_editor_assets', 'alerts_enqueue' );
php wordpress wordpress-gutenberg
1个回答
0
投票

您面临的问题是由于

is_page()
仅在前端可用,在后端不可用。有一种解决方法可以处理此特定场景或您的特定页面。有两种选择可以做到这一点。

  1. 使用
    get_current_screen()
    检查您是否位于块编辑器中的特定帖子或页面上:
function alerts_enqueue() {
   $current_screen = get_current_screen();
   if('post' === $current_screen->base && get_the_ID() === xxx ) {
      wp_enqueue_script('alerts-script',get_stylesheet_directory_uri().'/js/alerts.js',array(),null,true);
   }
}
add_action('enqueue_block_editor_assets','alerts_enqueue');
  1. 如果您想通过页面slug定位:
function alerts_enqueue() {
    $current_screen = get_current_screen(); 
    if('post' === $current_screen->base && get_post_field('post_name',get_the_ID()) === 'foo-bar-slug') {
       wp_enqueue_script('alert-script',get_stylesheet_directory_uri().'/js/alerts.js',array(),null,true); 
   }
}
add_action('enqueue_block_editor_assets','alerts_enqueue');

*** 请注意 *** 如果您唯一关心的是确定块编辑器中正在编辑的当前帖子或页面,则不一定需要检查

'post' === $current_screen->base
。但是,包含该检查的原因是为了确保您位于块编辑器中,而不是位于帖子列表、媒体库或设置等其他管理屏幕中。

© www.soinside.com 2019 - 2024. All rights reserved.