wake-up-neo.com

Wie lade ich nur ein Plugin js auf seinen Einstellungsseiten?

Ich habe ein Plugin, das mit einigen Standard-WordPress-Funktionen in Konflikt steht. In den Bereichen zum Erstellen/Bearbeiten von Posts und Seiten. Ich benötige meine Funktionen nur auf meinen Einstellungsseiten. Ich habe die js datei im admin geladen, kein problem.

Kann ich dem Skript mitteilen, dass es nicht geladen werden soll, wenn ich nicht die Einstellungsseiten für mein Plug-In betrachte?

2
dcp3450

Sie müssen einen Plugin-Seiten-spezifischen Skript-Enqueue-Hook verwenden.

Bearbeiten

Best-Practice-Methode ist die Verwendung von admin_enqueue_scripts-{hook} anstelle von admin_print_scirpts-{hook}. Da Sie jedoch speziell auf die Admin-Seite Ihres eigenen Plugins abzielen, ist beides in Ordnung.

Der zu vermeidende Haken ist der "globale" admin_print_scripts.

Original

Der Aufruf würde folgendermaßen aussehen:

    /* Using registered $page handle to hook script load */
    add_action('admin_print_scripts-' . $page, 'my_plugin_admin_scripts');

Und du definierst den $page hook so:

$page = add_submenu_page( $args );

Antwort kopiert direkt aus dem Codex :

<?php
add_action( 'admin_init', 'my_plugin_admin_init' );
add_action( 'admin_menu', 'my_plugin_admin_menu' );

function my_plugin_admin_init() {
    /* Register our script. */
    wp_register_script( 'my-plugin-script', plugins_url('/script.js', __FILE__) );
}

function my_plugin_admin_menu() {
    /* Register our plugin page */
    $page = add_submenu_page( 'edit.php', // The parent page of this menu
                              __( 'My Plugin', 'myPlugin' ), // The Menu Title
                              __( 'My Plugin', 'myPlugin' ), // The Page title
              'manage_options', // The capability required for access to this item
              'my_plugin-options', // the slug to use for the page in the URL
                              'my_plugin_manage_menu' // The function to call to render the page
                           );

    /* Using registered $page handle to hook script load */
    add_action('admin_print_scripts-' . $page, 'my_plugin_admin_scripts');
}

function my_plugin_admin_scripts() {
    /*
     * It will be called only on your plugin admin page, enqueue our script here
     */
    wp_enqueue_script( 'my-plugin-script' );
}

function my_plugin_manage_menu() {
    /* Output our admin page */
}
?>
4
Chip Bennett

Um Ihnen das Leben zu erleichtern und das Codieren zu beschleunigen (keine Kerndateisuche erforderlich), haben wir das Plugin"Current Admin Info"geschrieben.

Auf diese Weise können Sie auf einfache Weise sehen, was Sie von den Admin-Globals oder der Funktion get_current_screen() zurückerhalten, auf die Sie dann über die Eigenschaften zugreifen können, die Sie in den zusätzlichen Registerkarten der kontextbezogenen Hilfe sehen.

// See dump
var_dump( get_current_screen()->property );

# @example
// Get the post type
$post_type = get_current_screen()->post_type;
// Get the current parent_file (main menu entry that meets for every submenu)
$parent = get_current_screen()->parent_file;

enter image description here

enter image description here

2
kaiser

Ich verstehe noch nicht warum, aber laut Codex solltest du nur admin_enqueue_scripts verwenden, um Stile/Skripte im Admin in die Warteschlange zu stellen. Ich habe eine offene Frage warum, aber noch keine zufriedenstellende Antwort erhalten. Der Codex-Eintrag könnte sich auf den Post dieses Core-Entwicklers beziehen.

So geht's "richtig" (Hinweis: Der Hook admin_enqueue_scripts sollte nur von einer anderen Hook-Funktion aus aufgerufen werden, z. B. wie ich es im zweiten Codeblock mit admin_menu getan habe. Wenn Sie versuchen, admin_enqueue_scripts zu früh zu haken, tun Sie das bekomme Fehler):

add_action('admin_enqueue_scripts', 'YOUR_ENQUEUEING_FUNCTION');
function YOUR_ENQUEUEING_FUNCTION($hook_suffix) {
    global $my_menu_hook_akt;

    // exit function if not on my own options page!
    // $my_menu_hook_akt is generated when creating the options page, e.g.,
    // $my_menu_hook_akt = add_menu_page(...), add_submenu_page(...), etc
    if ($hook_suffix != $my_menu_hook_akt) return;

    $handle = 'my_js';
    wp_register_script($handle, 'http://example.com/path/to/my-javascript.js');
    wp_enqueue_script($handle);
} // function YOUR_ENQUEUEING_FUNCTION

Unten finden Sie ein voll funktionsfähiges Plugin, mit dem Sie herumspielen können. Es tut nichts anderes, als Ihre Javascript-Datei in den <head> von only your options page - einzufügen.

<?php
// Plugin Name:0-Menu Test
global $my_menu_hook_akt;

add_action('admin_menu', 'create_menu_akt');
function create_menu_akt() {
    global $my_menu_hook_akt;
    $my_menu_hook_akt = add_menu_page(
        'My Cool Plugin\'s Title',
        'My Cool Plugin\'s Name',
        'manage_options',
        'my-cool-plugins-slug',
        'draw_options_page_akt'
    );
    add_action('admin_enqueue_scripts', 'enqueue_only_on_my_page_akt');
} // function create_menu_akt


function enqueue_only_on_my_page_akt($hook_suffix) {
    global $my_menu_hook_akt;

    // exit function if not on my own options page!
    // $my_menu_hook_akt is generated when creating the options page, e.g.,
    // $my_menu_hook_akt = add_menu_page(...), add_submenu_page(...), etc
    if ($hook_suffix != $my_menu_hook_akt) return;

    $handle = 'my_js';
    wp_register_script($handle, 'http://example.com/path/to/my-javascript.js');
    wp_enqueue_script($handle);
} // function enqueue_only_on_my_page_akt


function draw_options_page_akt() {
    // draw your options page
} // function draw_options_page_akt
1
akTed