¿Por qué apply_filter(‘the_content’) no genera nada?

6 minutos de lectura

avatar de usuario
HandiworkNYC.com

He probado tantas combinaciones de php para que wordpress genere $post->post_content como texto formateado (a diferencia del formato sin procesar que echo $post->post_content me da Esta combinación parece ser la más prometedora, pero no produce nada. ¿Algunas ideas?

(es esta línea: <?php $content = apply_filters('the_content', $s->post_content); ?>)

<?php query_posts('orderby=menu_order&order=asc&posts_per_page=-1&post_type=page&post_parent=".$post->ID); if(have_posts()) { while(have_posts()) { the_post(); ?>
    <div class="page">
        <?php
            global $wpdb;
            $subs = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent="$post->ID' AND post_type="page" AND post_status="publish"");
            if($subs) {
        ?>
        <div class="navi"></div>
        <a class="naviNext"><img src="https://stackoverflow.com/questions/3602941/<?php bloginfo("template_url'); ?>/images/navi-next.png" alt="" /></a>
        <div class="scrollable">
            <div class="items">
                <?php foreach($subs as $s) { ?>
                <div class="item">
                    <h2><?php echo $s->post_title; ?></h2>
                    <?php $content = apply_filters('the_content', $s->post_content); echo $content; ?>
                </div>
                <?php } ?>
            </div>
        </div>
        <?php } else { the_content(); } ?>
    </div>
    <?php } } wp_reset_query(); ?>

  • No sé por qué no obtiene ningún resultado. El mismo código EXACTO funciona bien en mi instalación de WP.

    – Shamittomar

    10 de septiembre de 2010 a las 12:50


avatar de usuario
datos espurios

Hasta donde yo sé, la función que aplica el ‘formato’ principal al cuerpo del contenido es wpaautop(). Esa función debe estar conectada a ‘the_content’ por wordpress. Sin embargo, la función hace cosas molestas (como estropear el código de inserción) y hay muchos complementos que lo desconectarán de la pila de filtros. Intenta reemplazar tu línea:

<?php $content = apply_filters('the_content', $s->post_content); echo $content; ?>

con

<?php $content = wpautop($s->post_content); echo $content; ?>

Si eso ayuda, entonces probablemente tenga un problema con el wpautop que se desconecta en alguna parte.

  • Al verificar todos los complementos add_filter('the_content", ... code, encontré un complemento antiguo de ‘Publicaciones relacionadas con WordPress’ que usaba un código de sintaxis incorrecto. Al consultar el sitio web del complemento, solo admite hasta 4.x WordPress, ahora el sitio se actualizó a 5.x. Desactivar el complemento resolvió el problema. ¡Lo extraño es que no se encontró ningún error en el registro del servidor!

    – soleado

    7 de abril de 2020 a las 12:07


Yo tuve el mismo problema. Resultó que había una función en mi tema, que también filtró the contentpero tenía un error que provocaba que el filtro devolviera una cadena vacía.

Así que revise su tema y complementos para funciones que filtren the_content. En Sublime Text 2, por ejemplo, puede hacer una “búsqueda en archivos” rápida con ⌘/CTRL + + F para encontrar a los posibles culpables.

hombre86,

Veo que está obteniendo los datos de la publicación a través de $wpdb->get_results(). Lo que pasa es que los datos se devuelven sin procesar, por lo que debe “prepararlos” antes de poder usar funciones de publicación comunes como the_content () (que devolverá el contenido ya formateado, como le gustaría que fuera ).

¿Qué tal probar esto (ver comentarios sobre el código):

<?php query_posts('orderby=menu_order&order=asc&posts_per_page=-1&post_type=page&post_parent=".$post->ID); 

if(have_posts()) { while(have_posts()) { the_post(); ?>
<div class="page">
    <?php
        global $wpdb;
        $subs = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent="$post->ID' AND post_type="page" AND post_status="publish"");
        if($subs) { ?>
    <div class="navi"></div>
    <a class="naviNext"><img src="https://stackoverflow.com/questions/3602941/<?php bloginfo("template_url'); ?>/images/navi-next.png" alt="" /></a>
    <div class="scrollable">
        <div class="items">
            <?php foreach($subs as $post) { // <-- changed $s to $post
            setup_postdata($post) // <--use setup_postdata to prepare post
             ?>
            <div class="item">
                <h2><?php the_title(); // <-- use "the_title() now that the data has been prepared ?></h2>
                <?php the_content(); // <-- use "the_content() now that the data has been prepared ?>
            </div>
            <?php } ?>
        </div>
    </div>
    <?php } else { the_content(); } ?>
</div>
<?php } } wp_reset_query(); ?>

Referencia: http://codex.wordpress.org/Class_Reference/wpdb#Examples_5 (“Obtener toda la información sobre los Borradores del Usuario 5”)

¡Gracias, espero que eso ayude!

Vq.

Necesitas echo los resultados de la apply_filters llamar:

<?php echo apply_filters('the_content', $s->post_content); ?>

O, como lo tienes codificado:

<?php 
    $content = apply_filters('the_content', $s->post_content); 
    echo $content;
?>

Lo siento si esto es demasiado básico, pero podría ayudar si repites el contenido:

<?php
$content = apply_filters('the_content', $s->post_content);
echo $content;
?>

avatar de usuario
Adán Tootle

¿Cómo estás agregando el filtro? Puede usar add_filter que especifica una función que recibirá $contenido. Puede hacer cualquier filtrado que necesite a través de esta función.

http://codex.wordpress.org/Plugin_API#Create_a_Filter_Function

avatar de usuario
kanzaraque

hmm… por alguna razón, puedo obtener contenido para mostrar cuando eliminé la línea superior y la línea inferior.

tal vez el problema es la llamada query_posts… y no la llamada apply_filters().

Puedo cambiar el modo de visualización dependiendo de si uso o no apply_filters() o no. que creo que es lo que buscas.

  • simplemente haciendo post_content; ?> me da contenido sin formato (las etiquetas p y todo el formato se eliminan), por lo que estoy tratando de usar “the_content_ filter para recuperar el texto enriquecido.

    – HandiworkNYC.com

    3 de septiembre de 2010 a las 21:12

  • lo siento, no fui claro. Eliminé la llamada a query_posts()… y eso me resolvió el problema. Pude usar the_content_filter con el resultado deseado después de eso. es por eso que quería ver si puede obtener los mismos resultados que yo al modificar o eliminar la llamada a query_posts().

    – kanzaraque

    3 de septiembre de 2010 a las 21:23

  • Inicialmente pensé que query_posts podría ser el problema. Si eliminarlo soluciona el problema, entonces creo que la explicación más probable es que $post global se ha llenado con ‘otros’ datos, y uno de los filtros enganchados está leyendo contenido de la variable global. WordPress parece hacer esto bien, por lo que es probable que la culpa sea un archivo plugin/functions.php mal escrito. La lectura de la base de datos siempre causa problemas. Use la API de WordPress: es más fácil y se asegurará de que se completen los globales necesarios y se activen los filtros/acciones necesarios.

    – Brendon

    5 de septiembre de 2010 a las 16:32

¿Ha sido útil esta solución?