1

私は現在、すべての「特別プロジェクト」を表示するサイドバーがある小さなブログに取り組んでいます。

「特別なプロジェクト」は単なるカテゴリです。サイドバーには、投稿日でフィルター処理された一度に 4 つの投稿のみが表示されますが、ユーザーが投稿を特集できるようにするカスタム メタ ボックスもあります。これらの注目の投稿は、特別プロジェクトの上部に表示されるはずです。

現在、私のクエリは次のようになっています。

new WP_Query("showposts=" . $instance['num'] . "&cat=" . $instance["cat"] . "&order=ASC&order_by=date")

そして、注目のメタデータは次のように取得できます。

 $featured = get_post_meta($single_cat_post->ID, 'soy_featured_post', true);

しかし、どうすればこれを WP_Query 内に統合できますか?

4

1 に答える 1

3

まず、WP_Query を使用する場合、'showposts' は 'posts_per_page' に置き換えられました。私はあなたのコードでそれを修正しました。また、ループ内では $single_cat_post->ID の代わりに $post->ID を使用できるはずです。

私は2つのループを使用します。パラメータを設定し、最初のループにメタ値をチェックする条件を含め、クエリをリセットしてから、別のループを実行し、メタ値をチェックして存在する場合は何も出力しない条件を含めます。

最初のクエリでは、最初のループで返される投稿の数を確認するチェックを追加しました。次に、その値 (4 を引いた値) を使用して、2 番目のループで posts_per_page に使用する変数を計算しました。次に、結果が 0 より大きい場合にのみループを実行する条件を追加しました。

これはテストされていませんが、動作するか、少なくとも正しい道に進むはずです!

<?php 
$args = array(
    'posts_per_page' => 4,
    'meta_key'  => 'soy_featured_post',
    'cat' => $instance["cat"],
    'orderby' => 'date',
    'order' => 'ASC'
);

$special_post_query = new WP_Query( $args );
$special_posts_found = $special_post_query->found_posts;

if ($special_post_query->have_posts()) :
    while( $special_post_query->have_posts() ) : $special_post_query->the_post(); 

    // POST WITH META VALUE OUTPUT
    the_title();

    endwhile;
endif;

wp_reset_query();

$second_loop_posts_per_page = 4 - $special_posts_found;

if ($second_loop_posts_per_page > 0) {
    $args = array(
        'posts_per_page' => $second_loop_posts_per_page,
        'cat' => $instance["cat"],
        'orderby' => 'date',
        'order' => 'ASC'
    );

    if ($special_post_query->have_posts() ) :
        while( $special_post_query->have_posts() ) : $special_post_query->the_post(); 

        // Condition to test for NO meta value
        if (get_post_meta($post->ID, 'soy_featured_post', true) == null) {
            // CODE
            the_title();
        } else {
            // Don't print anything because the meta value exists
        }

        endwhile;
    endif;

    wp_reset_query();
} ?>
于 2013-04-30T15:58:50.590 に答える