Los ganchos / filtros de WordPress se insertan antes del contenido o después del título

29

tratando de insertar contenido antes del contenido de la publicación en mis funciones.php: sé cómo usar los ganchos wp normales, pero no estoy seguro de cómo insertarlo en otras áreas.

Intenté esto, pero mata el contenido en cualquier otro tipo de publicación:

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 hago esto condicional?

Jason
fuente

Respuestas:

39

Simplemente use el the_contentfiltro, por ejemplo:

<?php
function theme_slug_filter_the_content( $content ) {
    $custom_content = 'YOUR CONTENT GOES HERE';
    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'theme_slug_filter_the_content' );
?>

Básicamente, agrega el contenido de la publicación después de su contenido personalizado y luego devuelve el resultado.

Editar

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

<?php
function theme_slug_filter_the_title( $title ) {
    $custom_title = 'YOUR CONTENT GOES HERE';
    $title .= $custom_title;
    return $title;
}
add_filter( 'the_title', 'theme_slug_filter_the_title' );
?>

Tenga en cuenta que, en este caso, agrega su contenido personalizado después del Título. (No importa cuál; ​​acabo de ir con lo que especificó en su pregunta).

Editar 2

La razón por la que su código de ejemplo no funciona es porque solo regresa $contentcuando se cumple su condicional . Debe regresar $content, sin modificaciones, como un elsea su condicional. p.ej:

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 las publicaciones que no son del tipo de propiedad 'propiedad', $contentse devuelve, sin modificaciones.

Chip Bennett
fuente
También es posible agregar contenido después del título; el filtro the_title es el gancho correcto.
bueltge
Pregunta de @ChipBennett: cómo hacer esto con lógica solo para un tipo de publicación personalizado. Intenté incluirlo if ( is_single() && 'property' == get_post_type() ) {}pero eso no funcionó para mí
Jason
@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
1
Esto se debe a que no regresa $contentpor tipos de publicaciones que no sean su tipo de publicación personalizado. Ver respuesta actualizada.
Chip Bennett el
Solo una nota: no necesita el bloque else {}, solo el retorno de retorno. Si se cumple la condición, el retorno en el if () lo saca de la función, si lo hace más allá del if (), el retorno de retorno alcanzará.
phatskat
0
function property_slideshow( $content ) {
    if ( is_singular( 'property' ) ) {
        $custom_content = do_shortcode( '[portfolio_slideshow]' );
        $custom_content .= $content;
        }
        return $custom_content;
}
add_filter( 'the_content', 'property_slideshow' );

La is_singularetiqueta condicional verifica si se está mostrando una publicación singular y le permite especificar el parámetro $ post_types, que en este caso es propiedad.

Además, es posible que desee mirar do_shortcode

Brad Dalton
fuente
Tarde al juego aquí, pero está devolviendo una variable vacía en la instancia en que is_singular ('propiedad') devuelve falso. Si invierte su lógica allí, y simplemente devuelve $ content en ese caso, terminará con un código más limpio y más legible.
Travis Weston
También podría agregar más o usar un operador ternario. Es un ejemplo rápido que no se ha probado completamente y que se puede extender.
Brad Dalton el