実際に試してみましたが正しくページングされましたよ。
- WordPress 4.2.4 に Custom Post Type UI 1.1.2 と WP-PageNavi 2.88 を入れる。
- テーマ Twenty Thirteen の子テーマを作成して有効化。
- カスタム投稿タイプ tako を作り、12件ほど投稿を作成。
- page-pagination.phpを作り、iso_1さんのコードを入力。
- スラッグがpaginationの固定ページを作り、適当な内容を入力。
- その固定ページを表示。
<?php
$args = array(
'post_type' => 'tako',
'posts_per_page' => 3,
'paged' => $paged,
'order' => 'ASC',
'orderby' => 'ID'
);
query_posts( $args );
if ( have_posts() ) :
echo "<ol>\n";
while ( have_posts() ) : the_post();
echo '<li>'; the_title();
echo '('; the_ID(); echo ')';
echo "</li>\n";
endwhile;
echo "</ol>\n";
endif;
if ( function_exists( 'wp_pagenavi' ) )
wp_pagenavi();
wp_reset_query();
?>
書き忘れましたが、パーマリンク設定は「投稿名」にして試しました。それから念のため… page-pagination.php はオリジナルのテーマの page.php をコピーしたもので、そこへiso_1さんのコードを付け加えました。
gblsm様
返信・テスト誠にありがとうございます。
条件はほぼ同じだと思うんですが、そちらでは動いているんですね。むむむ。
これで変化があるのか不明なのですが、こちらの状況を追加させていただきます。
・テーマはtwentyfourteenを使用
・子テーマは作らずに親テーマを使用。
・page-templateフォルダの中にあるfull-width.phpをコピーして複数の固定ページを作成。
・固定ページとスラッグは同じです。同様のページが4つあります。ここのページに上記の記述があります。
・single-スラッグ名.phpを作成して個別のシングルページに出力しています。
そのほかに関係あるかわからないのですが
・single-news.phpを作成。
・トップページのサイドバーに3件表示。
・こちらもカスタムフィールドテンプレート、CPTUIを使用しています。
・archive-news.phpに一覧表示させています。
本日もほかの記事等を参考にしていろいろやってみたのですが、やはりうまくページングできませんでした。query_postsを使用しているとうまくページングできないとかなんとか、あったりしたのですが、phpを勉強中でまだよく理解できませんでした。
何か他にお気づきになることがございましたらお願いいたします。
お時間いただいて誠にありがとうございます。
固定ページの中にカスタム投稿を10件ずつページ送りして表示するんですよね。全体の様子はなんとなくつかめましたが、検証には情報が不足しています。
- 固定ページのスラッグ
- カスタム投稿タイプのスラッグ
- full-width.phpをコピーした固定ページテンプレートの、どの位置にコードを追加したか
こういう情報で固定ページをひとつ特定して検証できると思います。
gblsm様
返事が遅くなりまして申し訳ありません。
回答ありがとうございます。
・固定ページのスラッグ
・カスタム投稿タイプのスラッグ
上記はどのカスタム投稿も同じものを使用しています。上記二つが同じだとうまく動かないという記事を見かけたのですが、どちらかを変更してもページングがうまくできませんでした。
・full-width.phpをコピーした固定ページテンプレートの、どの位置にコードを追加したか
もともと記載のあったphpはほぼ削除しています。
固定ページを利用した理由の一つが固定ページ編集から入れた情報を特定の場所にフィードさせたかったからです。なので各ページのコンテンツは
①ヘッダー
②固定ページ編集から入れた情報
③カスタムフィールドテンプレートで入れた情報をループ(ページャー)
④フッター
という作りになっています。
ソースの記述は
<?php
/**
* Template Name: ひな形
*/
get_header(); ?>
<div id="main-content" class="main-content">
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<div><!-- ②固定ページから入れた情報-->
<?php if(have_posts()): while(have_posts()): the_post(); ?>
<?php the_content(); ?>
<?php endwhile; endif; ?>
</div>
<div><!-- ③カスタムフィールドテンプレートのループ-->
<?php
$my_query = new WP_Query(
array(
'post_type' => 'sample',
'posts_per_page' => 10,
'paged'=>$paged
)
);
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<?php if(post_custom('投稿1')): ?>
<a href="<?php the_permalink(); ?>"><?php echo wp_get_attachment_image(get_post_meta($post->ID,"投稿1",true),'medium'); ?></a>
<?php endif; ?>
<p><?php the_title(); ?></p>
<?php if(post_custom('投稿2')): ?>
<p><?php echo post_custom('投稿2'); ?></p>
<?php endif; ?>
<?php endwhile; ?>
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(array('query'=>$my_query)); } ?>
</div>
</div><!-- #content -->
</div><!-- #primary -->
</div><!-- #main-content -->
<?php
get_sidebar();
get_footer();
という記述ですです。
たびたびお手数おかけいたしますがもし何かわかることがございましたらよろしくお願いいたします。
合わせて追加でなのですが、もし分かることがありましたらでご教授いただければと思います。
今回10件取得しているのですが、この取得数をis_mobileで分岐をかけて変更するのは可能でしょうか?
通常の投稿であれば記事があったのですが、カスタムフィールドテンプレートだと該当の記事が見当たらず壁に当たっている状態です。
よろしくお願いいたします。
いますぐ検証できないですが、見たところコードにおかしなところはなさそうです。パーマリンク設定を変更すると404エラーということから、リライトルールがらみの何か問題があるかも。プラグインにやらせている以外に何か設定するコードを加えていますか?
gblsm様
返信・確認ありがとございます。
特にコードの追加等はしていません。functionもそのまま使用しています。
特にコードの追加等はしていません。functionもそのまま使用しています。
そうですか、、、示していただいたコードを入力して試してみたところ、パーマリンク設定が「投稿名」でも「デフォルト」でも正常にページ送りできました。テーマは Twenty Fourteen を使っています。
iso_1さんの環境と私の環境のどこが違うんでしょうね?
大丈夫と思いますが、phpのrewriteモジュールは有効になっていますよね。下記それぞれのURLはどんな文字列ですか?
- パーマリンク設定が投稿名のとき、a) ページ指定なし(1ページ目)のURLと、b) ページャーの「2」のリンク先
- パーマリンク設定がデフォルトのとき、同じく a) と b)
たびたびありがとうございます。
phpのrewriteモジュール、無知でしたので調べてみました。
.htaccessの記述が投稿名の時は以下のような記述がはいりました。デフォルトのに戻すと空になりました。以下のような動きをしていれば有効になっているということでしょうか。無知で申し訳ありません。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /ディレクトリ名/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /ディレクトリ名/index.php [L]
</IfModule>
# END WordPress
固定ページのスラッグとカスタム投稿タイプのスラッグをsampleとしています。
・パーマリンク設定が投稿名のとき(ページングされない)
a) ページ指定なし(1ページ目)
http://ドメイン/フォルダ名/sample/
b) ページャーの「2」のリンク先
http://ドメイン/フォルダ名/sample/page/2/
・パーマリンク設定がデフォルトのとき(ページングされる)
a) ページ指定なし(1ページ目)
http://ドメイン/フォルダ名/?page_id=1
b) ページャーの「2」のリンク先
http://ドメイン/フォルダ名/?page_id=1&paged=2
となっていました。
何かわかることがございましたらよろしくお願いいたします。
404エラーということですが、404.phpが読み込まれていると言うことでしょうか?
それとも、固定ページは読み込まれていて、
その中で、「投稿が見つかりません」となるということでしょうか。
Toro_Unit (Hiroshi Urabe)様
返信ありがとうございます。
404.phpが読み込まれています。
ttp://ドメイン/フォルダ名/sample/ で固定ページ(スラッグがsample)を表示できているなら mod_rewrite は有効になっています。
できればiso_1さんのところで WordPress をクリーンインストールして検証サーバーを作り、固定ページテンプレートをひとつだけ追加して(他のテーマファイルは変更せずに)、現在のサーバーと同様にページングで404.phpが表示されるか確かめてみませんか。
gblsm様
ご提案ありがとうございます。
クライアントが絡んでくる案件なので、すぐにYESと言えないのですが検討させて頂きます。
今週中には明確な回答を出させていただきます。
それまでこちらでも試行錯誤してみます。
長期にわたりありがとうございます。
iso_1さん、とりあえずリライト処理の異常だと想定した場合に、(消去法で残った)原因かもしれないと思うことを挙げてみます。
- functions.php に追加した何かのコード
- 他のテンプレートファイルに記述したコード
- 固定ページとカスタム投稿タイプの各スラッグの重複(WordPressの禁止ワードとの重複)