web-dev-qa-db-ja.com

カスタム分類法のショートコードで最近追加されたカスタム投稿タイプを表示する

私はこれに数回突き刺して、障害物を打った。できるだけわかりやすいようにします。

  1. カスタム投稿タイプがあります。
  2. バーに関連付けられたカスタム分類法があります。
  3. 場所には複数の都市が関連付けられています。例えばダラス、アトランタ、フィラデルフィアなど.

"location"に関連付けられた "用語"を取得してフロントエンドの[最近の投稿]リストに表示する方法がわからないという例外を除いて、現在機能するショートコードを作成しました。サムネイル、タイトル、および日付のみが表示されています。

現在私はwp_get_recent_postsを使用していますが、少し読んだ後でそれを使用するべきですか?それともWP_Queryを使うべきですか?

これが私のコードです:

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' );

これをより良くするためのどんな洞察でも、私はまだ学んでいるので私はすべて耳です。私はすべてにプラグインを使うことに頼らずに、できる限りコーディングしたいと思っています。

前もって感謝します。

1
Jason Ryan

特定の投稿の用語を取得するには、get_the_termsを使用します。

$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