web-dev-qa-db-ja.com

ホームページの表示投稿のショートコードは1つの投稿のみを表示します

3件の投稿を表示する必要があります。私はこのコードを作成しました:

add_shortcode('projects', 'projects_shortcode');
function projects_shortcode($atts, $content){

extract(shortcode_atts(array(
        'post_type' => 'project',
        'post_status'       => 'publish',
        'posts_per_page' => 3,
        'caller_get_posts' => 1
    ), $atts));

$args = array(
    'post_type'         => $post_type,
    'post_status'       => $post_status,
    'posts_per_page'    => $posts_per_page
);

global $post;

$posts = new WP_Query($args);
$out = '';
if ($posts->have_posts())
    while ($posts->have_posts()):
        $posts->the_post();

        $overview_image = get_field('small_overview_image');

        $out = '<div class="row"><div class="col-md-4">
                <a href="'.get_permalink().'" title="' . get_the_title() . '" class="project-item">                    
                <div class="project-item_img"><img class="img-fluid" src="'.$overview_image['url'].'" /></div>
                <div class="project-item_title">
                <div class="project-item_title-name">'.get_the_title().'</div> 
                <div class="project-item_title-description">'.get_the_title().'</div></div>';
        $out .='</a></div></div>';
        /* these arguments will be available from inside $content
            get_permalink()
            get_the_content()
            get_the_category_list(', ')
            get_the_title()
            and custom fields
            get_post_meta($post->ID, 'field_name', true);
        */
    endwhile;
else
    return; // no posts found

wp_reset_query();
return html_entity_decode($out);
}

Wp-editorではショートコード[projects]を使用してください。

しかし、このコードは1つの投稿しか表示しません。 'posts_per_page' => 3が機能しません。私はphp開発者ではありません。このコードのどこにエラーがあるのでしょうか。

1
Marina Voronova

この行で:

$out = '<div class="row"><div class="col-md-4">

各投稿の$out変数をリセットしています。それをに変更します。

$out .= '<div class="row"><div class="col-md-4">

これにより、それぞれの新しい投稿が前の投稿の出力に追加され、出力が返されるときにすべての投稿からの出力が含まれるようになります。

2
Jacob Peattie