web-dev-qa-db-ja.com

カスタムJavaScriptをWordPress=管理者に追加するには?

投稿の編集ページにいくつかのカスタムjqueryコードを追加します。これは、誰かが発行ボタンを押したときにdivを表示するような非常に簡単なものです。

唯一の制限は、管理用テンプレートファイルをハッキングするのではなく、プラグインを使用してこれを実現することです。

私はいくつかのアクションを使用していくつかのスクリプトタグをエコーし​​ようとしましたが、それは方法ではないようです。

30
Nacho

使用 - admin_enqueue_scripts アクションと wp_enqueue_script 管理インターフェイスにカスタムスクリプトを追加する方法。

これは、myscript.jsプラグインフォルダー。それに応じて変更します。 my_custom_scriptハンドルは、モジュールとスクリプトに対して一意でなければなりません。

function my_enqueue($hook) {
    // Only add to the edit.php admin page.
    // See WP docs.
    if ('edit.php' !== $hook) {
        return;
    }
    wp_enqueue_script('my_custom_script', plugin_dir_url(__FILE__) . '/myscript.js');
}

add_action('admin_enqueue_scripts', 'my_enqueue');
62
Tim

Functions.phpファイルのスニペットがあります:

function custom_admin_js() {
    $url = get_bloginfo('template_directory') . '/js/wp-admin.js';
    echo '"<script type="text/javascript" src="'. $url . '"></script>"';
}
add_action('admin_footer', 'custom_admin_js');

Wordpress 3.2.1。

42
Fedir RYKHTIK
<?php
function add_jquery_data() {
    global $parent_file;

    if ( isset( $_GET['action'] ) && $_GET['action'] == 'edit' && isset( $_GET['post'] ) && $parent_file == 'edit.php') {
    // Do some stuff.
    }
}

add_filter('admin_head', 'add_jquery_data');

?>
19
Sean Fisher

admin_enqueue_scriptsおよびwp_enqueue_scriptは、javascriptファイルをダッシュ​​ボードに追加するための推奨される方法です。

// I'm using an anonymous function for brevity.
add_action( 'admin_enqueue_scripts', function() {
    wp_enqueue_script( 'handle', plugin_dir_url( __FILE__ ) . '/script.js' );
} );

ただし、PHP関数を使用してJavaScriptを出力する場合、wp_add_inline_scriptは機能していないようです。代わりに、admin_print_scriptsを使用してスクリプトを直接エコーアウトできますスクリプトタグ自体も含めて、jQueryなどの必要なライブラリの後に読み込まれるように、優先度を高く設定してください。

add_action( 'admin_print_scripts', function() {
    // I'm using NOWDOC notation to allow line breaks and unescaped quotation marks.
    echo <<<'EOT'
<script type="text/javascript">
jQuery(function($){
    // Do stuff here.
});
</script>
EOT;
}, PHP_INT_MAX );
3
Shaun Cockerill

ファイルをロードしたいかどうかに凝って、フィルターをかけたい場合は、 get_current_screen

function myproject_admin_enqueue() {

    $screen = get_current_screen();

    // load on the NEW and EDIT screens of all post types
    if ( 'post' === $screen->base ) {
        wp_enqueue_script('my_custom_script', plugin_dir_url( __FILE__ ) . 'all-admin.js');
    }

    // load on the NEW and EDIT screens of one post type
    if ( 'post' === $screen->base && 'myposttype' === $screen->post_type ) {
        wp_enqueue_script('my_custom_script', plugin_dir_url( __FILE__ ) . 'mypostype-admin.js');
    }

    // load only when adding a NEW post, not when editing an existing one.
    if ( 'post' === $screen->base && 'add' === $screen->action ) {
        wp_enqueue_script('my_custom_script', plugin_dir_url( __FILE__ ) . 'new-admin.js');
    }

}
add_action('admin_enqueue_scripts', 'myproject_admin_enqueue');
0
squarecandy