Разработка плагинов для Wordpress - Загружайте поставленные в очередь файлы только там, где они нам нужны - PullRequest
0 голосов
/ 20 февраля 2019

Я разработал 2 плагина Wordpress и пытаюсь загрузить необходимые файлы 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 голосов
/ 20 февраля 2019

Я также пробовал это, но 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' );

Он должен ставить в очередь 2 файла только на странице с слагом "shortcodes_plugin".Загружает файлы везде.

0 голосов
/ 20 февраля 2019

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' );

Ссылка

0 голосов
/ 20 февраля 2019

В 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;
?>
...