2011-04-22 15 views
6
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
.... 
<?php endwhile; endif; ?> 

podría entender el código en el pozo anterior.help simplify if while list loop en wordpress

1, ¿podría eliminar la condición if y while? usando <?php the_post();?> directamente.

2, creo que el if (have_posts()) es el mismo que el while (have_posts()). ¿Es redundante?

Respuesta

3

# 1: Llamar a the_post sin un bucle solo le permitirá mostrar una sola publicación. Esto podría ser deseable en las páginas de un solo poste, por ejemplo, donde a menudo se omite el bucle while:

<?php 
// single.php 
if (have_posts()): 
    the_post(); 
?> 
<p><?php the_content(); ?></p> 
<? else: ?> 
<p>No post found.</p> 
<? endif ?> 

# 2: Tienes razón - el fragmento informados es redundante en su combinación de if y while.

En la mayoría de los temas, sin embargo, esto es el uso:

<?php 
if (have_posts()): 
    while (have_posts()): the_post(); 
?> 
<div class="post"><?php the_content(); ?></div> 
<?php endwhile; else: ?> 
<p>No posts found.</p> 
<?php endif; ?> 

El uso de la instrucción if en este caso le permite mostrar algo si no hay mensajes en absoluto. Si tuviéramos que usar el bucle while en ese código, las páginas sin publicaciones no producirían nada.

+0

oh, maldita sea. Encontré este código Usando en el tema predeterminado single.php? ¡es redundante! porque en el single.php, es solo una publicación, es inútil usar el bucle while. ¿Estoy en lo cierto? – zhuanzhou

+1

Sí, es redundante, pero no es demasiado de lo que preocuparse. [El tema predeterminado de WordPress lo usa también] (http://phpxref.com/xref/wordpress/wp-content/themes/twentyten/single.php.source.html#l15). –

1

while(have_postS()) evaluará automáticamente have_postS() como por if(have_postS())

pero continuará tanto tiempo como es true (ya que es un bucle), si tiene que bucle y algún mecanismo que termina en bucle, a continuación, utilizar while

else

por una vez if hará mejor.

1

No sé WordPress, pero por lo que parece, has_posts() devuelve un valor truey o falso. El bucle while sólo se ejecuta si un valor Truthy se pasa como la condición, así que sí, se puede reducir a un whoopin 3 líneas:

<?php while (have_posts()) : the_post(); ?> 
.... 
<?php endwhile;?> 

Editar: ésta como un ejemplo más de por qué código de copiar y pegar es malo ...

+0

¿por qué tu código usa endif ;? no hay condición si en tu código? gracias por tu respuesta. – zhuanzhou

+0

* facepalm * Editado – Zirak