web-dev-qa-db-fra.com

Afficher les types de publication personnalisés récemment ajoutés avec un code de taxonomie personnalisé

J'ai pris quelques coups à ce sujet et ai frappé un barrage routier. Je vais essayer d'être aussi descriptif que possible ...

  1. J'ai un type de message personnalisé: Bars
  2. J'ai une taxonomie personnalisée associée à Bars appelée: Location
  3. L'emplacement est associé à plusieurs villes. par exemple. Dallas, Atlanta, Philadelphie, etc.

J'ai créé un shortcode qui fonctionne actuellement avec l'exception que je ne peux pas comprendre comment saisir les "termes" associés à "emplacement" et les afficher dans la liste des messages récents du serveur frontal. Seules la miniature, le titre et la date s'affichent.

Actuellement, j'utilise wp_get_recent_posts mais après quelques lectures, devrais-je l'utiliser du tout? Ou devrais-je utiliser WP_Query?

Voici mon code:

function recent_cpt_list_display( $atts ) {
  $atts = shortcode_atts( array(
    'cpt_type' => 'bars',
    'show_posts' => 5,
    'cpt_cat' => 'location',
  ), $atts, 'cpt-recent-posts' );

  global $post;

  $cpt_type = $atts['cpt_type'];
  $show_posts = $atts['show_posts'];
  $cpt_cat = $atts['cpt_cat'];

  $cpt_posts = wp_get_recent_posts( array(
    'post_type' => $cpt_type,
    'orderby' => 'date',
    'order' => 'ASC',
    'numberposts' => $show_posts
  ));

  if ( ! empty( $cpt_posts ) && ! is_wp_error( $cpt_posts ) ) {
    $output = '<ul class="cpt-recent-posts">';

    foreach( $cpt_posts as $cpt_post ){
        $output .= '<li>';
        $output .= '<div class="cpt-recent-posts-thumb">' . get_the_post_thumbnail( $cpt_post['ID'], 'thumbnail' ) . '</div>';
        $output .= '<div class="cpt-recent-meta">';
        $output .= '<a href="' . get_permalink( $cpt_post["ID"] ) . '" title="' . esc_attr( $cpt_post["post_title"] ) . '" >' . $cpt_post["post_title"].'</a>';
        $output .= '<div class="cpt-meta">' . NEED TO OUTPUT LOCATION HERE . '</div>';
        $output .= '<div class="cpt-post-date">' . get_the_time( get_option( 'date_format' ), $post->ID ) . '</div>';
        $output .= '</div></li>';
      }
      $output .= '<ul>';
     }
  return $output;
}
add_shortcode( 'cpt-recent-posts', 'recent_cpt_list_display' );

N'importe quelle idée pour le faire mieux, je suis tout ouïe car j'apprends encore. J'essaie moins d'utiliser des plugins pour tout et je veux vraiment coder autant que possible.

Merci d'avance.

1
Jason Ryan

Utilisez get_the_terms pour récupérer les termes d'un message spécifique:

$terms = get_the_terms( $cpt_post['ID'], 'location' );

if ( $terms && ! is_wp_error( $terms ) ){
    $output .= '<div class="cpt-meta">';
    foreach ( $terms as $term ) {
        $output .= $term->name . ' ';
    }
    $output .= '</div>';
}
1
Milo