si la entrada tiene contenido
Estoy configurando un sitio WordPress de una sola página. Estoy obteniendo algunas páginas listadas en mi sitio que no tienen contenido. Por ejemplo, obtengo la página de blog vacía así como la plantilla del blog. Entonces pensé que podría incluir una verificación para ver si la página tiene contenido y si lo tiene, mostrar esa información. Estoy teniendo problemas para hacerlo funcionar. Estoy usando una consulta personalizada para la página de inicio. Así que pensé que podría hacer esto
if ( $page_query->have_posts() ) : while ( $page_query->have_posts() ) : $page_query->the_post();
if( $page_query->post_content != ''){
get_template_part( 'content', get_post_format() );
}
endwhile; endif;
el problema es que obtengo un error en ese código y no puedo entender por qué. Obtengo este error
Notice: Undefined property: WP_Query::$post_content in
No puedes pasar una función a empty() como variable. Primero debes almacenarla en una variable. Incluso así, no funcionará, ya que podrían haber algunos espacios vacíos en tu contenido.
Johansson
He implementado algunos métodos "has_content()" varias veces a lo largo de los años y siempre hay suficiente tiempo entre cada implementación como para que necesite buscar un poco para responder esta pregunta.
De cualquier forma, esta es mi solución, que me gustaría encontrar aquí la próxima vez - así que es como referencia.
Todas las funciones "dentro del loop" pueden ser reemplazadas por el "post_content" de un objeto post.
En functions.php y archivos similares:
// escribir dentro del loop
$the_content = apply_filters('the_content', get_the_content());
if ( !empty($the_content) ) {
echo $the_content;
}
// con objeto post por ID
$post = get_post(12); // post específico
$the_content = apply_filters('the_content', $post->post_content);
if ( !empty($the_content) ) {
echo $the_content;
}
Como función:
// llamar dentro del loop
function mytheme_has_content(){
return !empty(apply_filters('the_content', get_the_content()));
}
Plantilla dentro del loop:
<?php if ( $customQuery->have_posts() ) {?>
<?php while ( $customQuery->have_posts() ) {
$customQuery->the_post(); ?>
<?php $the_content = apply_filters('the_content', get_the_content()); ?>
<!-- html -->
<?php if ( !empty($the_content) ) { ?>
<div class="content">
<?php echo $the_content; ?>
</div>
<?php } ?>
<?php } ?>
<?php wp_reset_postdata(); ?>
<?php } ?>
esta es la segunda vez que consulto esto, dejaré un comentario cada vez que vuelva con fines estadísticos
Thomas Fellinger
Esto también funciona, y comprueba cosas como párrafos vacíos o en el contenido que podrían hacer fallar una comprobación normal. Consulta http://blog.room34.com/archives/5360 para ver la idea original - solo lo registro aquí para poder encontrarlo de nuevo. :O)
Coloca esto en tu functions.php:
function empty_content($str) {
return trim(str_replace(' ','',strip_tags($str))) == '';
}
Y coloca esto donde quieras ejecutar la comprobación:
if (function_exists('empty_content') && empty_content($post->post_content)) { ... }
Esto devolverá true si el contenido está vacío, false si no lo está.