1

私はこれに少し困惑しています。私はワードプレスを使用しており、ある種の比率を使用して複数のカスタム投稿タイプをクエリし、それらをページに表示したいと考えています。

次の投稿タイプがあるとします。

ツイート、プロジェクト、ビデオ、投稿

現在、私の現在のクエリ結果はつぶやきであふれており、他のすべての投稿タイプがページにプッシュされています。

(たとえば) 結果の 25% がツイートで占められ、残りの 75% が他の投稿タイプで占められるようにクエリを作成する方法はありますか? 基本的に、クエリ結果に表示されるツイートの数を減らしたいと考えています。

それが理にかなっていることを願っています。

どうもありがとう

4

1 に答える 1

0

おそらく、これを 2 つの個別のカスタム クエリ ( WP_Queryを使用) で手動で処理します。ページングを有効にしたいと仮定します (これが唯一のブログロールであり、最終的には非常に大きくなるからです)。一般的に、戦略は次のようになります。

1) 2 つの異なるクエリを作成します (プロジェクト、動画、投稿用に 1 つ...そしてツイート用に 1 つ)。

posts_per_page2)クエリ引数の属性を使用して、混合する比率を設定します。

3) 各クエリをループしますが、タイトルやコンテンツはまだ出力せず、それぞれを独自の配列に格納します。

4) 「シャッフルされた」ブログロールを含む新しい配列を作成します。

5) この新しい配列をループしてコンテンツを出力します。

$posts_array = array(); // this will temporarily hold your projects/videos/posts
$tweets_array = array(); // this will temporarily hold your tweets

// WP_Query arguments for projects, videos, and posts
$post_args = array (
    'post_type'              => array('project', 'video', 'post'),
    'post_status'            => 'publish',
    'pagination'             => true,
    'posts_per_page'         => '10',
);

// The Query
$query_posts = new WP_Query( $post_args );

// The Loop will be used to grab the posts and store them in $posts_array
if ( $query_posts->have_posts() ) {
    while ( $query_posts->have_posts() ) {
        $query_posts->the_post();

        // here you can use any number of functions inside the loop to get content or metadata about this post
        $posts_array[] = array(
            'title' => get_the_title(),
            'permalink' => get_permalink(),
            'excerpt' => get_the_excerpt(),
            'content' => get_the_content(),
            'thumbnail' => get_the_post_thumbnail()
        );
    }
} else {
    // no posts found, maybe handle this differently if you wish
}

// Restore original Post Data
wp_reset_postdata();

// WP_Query arguments just for tweets
$tweet_args = array (
    'post_type'              => 'tweet'
    'post_status'            => 'publish',
    'pagination'             => true,
    'posts_per_page'         => '2',
);

// The Query
$query_tweets = new WP_Query( $tweet_args );

// The Loop will be used for your tweets
if ( $query_tweets->have_posts() ) {
    while ( $query_tweets->have_posts() ) {
        $query_tweets->the_post();

        $tweets_array[] = array(
            'title' => get_the_title(),
            'permalink' => get_permalink(),
            'excerpt' => get_the_excerpt(),
            'content' => get_the_content(),
            'thumbnail' => get_the_post_thumbnail()
        );
    }
} else {
    // no posts found, maybe handle this differently if you wish
}

// Restore original Post Data
wp_reset_postdata();

$final_array = array(); //this is the array that'll hold the shuffled post types

// this loop is currently built to assume the "posts_per_page" ratio from above
// edit these to your liking if you want to increase the number of tweets per 10 other posts
for ($i = 0; $i < 10; $i++) {
    $final_array[] = $posts_array[$i];

    // after the 5th normal post, inject a tweet (we only have 2 tweets, so inject the first one)
    if ($i == 4) {
        $final_array[] = $tweets_array[0];
    }
}

// now that all 10 posts are done, throw in the last tweet next
$final_array[] = $tweets_array[1];

// now output your content in your template
foreach ($final_array as $current_post) {
    // this will be your markup for each post so replace this with the HTML for your own template
    echo '<div class="title"><a href="' . $current_post['permalink'] . '">' . $current_post['title'] . '</a></div>';
    echo '<div class="excerpt">' . $current_post['excerpt'] . '</div>';

    // etc etc with any of your remaining array elements
}

このコードはテストしていないので、疑似コードのように扱ってください。しかし、一般的な考え方は明確であることを願っています。

楽しむ!

于 2013-06-26T20:33:39.110 に答える