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

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

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

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

PHP

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

2回答

2938閲覧

wordpress ページャーがうまく機能しない(2ページ目までしか表示されない/表示件数がワードプレス側の設定とちがう)

benkyosuruo

総合スコア16

WordPress

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

PHP

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2020/03/20 08:21

編集2020/03/20 10:04

カスタム投稿タイプと通常投稿にページャーの設置をしました。

###問題
通常投稿のページャーは問題なく動きますが、カスタム投稿タイプに関しては
・2ページ目までしか表示されない
・ワードプレスの管理画面から設定している表示件数分表示されず5件というどこからきたのかわからない件数分表示されてしまう(コードの中には特に表示件数の設定はされていないつもりです)

###実装したい事
・投稿がある場合は2ページ目以降も全て表示したい
・ワードプレスの表示件数とは関係なくカスタム投稿タイプに関しては1ページにつき10件表示したい

###前提
・カスタム投稿タイプはarchive-news.php、通常投稿はarchive.php
・wordpress管理画面の表示件数設定は6件
・archive.phpは他にメインループが使われている、archive-news.phpはサブループと一緒に使われている
・ページャーコードに関してはどちらのページも同じものを使用

###調べた自分なりの仮説
・archive-news.phpはサブループと使われている事で問題が起きていて、それぞれ別のページャー用のコードを記述しなければいけない?(使い回しできない?)→サブループで使えるというコードでページャーを作成してみたが同じ結果
・以前に通常投稿でページャーの2ページ目が表示されなかった時に、functions.phpからquery_posts('showposts=6');の記載を消去しています

もとのコードの理解がないままページャーを作成してしまい、どこを修正していいのかわからない状態です。(そもそもメインループサブループもままなりません)理解の薄い初心者の質問で申し訳ございませんが、ご助力をお願いします。

functions.php

//Pagenation function pagination($pages = '', $range = 2) { $showitems = ($range * 2)+1; global $paged; if(empty($paged)) $paged = 1; if($pages == '') { global $wp_query; $pages = $wp_query->max_num_pages; if(!$pages) { $pages = 1; } } if(1 != $pages) { echo "<div class=\"pagenation\">\n"; echo "<ul>\n"; if($paged > 1) echo "<li class=\"prev\"><a href='".get_pagenum_link($paged - 1)."'>Prev</a></li>\n"; for ($i=1; $i <= $pages; $i++) { if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) { echo ($paged == $i)? "<li class=\"active\">".$i."</li>\n":"<li><a href='".get_pagenum_link($i)."'>".$i."</a></li>\n"; } } if ($paged < $pages) echo "<li class=\"next\"><a href=\"".get_pagenum_link($paged + 1)."\">Next</a></li>\n"; echo "</ul>\n"; echo "</div>\n"; } }

archive-news.php

<div class="main__wrapper"> <main class="news__contents"> <?php $args = array( 'post_type' => 'news', // 'posts_per_page' => get_option('posts_per_page'), 'posts_per_page' => 10, ); ?> <?php $my_posts = get_posts( $args ); ?> <ul class="news-items"> <?php global $post; if($posts): foreach($my_posts as $post): setup_postdata($post); $post_id = $post->ID; $link = get_post_meta($post_id,'link',true); ?> <?php if($link) : ?> <li class="news-list"> <a class="news-list__link" href="<?php echo $link; ?>"> <div class="news-list__set"> <time class="news-list__time" datetime="2019-02-01"><?php the_time(__('Y年n月j日')) ?></time> <?php if ($terms = get_the_terms($post->ID, 'cat_news')) { foreach ( $terms as $term ) { $term_slug = $term -> slug; echo ('<div class="news-list__label ') ; echo esc_html($term_slug) ; echo ('">') ; echo esc_html($term->name) ; echo ('</div>') ; } } ?> </div> <p class="news-list__txt"> <?php the_title(); ?> </p> </a> </li> <?php else : ?> <li class="news-list"> <a class="news-list__link" href="<?php the_permalink() ?>"> <div class="news-list__set"> <time class="news-list__time" datetime="2019-02-01"><?php the_time(__('Y年n月j日')) ?></time> <?php if ($terms = get_the_terms($post->ID, 'cat_news')) { foreach ( $terms as $term ) { $term_slug = $term -> slug; echo ('<div class="news-list__label ') ; echo esc_html($term_slug) ; echo ('">') ; echo esc_html($term->name) ; echo ('</div>') ; } } ?> </div> <p class="news-list__txt"> <?php the_title(); ?> </p> </a> </li> <?php endif; ?> <?php endforeach; endif;?> <?php //Pagenation if (function_exists("pagination")) { pagination($additional_loop->max_num_pages); } ?> </main>

足りない情報があればすみません。コメントいただけると助かります。
お手数ですがよろしくお願いします。

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

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

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

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

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

guest

回答2

0

自己解決

<?php $args = array( 'post_type' => 'news', 'posts_per_page' => 4, ); ?>

ここの部分に 'paged' => $paged,を入れたら解消されました。
このぱこのパラメータは現在のページを判定するものらしく、2ページ以降で正しいページを表示するために必要らしいです。

投稿2020/03/20 13:59

benkyosuruo

総合スコア16

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

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

0

カスタムポストタイプアーカイブを使用しているのであれば、新着記事部分はサブループではなくメインループが使えます。
というか、メインループを使うべきでしょう。
htps://www.postit-web.com/2017/02/20/custom_post_loop2/

同一アーカイブで、新着以外の記事一覧を出す、というのであれば別ですが。
ちなみに、上記のような場合でサブループを使用したとき、posts_per_pageを管理画面で設定した表示件数に合わせたのであれば、下記で取得、設定できます。

'posts_per_page' => get_option('posts_per_page'),

https://wpdocs.osdn.jp/関数リファレンス/get_option

投稿2020/03/20 09:15

suminoel

総合スコア80

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

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

benkyosuruo

2020/03/20 10:14 編集

>>カスタムポストタイプアーカイブを使用しているのであれば、新着記事部分はサブループではなくメインループが使えます。 実は今回新着記事に関しまして、URLを入力できるカスタムフィールド を記事内に設定してあり、「URLの入力があった場合はURLへ直接リンク、無かった場合は普通に記事の表示」というような仕様にしてありまして、それもあり今回はサブループを使う方法で実装しております。なので、メインループにもどさず実装したいとかんがえております。(コード全体を追記します。) 表示件数に関しまして理解しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問