Clasificar post con campo personalizado en the_loop

  • Autor Autor keybored
  • Fecha de inicio Fecha de inicio
keybored

keybored

Eta
Programador
Verificación en dos pasos activada
Buenas, tengo una pequeña duda que no he logrado solventar.

He buscado algo similar pero no he encontrado lo que quiero y es por eso por lo que recurro a vosotros.

La cuestion es que tengo un campo personalizado tipo texto con 3 valores posibles:

  • valor1
  • valor2
  • valor3

El caso es que quiero poder clasificar en el the_loop esos 3 valores mediante un template page para asi tener un criterio de clasificacion mas.

Si no se entiende decidme algo.

Un saludo y muchas gracias.
 
Creo que te entiendo, pero estoy en el cel... Mañana te dejo algo.
 
ok aquí va, según entiendo lo que quieres es clasificar los posts en 3 columnas, una para cada valor de custom fields, esto sería así:

PHP:
<div class="post_1">
  <?php
  $args = array(
    'numberposts' => 5, // Mostrar 5 posts
    'meta_key' => 'campo_1', // Campo personalizado 1
    'meta_value'  => 'valor_1' // Valor del campo 1
  );  
  $posts = get_posts($args);
  foreach ( $posts as $post ) : setup_postdata($post); // Comienza loop
  ?>
    <h1><?php the_title(); ?></h1>
    <?php the_content(); ?>
  <?php endforeach; // Termina loop ?>
</div>

<div class="post_2">
  <?php
  $args = array(
    'numberposts' => 5, // Mostrar 5 posts
    'meta_key' => 'campo_2', // Campo personalizado 2
    'meta_value'  => 'valor_2' // Valor del campo 2
  );  
  $posts = get_posts($args);
  foreach ( $posts as $post ) : setup_postdata($post); // Comienza loop
  ?>
    <h1><?php the_title(); ?></h1>
    <?php the_content(); ?>
  <?php endforeach; // Termina loop ?>
</div>

<div class="post_3">
  <?php
  $args = array(
    'numberposts' => 5, // Mostrar 5 posts
    'meta_key' => 'campo_3', // Campo personalizado 3
    'meta_value'  => 'valor_3' // Valor del campo 3
  );  
  $posts = get_posts($args);
  foreach ( $posts as $post ) : setup_postdata($post); // Comienza loop
  ?>
    <h1><?php the_title(); ?></h1>
    <?php the_content(); ?>
  <?php endforeach; // Termina loop ?>
</div>

No lo he probado, pero deberia funcionar.

Saludos...
 
ok aquí va, según entiendo lo que quieres es clasificar los posts en 3 columnas, una para cada valor de custom fields, esto sería así:

PHP:
<div class="post_1">
  <?php
  $args = array(
    'numberposts' => 5, // Mostrar 5 posts
    'meta_key' => 'campo_1', // Campo personalizado 1
    'meta_value'  => 'valor_1' // Valor del campo 1
  );  
  $posts = get_posts($args);
  foreach ( $posts as $post ) : setup_postdata($post); // Comienza loop
  ?>
    <h1><?php the_title(); ?></h1>
    <?php the_content(); ?>
  <?php endforeach; // Termina loop ?>
</div>

<div class="post_2">
  <?php
  $args = array(
    'numberposts' => 5, // Mostrar 5 posts
    'meta_key' => 'campo_2', // Campo personalizado 2
    'meta_value'  => 'valor_2' // Valor del campo 2
  );  
  $posts = get_posts($args);
  foreach ( $posts as $post ) : setup_postdata($post); // Comienza loop
  ?>
    <h1><?php the_title(); ?></h1>
    <?php the_content(); ?>
  <?php endforeach; // Termina loop ?>
</div>

<div class="post_3">
  <?php
  $args = array(
    'numberposts' => 5, // Mostrar 5 posts
    'meta_key' => 'campo_3', // Campo personalizado 3
    'meta_value'  => 'valor_3' // Valor del campo 3
  );  
  $posts = get_posts($args);
  foreach ( $posts as $post ) : setup_postdata($post); // Comienza loop
  ?>
    <h1><?php the_title(); ?></h1>
    <?php the_content(); ?>
  <?php endforeach; // Termina loop ?>
</div>

No lo he probado, pero deberia funcionar.

Saludos...

No es eso exactamente, he estado investigando mas a fondo y hay que hacerlo con una consulta:

Displaying Posts Using a Custom Select Query « WordPress Codex

Es en el query donde hay que indicarselo, pero no consigo hacer que funcione con esto:

PHP:
<?php

 $querystr = "
    SELECT wp_posts.* 
    FROM $wpdb->posts wp_posts, $wpdb->postmeta wp_postmeta
    WHERE wp_posts.ID = wp_postmeta.post_id 
    AND wp_postmeta.meta_key = 'campo_personalizado' 
    AND wp_postmeta.meta_value = 'valor1' 
    AND wp_posts.post_status = 'publish' 
    AND wp_posts.post_type = 'post' 
    AND wp_posts.post_date < NOW() 
    ORDER BY wp_posts.post_date DESC
 ";

 $pageposts = $wpdb->get_results($querystr, OBJECT);

?>
 <?php if ($pageposts): ?>
  <?php global $post; ?>
  <?php foreach ($pageposts as $post): ?>
    <?php setup_postdata($post); ?>

			<?php
				//Set Default Thumbnail Image URL's
				$related_thumbnail = get_post_meta($post->ID, "image", $single = true);
				$default_thumbnail = 'default-image.jpg';
			?>

				<a href="<?php the_permalink() ?>" rel="bookmark" target="_parent">  
				<?php if ($related_thumbnail != "") : ?>
					<img src="<?php echo $related_thumbnail; ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>" height="125" width="83" />
				<?php else : ?>
					<img src="<?php echo $default_thumbnail; ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>" height="125" width="83" />
				<?php endif; ?></a>
  <?php endforeach; ?>

<?php endwhile;?>


No me funciona, no se que puede estar mal.
 
Si quieres mostrar posts de acuerdo a un campo personalizado, es lo que puse, lo que estás haciendo es para mostrar posts según un campo que no soporta la clase WP Query, probablemente es la forma que se hacía en versiones viejas de WordPress, hay ejemplos de hace 3 años...
 
Si quieres mostrar posts de acuerdo a un campo personalizado, es lo que puse, lo que estás haciendo es para mostrar posts según un campo que no soporta la clase WP Query, probablemente es la forma que se hacía en versiones viejas de WordPress, hay ejemplos de hace 3 años...

Entonces como deberia implementar tu codigo con lo mio de arriba, quitando el SELECT
 
Seria así

PHP:
  <?php 
  $args = array( 
    'meta_key' => 'campo_1', // Campo personalizado 1 
    'meta_value'  => 'valor_1' // Valor del campo 1 
  );   
  $pageposts = get_posts($args); 
 <?php if ($pageposts): ?> 
  <?php global $post; ?> 
  <?php foreach ($pageposts as $post): ?> 
    <?php setup_postdata($post); ?> 

            <?php 
                //Set Default Thumbnail Image URL's 
                $related_thumbnail = get_post_meta($post->ID, "image", $single = true); 
                $default_thumbnail = 'default-image.jpg'; 
            ?> 

                <a href="<?php the_permalink() ?>" rel="bookmark" target="_parent">   
                <?php if ($related_thumbnail != "") : ?> 
                    <img src="<?php echo $related_thumbnail; ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>" height="125" width="83" /> 
                <?php else : ?> 
                    <img src="<?php echo $default_thumbnail; ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>" height="125" width="83" /> 
                <?php endif; ?></a> 
  <?php endforeach; ?>
  <?php endif; ?>

Por cierto si tenías error en el código, vi un endwhile al final cuando lo que necesitabas era un endif, igual y por eso no te funcionó.
 
Seria así

PHP:
  <?php 
  $args = array( 
    'meta_key' => 'campo_1', // Campo personalizado 1 
    'meta_value'  => 'valor_1' // Valor del campo 1 
  );   
  $pageposts = get_posts($args); 
 <?php if ($pageposts): ?> 
  <?php global $post; ?> 
  <?php foreach ($pageposts as $post): ?> 
    <?php setup_postdata($post); ?> 

            <?php 
                //Set Default Thumbnail Image URL's 
                $related_thumbnail = get_post_meta($post->ID, "image", $single = true); 
                $default_thumbnail = 'default-image.jpg'; 
            ?> 

                <a rel="nofollow" href="<?php the_permalink() ?>" rel="bookmark" target="_parent">   
                <?php if ($related_thumbnail != "") : ?> 
                    <img src="<?php echo $related_thumbnail; ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>" height="125" width="83" /> 
                <?php else : ?> 
                    <img src="<?php echo $default_thumbnail; ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>" height="125" width="83" /> 
                <?php endif; ?></a> 
  <?php endforeach; ?>
  <?php endif; ?>

Por cierto si tenías error en el código, vi un endwhile al final cuando lo que necesitabas era un endif, igual y por eso no te funcionó.


Muchas gracias, funciona perfecto, solo te olvidaste de cerrar un ?>.

El problema es que no me pagina con eso, no se si eso sera posible.
 
Agregaa esto encima de 'meta_key'

PHP:
'numberposts' => 5,

Donde 5 es el número de posts a mostrar, y debajo agregas ya sea el código del paginavi o la navegación por defecto
 
Agregaa esto encima de 'meta_key'

PHP:
'numberposts' => 5,

Donde 5 es el número de posts a mostrar, y debajo agregas ya sea el código del paginavi o la navegación por defecto


Si, ya he probado, pero los muestra hasta ahi y nada mas. Igual es problema del wp_pagenavi, ni idea 🙁
 
Atrás
Arriba