web-dev-qa-db-fra.com

Admin premier crochet qui se ferme du HTML?

Je pense que load-(page) est le premier point d'ancrage de l'écran d'administration qui traite de la sortie HTML, mais je n'en suis pas tout à fait sûr. En gros, je recherche l'équivalent de template_rediect ou get_header, qui ne fonctionne pas du côté de l'administrateur (corrigez-moi si je me trompe).

Je voudrais accrocher dans chaque page d'administration. J'imagine que je vais utiliser $page_now ou get_current_screen(), mais je ne sais pas comment les appliquer sur toutes les pages:

$page = get_current_screen()->parent_file;
add_action( 'load-$page.php', 'add_action_all_load_hook', 1, 0 );

Sur le front-end je ferais ceci:

function link_rel_buffer_callback($buffer) {
    $buffer = preg_replace('ORIGINAL', 'NEW', $buffer);
    return $buffer;
}

function link_rel_buffer_start() {
    ob_start("link_rel_buffer_callback");
}
function link_rel_buffer_end() {
    ob_flush();
}
add_action('template_redirect', 'link_rel_buffer_start', -1);
add_action('get_header', 'link_rel_buffer_start');
add_action('wp_footer', 'link_rel_buffer_end', 999);

Je pense que l'équivalent serait

add_action('load-$page', 'link_rel_buffer_end', 1, 0);
add_action('in_admin_footer', 'link_rel_buffer_end', 999);

mais je ne peux pas comprendre comment faire load-(page) sur chaque charge.

// UPDATE BASE SUR L’EXEMPLE DE @BIRGIRE

add_action( 'admin_init', 'wpse_admin_init' );
function wpse_admin_init( $buffer )
{
    if( ! defined( 'DOING_AJAX') || ! DOING_AJAX )
        ob_start( 'wpse_buffering' );
}

function wpse_buffering( $buffer )
{   
    $buffer = preg_replace('FIND', 'REPLACE', $buffer);
    return $buffer;
}


function wpse_buffering_shutdown() {
        ob_flush();
    }
add_action('in_admin_footer', 'wpse_buffering_shutdown', 9999);
1
Bryan Willis

Vous pouvez essayer celui-ci:

/**
 * Fires as an admin screen or script is being initialized.
 *
 * Note, this does not just run on user-facing admin screens.
 * It runs on admin-ajax.php and admin-post.php as well.
 *  
 * This is roughly analgous to the more general 'init' hook, which fires earlier.
 *
 * @since 2.5.0
 */
do_action( 'admin_init' );

si vous avez besoin d'un hook activé sur chaque page d'administration.

Par exemple:

add_action( 'admin_init', 'wpse_admin_init' );

function wpse_admin_init( $buffer )
{
    if( ! defined( 'DOING_AJAX') || ! DOING_AJAX )
        ob_start( 'wpse_buffering' );
}

function wpse_buffering( $buffer )
{       
    return $buffer;
}

ps: Si vous devez accrocher la pièce après </html>, vous pouvez utiliser la fonction PHP register_shutdown_function() pour exécuter votre propre rappel le script PHP a fini de s'exécuter. Mais notez que les tampons de sortie ont déjà été envoyés au client, conformément à ce commentaire sur le PHP docs .

1
birgire