Hook para la carga de entradas y páginas

16 oct 2012, 09:24:04
Vistas: 119K
Votos: 31

Necesito ejecutar una función cuando se carga una entrada o página específica. ¿Existe algún hook que me permita verificar si se está mostrando una entrada durante la carga de la página?

2
Comentarios

¿lado público o de administración?

kaiser kaiser
16 oct 2012 13:48:32

Para el front end. Básicamente quiero que se active solo cuando se muestre un tipo de entrada personalizado específico.

Poulomi Nag Poulomi Nag
16 oct 2012 13:52:08
Todas las respuestas a la pregunta 3
3
35

Puedes usar el hook wp y verificar el objeto global $wp_query o cualquier condicional.

add_action( 'wp', 'wpse69369_special_thingy' );
function wpse69369_special_thingy()
{
    if (
        'special_cpt' === get_post_type()
        AND is_singular()
    )
        return print "¡Hola Mundo!";

    return printf(
        '<p>¡Nada que ver aquí! ¡Revisa el objeto!<br /></p><pre>%s</pre>',
        var_export( $GLOBALS['wp_query'], true )
    );
}

Ver: wp en codex.wordpress.org y wp en developer.wordpress.org

16 oct 2012 13:55:32
Comentarios

¿Podrías decirme cuándo se ejecuta el hook 'wp'?

Poulomi Nag Poulomi Nag
16 oct 2012 14:07:32

A) Se ejecuta antes de after_setup_theme y setup_theme, por lo que solo es accesible para plugins B) dentro de WP :: main(), que se llama desde wp-settings.php.

kaiser kaiser
16 oct 2012 14:19:43

@kaiser ¿No se dispara el hook wp después del hook after_setup_theme y justo antes de template_redirect, lo que hace que wp sea accesible tanto para temas como para plugins? (¿solo para aclarar?)

Adam Adam
17 oct 2012 09:18:06
4
25

Utiliza template_redirect que es el hook de acción que se ejecuta antes de renderizar la plantilla;

add_action('template_redirect', 'hooker');
function hooker(){
    //Se carga justo antes de seleccionar y renderizar la plantilla en pantalla
}
16 oct 2012 10:14:55
Comentarios

@PoulomiNag No hay problema, me alegro de que hayas encontrado tu respuesta arriba. Aunque creo que una pequeña nota es que wp se ejecuta después del hook after_theme_setup, por lo que no solo es accesible por plugins, haciéndolo seguro de usar en temas.

Adam Adam
17 oct 2012 09:21:38

Acabo de comprobar y sí; wp se ejecuta después de after_theme_setup. Pero lo necesito para mi plugin. Así que tanto wp como template_redirect funcionan bien para mí. ¡Ojalá pudiera aceptar dos respuestas aquí! :)

Poulomi Nag Poulomi Nag
17 oct 2012 10:33:07

Está bien, no es necesario aceptar ambas, solo quería aclarar el orden en que se ejecutan. Asegurándome de que no me estoy volviendo loco, ya sabes. Buena suerte con tu plugin...

Adam Adam
17 oct 2012 10:42:41

+1 por el juego de palabras en el nombre de la función

MJHd MJHd
28 feb 2020 23:56:56
3

He utilizado con frecuencia lo siguiente para cargar meta boxes personalizados en páginas (en lugar de en entradas personalizadas).

    add_action('admin_init','how_we_do_it_meta');

    function how_we_do_it_meta() {

        if ( $_SERVER['SCRIPT_NAME'] == '/wp-admin/post.php' ) {

            $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
            $template_file = get_post_meta($post_id,'_wp_page_template',TRUE);

            if ($template_file == 'page-how-we-do-it.php') {

                add_meta_box('how_we_do_it_who-meta', 'Con quién trabajamos...', 'how_we_do_it_who', 'page', 'normal', 'high');

                add_action('save_post', 'save_how_we_do_it_meta');

            }
        }
    }
16 oct 2012 10:02:09
Comentarios

Gracias Darronz. Pero necesito algún hook que funcione en el front end durante la carga de una página. ¿Alguna idea?

Poulomi Nag Poulomi Nag
16 oct 2012 10:07:54

Si cambiaste lo anterior a add_action('init', // etc) entonces funcionará durante la carga de la página en lugar de solo en la sección de administración.

darronz darronz
16 oct 2012 10:19:54

@darronz Y luego necesitas verificar ! is_admin() dentro, porque el hook init se ejecuta en ambos lados.

kaiser kaiser
16 oct 2012 14:20:17