si la publicación tiene contenido


9

Estoy configurando un sitio de WordPress de una página. Recibo algunas páginas en mi sitio que no tienen contenido. Por ejemplo, obtendré la página de blog vacía, así como la plantilla de blog. Así que pensé que podría enviar un cheque para ver si la página tiene contenido y si sigue adelante y publique esa información. Tengo problemas para que funcione. Estoy usando una consulta personalizada para la página de inicio. Entonces pensé que podí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 recibo un error en ese código y no puedo entender por qué. Me sale este error

Aviso: Propiedad indefinida: WP_Query :: $ post_content en

Respuestas:


14

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

Use $posto en su get_post()lugar:

if( '' !== get_post()->post_content ) {
// do something
}

3

Qué pasa

if ( !empty( get_the_content() ) ){ 
//code 
}

No puede pasar una función empty()como una variable. Primero debe almacenarlo en una variable. Incluso entonces, no funcionará, ya que puede haber algunos espacios vacíos en su contenido.
Jack Johansson

1
¡Esto es trabajo para mí! ¿Estás seguro? Al menos en PHP 7
Juan Solano

2

Esto también funciona y prueba cosas como etiquetas de párrafo vacías o  en el contenido que pueden causar que falle una comprobación normal. Visite http://blog.room34.com/archives/5360 para ver la idea original: simplemente grabe aquí para que pueda encontrarla nuevamente. : O)

Pon esto en tus functions.php:

function empty_content($str) {
    return trim(str_replace(' ','',strip_tags($str))) == '';
}

Y pon esto donde quieras ejecutar el cheque:

if (function_exists('empty_content') && empty_content($post->post_content)) { ... }

Eso devolverá truesi el contenido está vacío, falsesi no.


1

He implementado algunos métodos "has_content ()" varias veces a lo largo de los años y siempre hay suficiente tiempo entre ellos, así que necesito buscar nuevamente un poco para responder esta pregunta.

de todos modos, esta es mi solución, que me gusta encontrar la próxima vez aquí, así que es para referencia.

todas las funciones de "bucle interno" se pueden reemplazar por un objeto de publicación "post_content"

en functions.php y archivos similares:

// write inside the loop
$the_content = apply_filters('the_content', get_the_content());
if ( !empty($the_content) ) {
  echo $the_content;
}
// with post object by id
$post = get_post(12); // specific post
$the_content = apply_filters('the_content', $post->post_content);
if ( !empty($the_content) ) {
  echo $the_content;
}

como función

// call inside the loop
function mytheme_has_content(){
  return !empty(apply_filters('the_content', get_the_content()));
}

plantilla dentro del bucle:

<?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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.