Могу ли я показать все категории и теги каждого поста в WordPress?

#php #wordpress #function

Вопрос:

В настоящее время я создаю шорткод для списка сообщений в WordPress. И вот мой код

 function mgc_post_default() { 


global $post;

extract(shortcode_atts(array(
    'cat'     => '',
    'num'     => '5',
    'order'   => 'DESC',
    'orderby' => 'post_date',
), $atts));

$args = array(
    'cat'            => $cat,
    'posts_per_page' => $num,
    'order'          => $order,
    'orderby'        => $orderby,
);

$output = '';

$posts = get_posts($args);

foreach($posts as $post) {
    
    setup_postdata($post);
    
    $output .= '<div class="movie-poster">' . get_the_post_thumbnail() . '</div>';
    $output .= '<div><h2><a href="'. get_the_permalink() .'">'. get_the_title() .'</a></h2></div>';
    $output .= '<div>' . get_the_date() . '</div>';
    $output .= '<div>' . get_the_content() . '</div>';
    $output .= '<div>' . get_field( "status" ) . '</div>';
    $output .= '<div>' . get_the_category( $id )[0]->name . '</div>';
    $output .= '<div>' . get_the_tags( $id ) [1]->name . '</div>';
}

wp_reset_postdata();

return '<div>'. $output .'</div>';
}

// Register shortcode

add_shortcode('mgc_post', 'mgc_post_default');
 

Это работает, но категория и тег каждого поста только что появились 1. Я хочу, чтобы он мог отображать информацию обо всех категориях и тегах каждого поста.

Итак, мой вопрос в том, как показать все эти категории и теги для каждого поста?

Спасибо,

Ответ №1:

Чтобы получить все категории для публикации, используйте wp_get_post_categories вместо get_the_category. Затем вы просто перебираете категории внутри вашего каждого.

То же самое касается условий. Но затем используйте wp_get_post_terms.

Так что что-то вроде этого:

 $posts = get_posts($args);

foreach($posts as $post) {
    
    setup_postdata($post);

    $categories = wp_get_post_categories( $post );

    $foreach( $categories as $category ) { 
      
        $output .= '<div>' . $category->name . '</div>';
 
    } 
     
}

wp_reset_postdata();
 

Ответ №2:

Спасибо @anotheraccount за ответ, но я решил свою собственную проблему, добавив этот код « get_the_tag_list() и « get_the_category_list() в $output