web-dev-qa-db-ja.com

投稿を編集または追加する場合にのみ管理者用のスクリプトとCSSを読み込む方法

投稿を追加または編集するときに管理者が特定の操作を実行できるようにするプラグインがあります。このプラグインには、投稿が追加または編集されているときにのみ含めたいスタイルシートとJavaScriptを使用します。私は以下のアクションフックを使う権利がありますか?

add_action('load-post.php', 'call_my_function');
add_action('load-post-new.php', 'call_my_function');

私が持っている関数call_my_functionの中に:

function call_my_function() {
  $plugin_directory = "/wp-content/plugins/".dirname(plugin_basename(__FILE__));
  $jssrc = $plugin_directory.'/js/my_plugin.js';
  wp_enqueue_script("my_plugin_js", $jssrc);
  $csssrc = $plugin_directory.'/css/my_plugin.css';
  wp_enqueue_style("my_plugin_css", $csssrc);
}

上記のコードは、add_actionフックから呼び出されていないときにCSSファイルとJavascriptファイルを正常にロードします。これらのフックから呼び出されると正常に動作しません。

3
ChiCgi

admin_print_scripts-(page_hook)admin_print_styles-(page_hook)を使いたいので、あなたの場合:

add_action('admin_print_scripts-post.php', 'call_my_function');
add_action('admin_print_scripts-post-new.php', 'call_my_function');

add_action('admin_print_styles-post.php', 'call_my_styles_function');
add_action('admin_print_styles-post-new.php', 'call_my_styles_function');
5
Milo

これらのフックから呼び出されると正常に動作しません。

私は、あなたがページのソースをチェックすることを勧めます、それらのフックはエンキューのためにちょうどうまく働きます。私はとにかくチェックするためにあなたのコードをコピーしました、そしてフックを使うとき私はスタイルシートとスクリプトの両方がキューに入っているのを見ます..

あなたがエンキューをロードする方法は間違っているように見えますが、私は以下のことをお勧めします。

function call_my_function() {
    wp_enqueue_script("my_plugin_js", plugins_url( '/js/my_plugin.js', __FILE__ ) );
    wp_enqueue_style("my_plugin_css", plugins_url( '/css/my_plugin.css', __FILE__ ) );
}
0
t31os

とにかくcustomsubmenuページのスクリプトを含めて、これは私のために働きます:

add_action('admin_menu', 'register_my_custom_submenu_pages');

function register_my_custom_submenu_pages() {

    $email_menu = add_submenu_page( 'edit.php?post_type=events', 'Email Users', 'Email Users', 'edit_others_posts', 'email', 'email_callback' ); 

    add_action( 'admin_print_styles-' . $email_menu, 'email_custom_css' );
    add_action( 'admin_print_scripts-' . $email_menu, 'email_custom_js' );  

}

function email_callback() {

    echo '<div class="wrap">';
        echo '<h2>'.get_admin_page_title().'</h2>';
        include get_stylesheet_directory() . '/admin/email.php';
    echo '</div>';

}

function email_custom_css()
{ 
    wp_enqueue_style( 'chosen',get_stylesheet_directory_uri().'/js/chosen/chosen.min.css' ); 
}; 

function email_custom_js()
{ 
    wp_enqueue_script( 'chosen', get_stylesheet_directory_uri().'/js/chosen/chosen.jquery.min.js', array('jquery')); 
};

これを簡略化すると、以下のようになります。

add_action( 'admin_print_styles-post.php', 'custom_css_load' );
add_action( 'admin_print_styles-post-new.php', 'custom_css_load' );

add_action( 'admin_print_scripts-post.php', 'custom_js_load' ); 
add_action( 'admin_print_scripts-post-new.php', 'custom_js_load' ); 

function custom_css_load()
{ 
    wp_enqueue_style( 'my_styles', plugins_url( '/css/my_plugin.css', __FILE__ ) ); 
}; 

function custom_js_load()
{ 
    wp_enqueue_script( 'my_scripts', plugins_url( '/js/my_plugin.js', __FILE__ ), array('jquery')); 
};

あなたのJSコードがそれに依存している場合はjQueryの後にロードすることを忘れないでください。

私はこれをテストしなかったので、あなたが喜ばせるようにそれを使ってください:)

0