¿Cómo puedo cargar solo un plugin js en sus páginas de configuración?

2

Tengo un complemento que está en conflicto con algunas funciones predeterminadas de wordpress. En las áreas de publicación y creación / edición de páginas. Solo necesito mis funciones en mis páginas de configuración. Tengo el archivo js cargando en el administrador, no hay problema.

¿Puedo decirle al script que no se cargue a menos que esté viendo las páginas de configuración de mi enchufe?

    
pregunta dcp3450 17.01.2013 - 19:02

3 respuestas

4

Es necesario utilizar un enlace de cola de secuencia de comandos específico de la página del complemento.

Editar

El método de mejor práctica es usar admin_enqueue_scripts-{hook} , en lugar de admin_print_scirpts-{hook} . Pero, debido a que estás apuntando específicamente a la página de administración de tu propio Plugin, cualquiera de los dos está perfectamente bien.

El enlace que se debe evitar es el "global" admin_print_scripts .

Original

La llamada se vería así:

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

Y define el gancho $page así:

$page = add_submenu_page( $args );

Respuesta copiada directamente fuera del Códice :

<?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 */
}
?>
    
respondido por el Chip Bennett 17.01.2013 - 19:45
2

Para hacer que su vida sea más fácil y que la codificación sea más rápida (no es necesario realizar una búsqueda de archivos), hemos escrito " Información del administrador actual "Complemento .

De esta manera, puede ver fácilmente lo que obtiene de los globales de administración o la función get_current_screen() , a la que luego puede acceder utilizando las propiedades que ve en las pestañas de ayuda contextual adicionales.

// 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;

    
respondido por el kaiser 17.01.2013 - 19:52
1

Todavía no entiendo por qué, pero de acuerdo con el Codex , debe solo use admin_enqueue_scripts para poner en cola estilos / scripts en el administrador. Tengo un abrir Pregunta preguntando por qué, pero aún no ha recibido una respuesta satisfactoria. La entrada del Codex podría estar en referencia a la publicación de este dev del núcleo .

Aquí se explica cómo hacerlo de la manera "correcta" (nota: el admin_enqueue_scripts hook solo debe llamarse desde otra función enganchada, por ejemplo, como he hecho en el segundo bloque de código con admin_menu . Si lo intentas para enganchar admin_enqueue_scripts demasiado pronto, obtendrás errores):

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

A continuación se muestra un complemento totalmente funcional para jugar; no hace nada excepto inyectar su archivo javascript en la etiqueta < head > de solo su página de opciones -

<?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
    
respondido por el akTed 17.01.2013 - 20:45

Lea otras preguntas en las etiquetas