WordPressで、記事一覧を限定公開にしたいです。
###実現したいこと
記事の登録時にarrowUser
というカスタムフィールドにユーザーIDを入力し、入力されたユーザーだけが記事を見れるように、と考えています。
そのために下記のソースコードを書いてみたのですが、問題があります。
###問題
たとえば、「1ページに本来表示される記事」が10件あり、その中に「私が指定ユーザーに入っていない非表示の記事」が1件あるときに、「私に表示させたい記事」は変わらず10件です。
(非表示の1件の代わりに、別の1件が表示されるということです。)
ところが下記のソースコードですと、私には9件しか表示されなくなってしまうのです。
素人考えですが、posts_per_page
で10件指定するとその回数のループが実行され、そのループの中に非表示の記事が含まれているため?でしょうか?
この場合、どのように解決したらよろしいでしょうか?
###試したソースコード
php
1 2<?php 3$my_args = array( 4 'posts_per_page' => 10, 5); 6?> 7 8<ul> 9 10 <?php if( have_posts( $my_args ) ) : ?> 11 <?php while( have_posts() ): the_post(); ?> 12 13 <?php // 指定IDに該当するか、そもそも指定されてない場合だけarticleを表示 14 $arrowUser = get_post_meta( $post->ID, 'arrowUser' ); 15 if ( in_array( get_current_user_id(), $arrowUser ) || empty($arrowUser) ): 16 ?> 17 18 <article> 19 <?php the_title(); ?> 20 </article> 21 22 <?php endif; ?> 23 24 <?php endif; ?> 25 <?php endwhile; ?> 26 27</ul>
###補足と進捗
ご回答を受けて、上のコードを下のように修正致しました。
上ではループ内で指定IDを取得していたのを、下では$my_args
内で取得しています。
ただコメントアウトしてあるように、記事が最大で1つしか出力されません。
php
1<?php 2$my_args = array( 3 'posts_per_page' => 10, 4 'post_type' => 'mypost', 5 // ここまでの条件なら正常に動作する。 6 // 下記のmeta_queryによって記事が1つしか出力されなくなる。 7 'meta_query' => array( 8 array( 9 'key' => 'arrowUser', 10 'value' => 1, // これが1でも2でも、とにかく記事が最大で1つしか出力されない。 11 'compare' => 'LIKE', 12 'type'=>'NUMERIC' 13 ), 14 array( 15 'key' => 'arrowUser', 16 'value' => '', // これは完全スルーされ、arrowUserが空の記事は出力されない。 17 'compare' => '=', 18 ), 19 'relation'=>'OR' 20 ), 21); 22$my_query = new WP_Query( $my_args ); 23?> 24 25<ul> 26 27 <?php if ( $my_query->have_posts() ) : ?> 28 29 <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?> 30 31 <li> 32 <?php the_title(); ?> 33 </li> 34 35 <?php endwhile; ?> 36 37 <?php wp_reset_postdata(); ?> 38 39 <?php endif; ?> 40 41</ul> 42
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/03 02:05
2018/12/03 02:44
2018/12/03 03:28 編集
2018/12/03 04:16
2018/12/03 04:31
2018/12/03 04:50