WordPress插件开发-仅在需要的地方加载入队文件

时间:2019-02-20 09:26:11

标签: wordpress enqueue

我已经开发了2个Wordpress插件,我试图仅在需要时才在admin中加载所需的css和js文件。

我写了一个函数:

function ds_shortcodes_enqueue() {

$shortcodes_pages = array(
    "shortcodes_plugin",
    "add_shortcode",
    "edit_shortcode"
);
$the_page = isset($_GET['page']);
if(in_array($the_page,$shortcodes_pages)){

    // enqueue all our scripts
    wp_enqueue_style( 'ds-shortcodes-style', plugins_url( '/admin/css/shortcodes-style.css', __FILE__ ) );

    wp_enqueue_script( 'ds-shortcodes-script', plugins_url( '/admin/js/shortcodes-scripts.js', __FILE__ ) );

    }
}
add_action( 'admin_enqueue_scripts', 'ds_shortcodes_enqueue' );

该函数应该仅将文件加载到数组中提到的段的页面上。

然后,我写了第二个插件。不同的名称,不同的文本域,不同的功能,并且我使用了相同的功能:

function ds_videos_enqueue() {

$videos_pages = array(
  "videos_plugin",
  "add_video",
  "edit_video",
  "edit_video_category",
  "video_categories",
  "edit_video_level",
  "video_levels",
  "video_shortcode"
);
$current_page = isset($_GET['page']);
if(in_array($current_page,$videos_pages)){
    wp_enqueue_style( 'ds-videos-style', plugins_url( '/admin/css/videos-style.css', __FILE__ ) );

    wp_enqueue_script( 'ds-videos-script', plugins_url( '/admin/js/videos-scripts.js', __FILE__ ) );
    }
}
add_action( 'admin_enqueue_scripts', 'ds_videos_enqueue' );

现在是问题所在。

他们从admin中任何插件页面上的两个插件加载文件。

我就是不明白。

我找不到任何解决方法。

似乎in_array()总是返回true。

希望您能提供帮助。

谢谢。

3 个答案:

答案 0 :(得分:0)

wp-admin中有一个名为$ pagenow的全局变量,用于保存当前页面的名称,即edit.php,post.php等。

您还可以检查$ _GET请求以进一步缩小位置范围,例如:

function ds_shortcodes_enqueue() {

$shortcodes_pages = array(
    "shortcodes_plugin",
    "add_shortcode",
    "edit_shortcode"
);
if ( isset($_GET['page']) ) {
    global $pagenow;
if(in_array($pagenow,$shortcodes_pages)){


    // enqueue all our scripts
    wp_enqueue_style( 'ds-shortcodes-style', plugins_url( '/admin/css/shortcodes-style.css', __FILE__ ) );

    wp_enqueue_script( 'ds-shortcodes-script', plugins_url( '/admin/js/shortcodes-scripts.js', __FILE__ ) );

    }
    }
}
add_action( 'admin_enqueue_scripts', 'ds_shortcodes_enqueue' );




function ds_videos_enqueue() {

$videos_pages = array(
  "videos_plugin",
  "add_video",
  "edit_video",
  "edit_video_category",
  "video_categories",
  "edit_video_level",
  "video_levels",
  "video_shortcode"
);
if ( isset($_GET['page']) ) {
    global $pagenow;
if(in_array($pagenow,$videos_pages)){
    wp_enqueue_style( 'ds-videos-style', plugins_url( '/admin/css/videos-style.css', __FILE__ ) );

    wp_enqueue_script( 'ds-videos-script', plugins_url( '/admin/js/videos-scripts.js', __FILE__ ) );
    }
}
}
add_action( 'admin_enqueue_scripts', 'ds_videos_enqueue' );

似乎in_array()总是返回true。

<?php 

$videos_pages = array(
  'videos_plugin',
  'add_video',
  'edit_video',
  'edit_video_category',
  'video_categories',
  'edit_video_level',
  'video_levels',
  'video_shortcode'
);
$current_page = isset($_GET['page']);
if(in_array($current_page,$videos_pages,true)){
    echo 'I am debug point';
}else{
    echo 'I am debug point 2';
}

exit;
?>

答案 1 :(得分:0)

我也尝试过这种方法,但是in_array似乎不起作用。

function ds_shortcodes_enqueue() {

    $shortcodes_pages = array(
      "shortcodes_plugin",
      "add_shortcode",
      "edit_shortcode"
    );

    if(in_array("shortcodes_plugin", $shortcodes_pages)){

    // enqueue all our scripts
    wp_enqueue_style( 'ds-shortcodes-style', plugins_url( '/admin/css/shortcodes-style.css', __FILE__ ) );

   wp_enqueue_script( 'ds-shortcodes-script', plugins_url( '/admin/js/shortcodes-scripts.js', __FILE__ ) );

}
add_action( 'admin_enqueue_scripts', 'ds_shortcodes_enqueue' );

它应该仅在页面上以the“ shortcodes_plugin”入队2个文件。它将文件加载到任何地方。

答案 2 :(得分:0)

admin_enqueue_scripts将页面挂钩传递给回调函数。 因此,您可以执行以下操作

function ds_shortcodes_enqueue($hook) {
    if($hook != 'page_where_you_want_scripts') {
        return;
    }
    wp_enqueue_style( 'ds-shortcodes-style', plugins_url( '/admin/css/shortcodes-style.css', __FILE__ ) );
    wp_enqueue_script( 'ds-shortcodes-script', plugins_url( '/admin/js/shortcodes-scripts.js', __FILE__ ) );
}
add_action( 'admin_enqueue_scripts', 'ds_shortcodes_enqueue' );

Reference