Ganchos/filtros de WordPress para insertar contenido antes del contenido o después del título
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?
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.

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

@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í

@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.

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

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.

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é.

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

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.
/**
* 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' );

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

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.
