es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

WordPress: Cargar otra página/entrada dentro del filtro “the_content” crea un Error Interno del Servidor 500.

Me gustaría modificar el contenido de una publicación con el filtro “the_content”.
Dentro de este filtro, me gustaría cargar el contenido de otra publicación.

Este es mi código:

add_filter( 'the_content', 'my_content_filter' );

function my_content_filter( $content ){

    if ( !is_singular( 'my-custom-post-type' ) ){
        return $content;
    }

    ob_start();

    echo '<p>SOME HTML BEFORE THE CONTENT</p>';

    echo $content;

    echo '<p>SOME HTML AFTER THE CONTENT</p>';

    $module = get_post( 12345 ); // cargar publicación específica
    echo apply_filters( 'the_content', $module->post_content );

    echo '<p>SOME MORE HTML</p>';

    $html = ob_get_contents();
    ob_end_clean();

    return $html;

}

Desafortunadamente, esto crea un error interno del servidor 500.
Supongo que se debe a que creé un bucle infinito. ¿Tienes alguna idea de cómo obtener el contenido formateado de otra publicación dentro del filtro “the_content”?

Gracias 🙂
Jan

EDICIÓN

Un poco más de detalles: he creado un tipo de publicación personalizado llamado “sidebars” en el que edito el contenido con un constructor de páginas. Me gustaría añadir estas barras laterales con PHP.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para evitar el bucle infinito, debes eliminar el filtro temporalmente antes de obtener el contenido de la otra publicación y luego agregarlo nuevamente. Aquí tienes una versión actualizada de tu código:

    add_filter( 'the_content', 'my_content_filter' );
    
    function my_content_filter( $content ){
        if ( !is_singular( 'mi-tipo-de-publicacion-personalizado' ) ){
            return $content;
        }
    
        ob_start();
    
        echo '<p>ALGUN HTML ANTES DEL CONTENIDO</p>';
    
        echo $content;
    
        echo '<p>ALGUN HTML DESPUÉS DEL CONTENIDO</p>';
    
        // eliminar el filtro temporalmente
        remove_filter( 'the_content', 'my_content_filter' );
    
        $module = get_post( 12345 ); // cargar publicación específica
        $module_content = apply_filters( 'the_content', $module->post_content );
        echo $module_content;
    
        // agregar el filtro nuevamente
        add_filter( 'the_content', 'my_content_filter' );
    
        echo '<p>MÁS HTML</p>';
    
        $html = ob_get_contents();
        ob_end_clean();
    
        return $html;
    }
    

    Ten en cuenta que las funciones remove_filter() y add_filter() se utilizan para deshabilitar y habilitar temporalmente el filtro de contenido, de modo que no interfiera con el contenido de la otra publicación que estás cargando. Además, asegúrate de reemplazar mi-tipo-de-publicacion-personalizado con el nombre real de tu tipo de publicación personalizado, y 12345 con el ID de la publicación que deseas cargar.

    ¡Espero que esto ayude!

Comments are closed.