Ganchos/filtros de WordPress para insertar contenido antes del contenido o después del título

24 ene 2012, 05:49:27
Vistas: 93.5K
Votos: 35

Estoy intentando insertar contenido antes del contenido del post en mi functions.php - Sé cómo usar los ganchos normales de WP, pero no estoy seguro de cómo insertar en otras áreas.

Probé esto, pero elimina el contenido en cualquier otro tipo de post:

function property_slideshow( $content ) {
 if ( is_single() && 'property' == get_post_type() ) {
    $custom_content = '[portfolio_slideshow]';
    $custom_content .= $content;
    return $custom_content;
    } 
}
add_filter( 'the_content', 'property_slideshow' );

¿Cómo puedo hacer esto condicional?

1
Comentarios

En este caso: solo asegúrate de que tu función devuelva $content de todos modos (cuando no esté modificado).

Bigue Nique Bigue Nique
30 abr 2020 09:29:51
Todas las respuestas a la pregunta 3
8
49

Simplemente usa el filtro the_content, por ejemplo:

<?php
function theme_slug_filter_the_content( $content ) {
    $custom_content = 'TU CONTENIDO VA AQUÍ';
    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'theme_slug_filter_the_content' );
?>

Básicamente, añades el contenido de la publicación después de tu contenido personalizado y luego devuelves el resultado.

Edición

Como Franky @bueltge señala en su comentario, el proceso es el mismo para el título de la publicación; simplemente añade un filtro al hook the_title:

<?php
function theme_slug_filter_the_title( $title ) {
    $custom_title = 'TU CONTENIDO VA AQUÍ';
    $title .= $custom_title;
    return $title;
}
add_filter( 'the_title', 'theme_slug_filter_the_title' );
?>

Nota que, en este caso, añades tu contenido personalizado después del Título. (No importa cuál; solo seguí lo que especificaste en tu pregunta.)

Edición 2

La razón por la que tu código de ejemplo no funciona es porque solo devuelves $content cuando se cumple tu condición. Necesitas devolver $content, sin modificar, como un else para tu condición. Por ejemplo:

function property_slideshow( $content ) {
    if ( is_single() && 'property' == get_post_type() ) {
        $custom_content = '[portfolio_slideshow]';
        $custom_content .= $content;
        return $custom_content;
    } else {
        return $content;
    }
}
add_filter( 'the_content', 'property_slideshow' );

De esta manera, para publicaciones que no son del tipo 'property', se devuelve $content sin modificaciones.

24 ene 2012 05:59:13
Comentarios

también es posible agregar contenido después del título; el filtro the_title es el hook correcto.

bueltge bueltge
24 ene 2012 09:51:17

@ChipBennett pregunta - cómo hacer esto solo para un tipo de publicación personalizada - intenté envolverlo en if ( is_single() && 'property' == get_post_type() ) {} pero eso no funcionó para mí

Jason Jason
25 ene 2012 02:02:05

@ChipBennett - lo hice funcionar en mi tipo de publicación personalizada, pero el contenido desaparece de cualquier otro tipo de publicación. Ver edición arriba.

Jason Jason
25 ene 2012 02:10:19

Eso es porque no estás devolviendo $content para tipos de post que no son tu tipo de post personalizado. Mira la respuesta actualizada.

Chip Bennett Chip Bennett
25 ene 2012 02:55:41

Solo una nota - no necesitas el bloque else { } - solo el retorno de respaldo. Si se cumple la condición, el return dentro del if() te saca de la función, si pasas el if() entonces se ejecutará el retorno de respaldo.

phatskat phatskat
6 dic 2012 17:02:58

Cierto, el return $content; podría sacarse del condicional if/else. Principalmente lo puse donde está como ayuda para entender la lógica de lo que se devuelve, cómo y por qué.

Chip Bennett Chip Bennett
6 dic 2012 17:08:53

puedes poner el tercer argumento para prioridad en la función add_filter.

Andrew Welch Andrew Welch
10 jun 2016 00:11:02

Gracias por el Hook Edit 2. Después de un poco de trabajo, pude mostrar algún shortcode después del contenido. ¡Post viejo pero funciona actualmente en WP 5.4.!

Rodrigo Zuluaga Rodrigo Zuluaga
10 jul 2020 02:54:54
Mostrar los 3 comentarios restantes
0

Se introdujo un nuevo hook en la versión 5.2 que se activa después de la etiqueta de apertura <body>. Ya no es necesario modificar el contenido de las publicaciones.

wp_open_body

/**
 * Agrega fragmentos de código directamente después de la etiqueta de apertura <body>.
 */
function add_to_top_of_body() {
    echo '<!-- Google Tag Manager (noscript) --><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-YOURMOM" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><!-- End Google Tag Manager (noscript) -->';
}
add_action( 'wp_body_open', 'add_to_top_of_body' );
31 mar 2022 17:22:11
2
function property_slideshow( $content ) {
    // Verifica si es un post único del tipo 'property'
    if ( is_singular( 'property' ) ) {
        // Ejecuta el shortcode [portfolio_slideshow] y lo almacena en $custom_content
        $custom_content = do_shortcode( '[portfolio_slideshow]' );
        // Concatena el contenido original después del slideshow
        $custom_content .= $content;
        }
        return $custom_content;
}
// Añade el filtro al contenido para mostrar el slideshow
add_filter( 'the_content', 'property_slideshow' );

La etiqueta condicional is_singular verifica si se está mostrando un post singular y te permite especificar el parámetro $post_types que en este caso es 'property'.

También puedes revisar la función do_shortcode

2 nov 2014 21:29:26
Comentarios

Llego tarde a la discusión, pero estás devolviendo una variable vacía en el caso de que is_singular( 'property' ) devuelva falso. Si inviertes tu lógica ahí y simplemente devuelves $content en ese caso, terminarás con un código más limpio y legible.

Travis Weston Travis Weston
13 sept 2018 16:50:54

También se podría añadir un else o usar un operador ternario. Es un ejemplo rápido no completamente probado que puede extenderse.

Brad Dalton Brad Dalton
13 sept 2018 20:09:01