WordPress Tricks #4


 

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!

Jany Martelli

Sono Consulente Digitale, Front-End Developer e WordPress Specialist.
Aiuto aziende, professionisti e startup a crescere con la tecnologia ed una digital strategy vincente, creando e coordinando team di designer & sviluppatori, pianificando progetti e strategie, sviluppando soluzioni complesse.