web-dev-qa-db-ja.com

Foreachループ内の投稿の総数を数える

次のスクリプトを使用して(get_permalink ....のみ)、投稿の作成者が自分のユーザーページに追加のメタフィールドを持つ投稿タイプの投稿を表示しました。

<?php // get users from user page
    $blogusers = get_users();
    foreach ($blogusers as $user) {
        if(get_field('races','user_' . $user->ID)) {
        while(the_repeater_field('races','user_' . $user->ID)) {
            $signed_up = get_sub_field('race_name', $post_object->ID);
            if($original_id == $signed_up->ID) { //original ID is the race_name post we are on      
            $user_info = get_userdata($user->ID);

                $arg = array( 
                'post_type' => array ('members'),
                'post_status' => array( 'publish'),
                'posts_per_page' => 200,
                'author' => $user_info->ID
                );
                $arg_query = new WP_Query();
                $arg_query->query( $arg );

                echo $total = $arg_query->post_count;

            } else {
            }
        }
    }
} ?>

メンバーの投稿の種類から投稿のタイトルを表示することはできましたが、これらの投稿を数えることができません。 3の代わりに1 1 1と表示されます。 foreachを正しく機能させるためにはどうすればいいですか?

2
elbatron

アイデアをありがとう。最後に、必要な形式で正しい数を与えるように思われる素早い解決策を思いつきました。このようなクエリから結果を取得するためのよりクリーンな方法があると確信していますが、今のところ似たようなものは見たことがありません。

<?php // get users from user page
$blogusers = get_users();
$i = 0;
foreach ($blogusers as $user) {
    if(get_field('races','user_' . $user->ID)) {
    while(the_repeater_field('races','user_' . $user->ID)) {
        $signed_up = get_sub_field('race_name', $post_object->ID);
        if($original_id == $signed_up->ID) { //original ID is the race_name post we are on      

            $arg = array( 
            'post_type' => array ('members'),
            'post_status' => array( 'publish'),
            'posts_per_page' => 200,
            'author' => $user_info->ID
            );
            $arg_query = new WP_Query();
            $arg_query->query( $arg );

        $i++;

        } else {
        }
    }
}
} if($i>0) { echo $i; } ?>
0
elbatron

編集:あなたの質問を読み直すことに気付いたかもしれませんが、ループ内で実行されるこれらの別々のクエリを組み合わせて、ループ内の変数を使用してクエリ引数の包括的なリストを作成する必要があります。ループ外で1つのクエリを実行するために使用できます。

私は残念ながら、より詳細な答えを提供する時間がありません。


元の投稿:1 1 1を取得しているのは、ユーザーごとに個別のクエリを実行しているためです。

これらのクエリを1つのクエリにまとめると、$arg_query->post_countは必要に応じて機能します。これを行うには、foreachループを使用してすべての作成者IDを取得し、それらを配列に格納します。次に、foreachループが終了した後で、作成者argに格納されている作成者IDを使用してクエリを実行します。

WP_Queryコーデックスページ に、複数の作者からの投稿をクエリするための基本的な例を示します。

$query = new WP_Query( 'author=2,6,17,38' );

ところで、ユーザーIDを取得するためだけに使用しているのであれば、なぜget_userdata()を使用するのでしょうか。

2
W van Dam