admin_print_scripts-$hook_suffix funziona per percorsi annidati a file individuali?
È possibile utilizzare l'hook admin_print_scripts-$hook_suffix
per un hook creato come $hookname = get_plugin_page_hookname("my-quiz/lib/admin/$code_page", '' );
?
.. dove $code_page
è somefilename.php
.
Ho provato ma non sembra funzionare. Penso che probabilmente sia a causa del percorso del file?
AGGIORNAMENTO
Quello che viene registrato dal codice sopra è 'admin_page_my-quiz/lib/admin/question_form' ma questo funziona solo in una pagina se fai:
<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('Modifica', 'my-locale'); ?>
</a>
Devo aggiungere il suffisso .php affinché quel link funzioni, altrimenti ottengo l'errore 'non hai i permessi'.
@t31os la funzione restituisce 'nmsi-quiz/lib/admin/question_form.php' e quindi non corrisponde a 'admin_page_my-quiz/lib/admin/question_form'
questo funziona - add_action( 'admin_print_scripts-'.'my-quiz/lib/admin/question_form.php', array($this,'enqueue_my_js'));
Codice richiesto:
$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);
}

Penso che sia davvero una questione di verificare se quel codice restituisce il nome corretto dell'hook per la pagina specificata.
Ecco una semplice funzione che puoi usare per visualizzare il suffisso dell'hook su ogni pagina di amministrazione, apparirà all'interno di un box rosso di errore (quindi sarà facile da individuare) solo per gli amministratori.
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
}
Carica la pagina con cui hai problemi e confronta il valore che vedi nel box con quello che ottieni dal codice che hai pubblicato.
Aggiunta
Continuando dal mio ultimo commento, puoi effettivamente fare qualcosa del genere...
add_action( 'admin_menu', 'testing_registered_pages', 100 );
function testing_registered_pages() {
global $_registered_pages, $submenu;
$plugin_scripts = array(
'Modulo Domanda' => array( 'page' => 'question_form', 'callback' => 'my_callback_1' ),
'Gestisci Domande' => 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'] );
}
}
// Rimuovi l'add_action per fare riferimento a file effettivi, lascia per usare una funzione di callback
...c'è solo un problema con questo approccio, ed è la possibilità di eludere i requisiti di capacità delle pagine.
Prendi questo URL.
example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions
Possiamo eludere il controllo delle capacità cercando...
example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions.php
Se modifichiamo il codice precedente per usare l'estensione del file, ad esempio...
$plugin_scripts = array(
'Modulo Domanda' => array( 'page' => 'question_form.php', 'callback' => 'my_callback_1' ),
'Gestisci Domande' => array( 'page' => 'manage_questions.php', 'callback' => 'my_callback_2' )
);
..e opzionalmente disabilitiamo le callback, cioè usiamo un file reale...
// add_action( $hookname, $my_pages['callback'] );
..questo ci dà...
example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions.php
..è comunque possibile eludere i requisiti di capacità usando...
example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions
Indipendentemente dal fatto che tu usi un file effettivo o una funzione di callback, in entrambi i casi i requisiti di capacità (come sopra) possono essere elusi (ovviamente questo non sarebbe un comportamento desiderato).
