¿Funciona admin_print_scripts-$hook_suffix para rutas anidadas a archivos individuales?
¿Se puede usar el hook admin_print_scripts-$hook_suffix
para un hook creado como $hookname = get_plugin_page_hookname("my-quiz/lib/admin/$code_page", '' );
?
.. donde $code_page
es somefilename.php
.
Lo he intentado y no parece funcionar. Creo que probablemente sea debido a la ruta del archivo.
ACTUALIZACIÓN
Lo que registra el código anterior es 'admin_page_my-quiz/lib/admin/question_form' pero esto solo funciona en una página si haces:
<a href="<?php echo admin_url('admin.php?page=my-quiz/lib/admin/question_form.php&question=edit&question='.$question->ID); ?>" class='edit'>
<?php _e('Editar', 'my-locale'); ?>
</a>
Debo agregar el sufijo .php para que ese enlace funcione o obtengo el error 'no tienes permiso'.
La función de @t31os devuelve 'nmsi-quiz/lib/admin/question_form.php' y esto no coincide con 'admin_page_my-quiz/lib/admin/question_form'
Esto funciona - add_action( 'admin_print_scripts-'.'my-quiz/lib/admin/question_form.php', array($this,'enqueue_my_js'));
Código solicitado:
$plugin_scripts = array('question_form.php', 'manage_questions.php');
foreach($plugin_scripts as $code_page) {
$hookname = get_plugin_page_hookname("my-quiz/lib/admin/$code_page", '' );
$_registered_pages[$hookname] = true;
//fb($hookname);
}

Creo que realmente es una cuestión de si ese código está proporcionando el nombre correcto del hook para la página dada.
Aquí hay una función simple que puedes usar para mostrar el sufijo del hook en cada página de administración, aparecerá dentro de un cuadro de error rojo (para que sea fácil de detectar) solo para administradores.
add_action( 'admin_notices', 'print_admin_pagehook' );
function print_admin_pagehook() {
global $hook_suffix;
if( !current_user_can( 'manage_options') )
return;
?>
<div class="error"><p><?php echo $hook_suffix; ?></p></div>
<?php
}
Carga la página con la que tienes problemas y compara el valor que ves en el cuadro con lo que obtienes del código que publicaste.
Adición
Siguiendo con mi último comentario, en realidad puedes hacer algo como esto...
add_action( 'admin_menu', 'testing_registered_pages', 100 );
function testing_registered_pages() {
global $_registered_pages, $submenu;
$plugin_scripts = array(
'Formulario de Preguntas' => array( 'page' => 'question_form', 'callback' => 'my_callback_1' ),
'Gestionar Preguntas' => array( 'page' => 'manage_questions', 'callback' => 'my_callback_2' )
);
foreach( $plugin_scripts as $title => $my_pages ) {
$hookname = get_plugin_page_hookname("my-quiz/lib/admin/$my_pages[page]", 'my-quiz' );
$_registered_pages[$hookname] = true;
$submenu['my-quiz'][] = array( $title, 'manage_options', "my-quiz/lib/admin/$my_pages[page]", $title );
add_action( $hookname, $my_pages['callback'] );
}
}
// Elimina el add_action para hacer referencia a archivos reales, déjalo en su lugar para usar una función de callback
...hay un problema con este enfoque, y es la capacidad de eludir los requisitos de capacidad de las páginas.
Tomemos esta URL.
example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions
Podemos eludir la verificación de capacidad consultando...
example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions.php
Si cambiamos el código anterior para usar la extensión de archivo en su lugar, por ejemplo...
$plugin_scripts = array(
'Formulario de Preguntas' => array( 'page' => 'question_form.php', 'callback' => 'my_callback_1' ),
'Gestionar Preguntas' => array( 'page' => 'manage_questions.php', 'callback' => 'my_callback_2' )
);
..y opcionalmente deshabilitar los callbacks, es decir, usar un archivo real...
// add_action( $hookname, $my_pages['callback'] );
..esto nos da...
example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions.php
..aún es posible eludir los requisitos de capacidad usando...
example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions
Independientemente de si usas un archivo real o una función de callback, en cualquier caso los requisitos de capacidad (como se mencionó anteriormente) pueden ser eludidos (obviamente esto no sería un comportamiento deseado).
