web-dev-qa-db-fra.com

Affichez plusieurs types de messages personnalisés et triez-les chronologiquement selon l'un de leurs champs

J'ai quatre types de messages personnalisés créés avec le plugin UI types de messages personnalisés; chacun représente un type d'événement avec un ensemble différent de champs personnalisés créés avec le plug-in de champs personnalisés avancés.

Mon but est de montrer tous les événements hors du pool des quatre chronologiques. Interroger les quatre avec WP_Query n'est pas un problème mais jusqu'à présent, distinguer le résultat et le trier me donne des soucis.

L'exemple de code interroge les types de publication personnalisés et affiche la date de l'événement, ainsi qu'un écho pour déterminer le type de l'événement à des fins de débogage.

<article>
    <?php $args = array(
        'post_type' => array( 'eventtype1', 'eventtype2', 'eventtype3', 'eventtype4' ),
        'posts_per_page' => -1
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
        if ( 'post_type' == 'eventtype1' ) {
          ?><p><?php the_field( 'eventtype1_date' ); ?></p><?php
          echo "event type 1";
        }
        elseif ( 'post_type' == 'eventtype2') { 
          ?><p><?php the_field( 'eventtype2_date' ); ?></p><?php 
          echo "event type 2";
        }
        elseif ( 'post_type' == 'eventtype3' ) {
          ?><p><?php the_field( 'eventtype3_date' ); ?></p><?php
          echo "event type 3";
        }
        elseif ( 'post_type' == 'eventtype4' ) {
          ?><p><?php the_field( 'eventtype4_date' ); ?></p><?php
          echo "event type 4";              
        } ?>
</article>

Un problème est que je ne suis pas sûr s'il est possible de distinguer en dehors de la portée du tableau WP_Query par post_type. Peut-être que la raison pour laquelle il n'y a pas encore de sortie avec l'exemple de code.

Deuxièmement, je ne sais pas comment trier les résultats. Si j'utilise le 'orderby' => 'date'dans le tableau WP_query, je trie par date de publication et non par date d'événement. À propos du type, je ne suis pas sûr que ce soit possible dans cette configuration?

Tous les indices sont plus que bienvenus. Cordialement Ralf

Mise à jour: Ok j'ai résolu le problème. Avec le code suivant, il est possible de trier les champs de sélecteur de date acf et les champs de sélecteur de date acf dans les champs de répéteur (le sélecteur de date interrogé doit être placé en premier dans le champ de répéteur) dans plusieurs types de publication personnalisée par date:

<article>
          <?php $args = array(
                'post_type' => array( 'event_type1', 'event_type2', 'event_type3', 'event_type4' ),
                'posts_per_page' => -1,
                'meta_query' => array(
                      'relation' => 'OR',
                      array('key' => 'event1_date_0_event1_date_day'),
                      array('key' => 'event2_date'),
                      array('key' => 'event3_date_0_event3_date_day'),
                      array('key' => 'event4_date' )
                ),
                'meta_key' => 'meta_value',
                'orderby' => 'meta_value',
                'order' => 'ASC'
         );
         $the_query = new WP_Query( $args );
         if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
            if ( get_post_type() == 'event_typ1' ) {
                $e1 = get_field( 'event1_date' );
                echo "Event Type 1"; ?>
                <p><?php echo $e1[0]['event1_date_day']; ?></p><?php
            }
            elseif ( get_post_type() == 'event_typ2') {
                echo "Event Type 2:"; ?>
                <p><?php the_field( 'event2_date' ); ?></p><?php
            }
            elseif ( get_post_type() == 'event_type3' ) {
                $e3 = get_field( 'event3_date' );
                echo "Event Type 3:"; ?>
                <p><?php echo $e3[0]['event3_date_day']; ?></p><?php
            }
            elseif ( get_post_type() == 'event_type4' ) {
                echo "Event Type 4:";
                ?><p><?php the_field( 'event4_date' ); ?></p><?php
            }
         endwhile;
             wp_reset_postdata();
         else: ?>
            <p>Error</p>
         <?php endif; ?>
</article>
1
rpk

Il n'y a pas de sortie pour cet exemple de code car l'instruction IF que vous avez utilisée ne retournera jamais la valeur true, car la chaîne "post_type" ne sera jamais égale à une autre chaîne que "post_type". Utilisez get_post_type ():

if ( get_post_type() == 'eventtype1' ) {

Pour commander un champ personnalisé de date, vous devrez utiliser le même identifiant de champ pour tous les types de publication si vous souhaitez les interroger tous ensemble.

$args = array(
    'post_type' => array( 'eventtype1', 'eventtype2', 'eventtype3', 'eventtype4' ),
    'posts_per_page' => -1,
    'meta_key'      => 'start_date',
    'orderby'       => 'meta_value_num',
    'order'         => 'DESC'
);

http://www.advancedcustomfields.com/resources/how-to/orde-posts-by-custom-fields/

2
Alon Nadel