WordPress Tricks #4

, WordPress Tricks #4, Shambix

 

Avete creato una custom taxonomy in WP, perché magari volevate qualcosa di più dei normali “Articoli, che magari seguissero regole diverse e forse anche per essere visualizzati diversamente.

E se voleste visualizzare nel template questi post, nella stessa pagina, MA prima quelli con un valore specifico in un Campo Personalizzato, e poi gli altri?
Come fate a impedire che il Loop carichi tutti i post, senza tener conto di questo valore nei campi personalizzati?

Si fa così, usando due custom Loop.
Ovviamente dovete sostituire con i vostri valori il nome del custom type post, nome e valore del campo personalizzato in questione, dove necessario.

<?php // Loop 1 ?>
<?php // questa visualizza prima tutti post con custom taxonomy post type "PostTypeName", che HANNO che hanno come value "CustomFieldValue" nel campo personalizzato
query_posts(array('post_type' => 'PostTypeName', 'meta_value' => 'CustomFieldValue'));
if(have_posts()) : while(have_posts()) : the_post();
?>
<h3><?php the_title(); ?></h3>
<p><?php the_excerpt(); ?></p>
<div>some html</div>
<?php // se volete visualizzare proprio il valore del "CustomFieldName" del post, usare questo
echo get_post_meta($post->ID, 'CustomFieldName', true);
?>
<h3><?php the_title(); ?></h3>
<p><?php the_excerpt(); ?></p>
<div>html a piacere</div>
<?php endwhile; endif;
wp_reset_query(); ?>

Siete a metà strada adesso, vediamo ora come visualizzare i post mancanti, quelli che quel valore nel campo personalizzato NON ce l’hanno:

<?php // 2nd loop ?>
<?php // questa visualizza tutti gli altri post con custom taxonomy post type "PostTypeName", che NON che hanno come value "CustomFieldValue" nel campo personalizzato
$querystr = "
SELECT $wpdb->posts.* 
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND $wpdb->postmeta.meta_value = 'CustomFieldValue' 
AND $wpdb->posts.post_status = 'publish' 
AND $wpdb->posts.post_type = 'PostTypeName'
ORDER BY $wpdb->posts.post_date DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);
if ($pageposts):
foreach ($pageposts as $post):
setup_postdata($post); ?>
<h3><?php the_title(); ?></h3>
<?php the_excerpt(); ?>
<div>html a piacere</div>
<?php endforeach; endif; ?>

Questa seconda Loop in realtà può essere costruita anche così:

<?php // questa visualizza tutti gli altri post con custom taxonomy post type "PostTypeName", che NON che hanno come value "CustomFieldValue" nel campo personalizzato 
query_posts(array('post_type' => 'PostTypeName', 'meta_value' => 'CustomFieldValue', 'meta_compare' => '!=', 'meta_key' => 'CustomFieldName'));
if(have_posts()) : while(have_posts()) : the_post(); ?>
<h3><!--?php the_title(); ?></h3>
<?php the_excerpt(); ?>
<div>some html</div>
<?php endwhile; endif; wp_reset_query(); ?>

Enjoy!