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

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

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

620閲覧

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

serizawa3

総合スコア16

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/08/19 07:47

編集2019/08/19 14:27

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

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

php

1function shortcode_show_case_list_estate($atts) { 2 $cat = ''; 3 if(isset($atts['cat'])) { // カテゴリ指定あるか 4 $cat = $atts['cat']; 5 } 6 $args = array( 7 'posts_per_page' => 4, 8 'post_type' => 'estate', 9 'post_status' => 'publish', 10 'has_password' => false, 11 'orderby' => 'date', 12 'order' => 'DESC' 13 ); 14 if($cat != '') { // カテゴリ指定 15 $catarr = array( 16 'tax_query' => array( 17 array( 18 'taxonomy' => 'estate_category', 19 'field' => 'slug', 20 'terms' => $cat 21 ) 22 ) 23 ); 24 $args += $catarr; 25 26 } 27 $posts = get_posts($args); 28 if( $posts ) { 29 $tg = '<div class="col-md-12 post-list"> 30 31 <div class="col-xs-12 text-center"><h3 class="text-center">その他の土地情報はこちら</h3></div>'; 32 foreach($posts as $post) : setup_postdata($post); 33 $terms = wp_get_object_terms($post->ID, 'estate_category'); 34 foreach($terms as $term) { 35 $term_name = $term->name; 36 } 37 38 $tg .= '<div class="col-md-3 col-xs-6"><a href="'.get_the_permalink($post->ID).'" title="'.get_the_title($post->ID).'">'; 39 $tg .= '<div class="post-list__item__thumb">'; 40 $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>'; 41 $tg .= '</div>'; 42 $tg .= '<div class="post-list__item__title">'.get_field('address', $post->ID).'</div>'; 43 $tg .= '</a></div>'; 44 endforeach; wp_reset_postdata(); 45 $tg .= '</div><div class="row"><div class="col-md-4 col-md-offset-4"><nav> 46 <div class="pager"> 47 <li class="list"><a href="/estate">MORE</a></li> 48 </div></div> 49 </nav></div>'; 50 return $tg; 51 } 52 return ''; 53} 54add_shortcode('estate_list', 'shortcode_show_case_list_estate');

php

1'numberposts' => 4, 2```  3こちらも試してみましたが、全件(6件中6件とも)取得されてしまいました。 4 5```php 6 $args = array( 7 'posts_per_page' => 4, 8 'post_type' => 'estate', 9 );

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YukiYamashina

2019/08/19 11:28

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

2019/08/19 14:19

ありがとうございます。 return count($posts);  →何も表示されず、 posts_per_page だけですが、カスタム投稿のため、 'posts_per_page' => 4, 'post_type' => 'estate',  →全件取得となりました。 その他、何か確認するべきポイントなどございますでしょうか?
guest

回答2

0

自己解決

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

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

php

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

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

投稿2019/08/19 18:42

serizawa3

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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 07:54

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

serizawa3

2019/08/19 08:16

ありがとうございます。 $args = array( 'numberposts' => 4, 'post_type' => 'estate', 'post_status' => 'publish', 'has_password' => false, 'orderby' => 'date', 'order' => 'DESC' でも、残念ながら、全件表示されております。 関係ないと思いますが、順番も並び替えて試してみました。 $num = 4; if(isset($atts['count'])) { // 数の指定 $num = $atts['count']; } $args = array( 'numberposts' => $num, 'post_type' => 'gallery', 'post_status' => 'publish', 'has_password' => false, 'orderby' => 'date', 'order' => 'DESC' ); 少し違うかもしれないのですが、こちらも試してみましたが、やはり全件(6件登録があり6件とも)表示されてしまいます。 何かショートコードだと異なるのでしょうか?
serizawa3

2019/08/19 09:56

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

2019/08/19 11:13

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

2019/08/19 18:36

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問