si la entrada tiene contenido

6 nov 2013, 02:50:05
Vistas: 59.7K
Votos: 12

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

0
Todas las respuestas a la pregunta 4
0
24

El contenido es una propiedad del objeto post, no del objeto de consulta.

Usa $post o get_post() en su lugar:

if( '' !== get_post()->post_content ) {
// hacer algo
}
6 nov 2013 03:03:26
3

¿Qué tal esto?

if ( !empty( get_the_content() ) ){ 
//código 
}
10 sept 2017 19:18:33
Comentarios

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 Johansson
10 sept 2017 23:14:57

¡Esto funciona para mí! ¿Estás seguro? Al menos en PHP 7

Juan Solano Juan Solano
11 sept 2017 11:04:20

@Johansson No estoy seguro de dónde sacaste eso o si me estoy perdiendo algo, pero por supuesto que puedes, porque get_the_content() devuelve una cadena que puede estar vacía o no. No confundir con the_content(), que imprime una cadena.

Gerard Reches Gerard Reches
3 abr 2024 11:22:11
5

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 } ?>
11 jul 2019 11:23:11
Comentarios

esta es la segunda vez que consulto esto, dejaré un comentario cada vez que vuelva con fines estadísticos

Thomas Fellinger Thomas Fellinger
10 mar 2020 09:59:59

tercera vez aquí

Thomas Fellinger Thomas Fellinger
19 ago 2020 08:52:43

4ta vez, ahora es 2020

Thomas Fellinger Thomas Fellinger
18 oct 2020 13:28:40

5to en 2021 parece ser una vez al año

Thomas Fellinger Thomas Fellinger
23 mar 2021 17:45:58

6to otra vez en 2021...

Thomas Fellinger Thomas Fellinger
26 nov 2021 11:03:05
0

Esto también funciona, y comprueba cosas como párrafos vacíos o &nbsp; 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('&nbsp;','',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á.

1 dic 2015 18:33:31