質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

WordPressにて記事を4件取得用のショートコードを作成したいのですが、'posts_per_page' => 4で全件取得されてしまいます

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 248

serizawa3

score 16

お世話になります。
WordPressにて、カスタム投稿の最新記事を4件取得用のショートコードを作成したいのですが、
'posts_per_page'  => 4としているのですが、なぜか全件取得されてしまいます。

カスタム投稿にて作成した記事のカテゴリーごとの最新記事を4件取得』 をどこにでも差し込めるようにショートコードにて作成をしたいと考えており、
下記のようなコードを考えております。

function shortcode_show_case_list_estate($atts) {
  $cat = '';
  if(isset($atts['cat'])) { // カテゴリ指定あるか
      $cat = $atts['cat'];
  }
  $args = array(
    'posts_per_page'  => 4,
    'post_type'       => 'estate',
    'post_status'     => 'publish',
    'has_password'    => false,
    'orderby'         => 'date',
    'order'           => 'DESC'
  );
  if($cat != '') { // カテゴリ指定
    $catarr = array(
      'tax_query'      => array(
        array(
          'taxonomy' => 'estate_category', 
          'field'    => 'slug', 
          'terms'    =>  $cat
        )
      )
    );
    $args += $catarr;

  }
  $posts = get_posts($args);
  if( $posts ) {
    $tg = '<div class="col-md-12 post-list">

    <div class="col-xs-12 text-center"><h3 class="text-center">その他の土地情報はこちら</h3></div>';
    foreach($posts as $post) : setup_postdata($post);
      $terms = wp_get_object_terms($post->ID, 'estate_category');
      foreach($terms as $term) {
        $term_name = $term->name;
      }

      $tg .= '<div class="col-md-3 col-xs-6"><a href="'.get_the_permalink($post->ID).'" title="'.get_the_title($post->ID).'">';
        $tg .= '<div class="post-list__item__thumb">';
          $tg .= get_the_post_thumbnail($post->ID, 'case-thumb', array( 'alt' => $term_name . 'の事例')).'<div class="post-list__item__hover"><span class="post-list__item__view">Detail</span></div>';
        $tg .= '</div>';
        $tg .= '<div class="post-list__item__title">'.get_field('address', $post->ID).'</div>';
      $tg .= '</a></div>';
    endforeach; wp_reset_postdata();
    $tg .= '</div><div class="row"><div class="col-md-4 col-md-offset-4"><nav>
    <div class="pager">
      <li class="list"><a href="/estate">MORE</a></li>
    </div></div>
  </nav></div>';
    return $tg;
  }
  return '';
}
add_shortcode('estate_list', 'shortcode_show_case_list_estate');
'numberposts' => 4,

 
こちらも試してみましたが、全件(6件中6件とも)取得されてしまいました。

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


$args = array(部分を上記2行にしても全件取得されてしまいました。

前後のコードが原因なのでしょうか?
posts_per_pageしか使ったことがなく、
また、ショートコードを作りのも初めてのため、どこが影響しているのかが分からず、
どなたかご教授いただけないでしょうか?
どうぞよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • YukiYamashina

    2019/08/19 20:28

    $posts = get_posts($args); の後に return count($posts); とすると、ショートコードで4が表示されることは確認されましたでしょうか?また、$args に posts_per_page だけを指定した場合でも4が表示されますでしょうか?

    キャンセル

  • serizawa3

    2019/08/19 23:19

    ありがとうございます。
    return count($posts);  →何も表示されず、
    posts_per_page だけですが、カスタム投稿のため、
    'posts_per_page' => 4,
    'post_type' => 'estate',  →全件取得となりました。

    その他、何か確認するべきポイントなどございますでしょうか?

    キャンセル

回答 2

check解決した方法

0

今回のショートコードに限らず、
他のカスタム投稿やpost、テンプレートへ直接記述でも、
'posts_per_page'  => 4,
もしくは別の数字でも、なぜか記事が全件取得されてしまうことに気がつきました。

原因は、もっと別の箇所かと思いますので、
今回は当初の考えとは異なりますが、
ショートコードでの出力の4記事に含めるか、をカスタムフィールドで設定して、

'meta_query' => array(
    array(
    'key' => 'shot-code', //カスタムフィールドの値
    'compare' => '==',
    'value' => '1'))
);


を追加して対応いたしました。
また、全件取得になってしまう現象は、時間を割いて解決したいと思います。
ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

numberposts を試してみてください。

【get_posts() | Function | WordPress Developer Resources】
https://developer.wordpress.org/reference/functions/get_posts/

もしくはこちらかなぁ。

【WP_Queryのposts_per_pageが効かないので解決を図った | 日常の生活と仕事を雑記するコーダーのブログ | CattleMute】
http://www.cattlemute.com/2018/03/12/684/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/19 18:56

    度々申し訳ございません。
    変わらず、でした。
    該当コード、全て転記いたします。
    お手数をお掛けして申し訳ございません。

    キャンセル

  • 2019/08/19 20:13

    こちらこそあてずっぽうになってしまって申し訳ない。
    'nopaging' => true
    はどうでしょう。

    キャンセル

  • 2019/08/20 03:36

    本当にありがとうございます。
    ただすみません、こちらでも変わらずでした。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • PHPに関する質問
  • WordPressにて記事を4件取得用のショートコードを作成したいのですが、'posts_per_page' => 4で全件取得されてしまいます