アーカイブのページ送り
-
度々失礼します。
フォーラムでページ送りの投稿が沢山ありましたが
条件が違うようでしたので投稿させていただきます。下記の内容でアーカイブページを作成していますが
ページ送りができずに困っています。・ページ送りがエラーとなるページ
exsample.com/infomation/page/2/ 等
※infomationは投稿>>カテゴリより作成したスラッグ名
・テンプレート名:archive.php
・パーマリンク:カスタム構造 /%category%/%postname%/
・表示設定:1ページに表示する最大投稿数5件に設定exsample.com/infomation/ は表示
またinfomation配下のカテゴリである
exsample.com/category/infomation/update/
exsample.com/category/infomation/update/page/2/
も表示されます。表示設定で設定を-1にする切り抜けがあるようですが
できれば上記の方法(○件表示)でお願いいたします。また、ページネーションはYuriko.netさんをそのまま使用しています。
<div class="tablenav"><?php global $wp_rewrite; $paginate_base = get_pagenum_link(1); if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) { $paginate_format = ''; $paginate_base = add_query_arg('paged', '%#%'); } else { $paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') . user_trailingslashit('page/%#%/', 'paged');; $paginate_base .= '%_%'; } echo paginate_links( array( 'base' => $paginate_base, 'format' => $paginate_format, 'total' => $wp_query->max_num_pages, 'mid_size' => 5, 'current' => ($paged ? $paged : 1), )); ?></div>
どうぞよろしくお願いいたします。
-
archive.phpの記述がどうなってるかというのがポイントっぽいので
そっちも開示いただけると助かりまーす!>>mypacecreator さん
archive.phpのコードは以下になります。
<?php get_header(); ?> <div id="contents" class="clearfix"> <div id="main"> <!-- if 投稿が存在するかを確認する条件文 *1 --> <?php if (have_posts()) : ?> <!-- 投稿一覧の最初を取得 --> <?php $post = $posts[0]; // Hack. Set $post so that the_date() works. ?> <!-- カテゴリーアーカイブの場合 *2 --> <?php /* If this is a category archive */ if (is_category()) { ?> <!-- カテゴリー名を表示 --> <h2 class="pagetitle"><?php printf(__(' ‘%s’ 投稿一覧', 'kubrick'), single_cat_title('', false)); ?> <?php if ( have_posts() ) : my_result_count(); // ここで表示 while ( have_posts() ) : the_post(); /* do stuff */ endwhile; else : /* Nothing Found */ endif; ?></h2> <!-- タグアーカイブの場合 *2 --> <?php /* If this is a tag archive */ } elseif( is_tag() ) { ?> <!-- タグ名を表示 --> <h2 class="pagetitle"><?php printf(__('Posts Tagged ‘%s’', 'kubrick'), single_tag_title('', false) ); ?> <?php if ( have_posts() ) : my_result_count(); // ここで表示 while ( have_posts() ) : the_post(); /* do stuff */ endwhile; else : /* Nothing Found */ endif; ?></h2> <!-- 日別アーカイブの場合 *2 --> <?php /* If this is a daily archive */ } elseif (is_day()) { ?> <!-- 年月日を表示 --> <h2 class="pagetitle"><?php printf(_c(' %s|Daily archive page', 'kubrick'), get_the_time(__('Y年 F jS', 'kubrick'))); ?> <?php if ( have_posts() ) : my_result_count(); // ここで表示 while ( have_posts() ) : the_post(); /* do stuff */ endwhile; else : /* Nothing Found */ endif; ?></h2> <!-- 月別アーカイブの場合 *2 --> <?php /* If this is a monthly archive */ } elseif (is_month()) { ?> <!-- 年月を表示 --> <h2 class="pagetitle"><?php printf(_c(' %s|Monthly archive page', 'kubrick'), get_the_time(__('Y年 F', 'kubrick'))); ?> <?php if ( have_posts() ) : my_result_count(); // ここで表示 while ( have_posts() ) : the_post(); /* do stuff */ endwhile; else : /* Nothing Found */ endif; ?></h2> <!-- 年別アーカイブの場合 *2 --> <?php /* If this is a yearly archive */ } elseif (is_year()) { ?> <!-- 年を表示 --> <h2 class="pagetitle"><?php printf(_c('Archive for %s|Yearly archive page', 'kubrick'), get_the_time(__('Y', 'kubrick'))); ?> <?php if ( have_posts() ) : my_result_count(); // ここで表示 while ( have_posts() ) : the_post(); /* do stuff */ endwhile; else : /* Nothing Found */ endif; ?></h2> <!-- 著者アーカイブの場合 *2 --> <?php /* If this is an author archive */ } elseif (is_author()) { ?> <!-- 著者を表示 --> <h2 class="pagetitle"><?php _e('Author Archive', 'kubrick'); ?> <?php if ( have_posts() ) : my_result_count(); // ここで表示 while ( have_posts() ) : the_post(); /* do stuff */ endwhile; else : /* Nothing Found */ endif; ?></h2> <!-- 複数ページになるアーカイブの場合 *2 --> <?php /* If this is a paged archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?> <!-- ブログアーカイブを表示 --> <h2 class="pagetitle"><?php _e('Blog Archives', 'kubrick'); ?> <?php if ( have_posts() ) : my_result_count(); // ここで表示 while ( have_posts() ) : the_post(); /* do stuff */ endwhile; else : /* Nothing Found */ endif; ?></h2> <!-- *2 の終了 --> <?php } ?> <!-- 投稿データを取得するループ *3 --> <?php while (have_posts()) : the_post(); ?> <!-- the_ID() は 記事の ID --> <!-- the_permalink() は 記事の URL --> <!-- the_title_() は 記事のタイトル出力 --> <h3 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3> <!-- 年月日を表示 --> <div class="sectionBorder2"><div id="archive_meta"><ul> <li><span class="date post_calendar"><?php the_time('Y年m月d日') ?></span><span class="post_category"><?php foreach((get_the_category()) as $cat) { $cat_id = $cat->cat_ID ; break ; } $category_link = get_category_link( $cat_id ); ?> <a href="<?php echo $category_link; ?>" title="<?php echo $cat->cat_name; ?>"><?php echo $cat->cat_name; ?></a></span> <span class="post_comments"><a href="<?php comments_link(); ?>"><?php comments_number('コメント0件', 'コメント1件', 'コメント%件');?></a></span> <?php if ( is_user_logged_in() == TRUE ) : edit_post_link('編集', '<span class="edit-link">[ ', ' ]</span>');endif ?> </li> </ul></div> <!-- the_content() は 本文を表示する --> <?php the_content() ?></div> <!-- the_tags() は タグを表示する --> <!-- get_the_category_list() は カテゴリを表示する : the_category() の別名? --> <!-- edit_post_link() は 投稿を編集するためのリンクを表示する (ログイン中のみ) --> <!-- comments_popup_link() はコメントをポップアップ表示する --> <!--<div id="date"><?php the_tags(__('Tags:', 'kubrick'), ', ', '<br />'); ?> <?php printf(__('Posted in %s', 'kubrick'), get_the_category_list(', ')); ?> | <?php edit_post_link(__('Edit', 'kubrick'), '', ' | '); ?> <?php comments_popup_link(__('No Comments »', 'kubrick'), __('1 Comment »', 'kubrick'), __('% Comments »', 'kubrick'), '', __('Comments Closed', 'kubrick') ); ?><br /><br /></div>--> <!-- *3 の終わり --> <?php endwhile; ?> <!-- ページナビを表示 --> <div class="tablenav"><?php global $wp_rewrite; $paginate_base = get_pagenum_link(1); if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) { $paginate_format = ''; $paginate_base = add_query_arg('paged', '%#%'); } else { $paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') . user_trailingslashit('page/%#%/', 'paged');; $paginate_base .= '%_%'; } echo paginate_links( array( 'base' => $paginate_base, 'format' => $paginate_format, 'total' => $wp_query->max_num_pages, 'mid_size' => 5, 'current' => ($paged ? $paged : 1), )); ?></div> <!-- *1 が成り立たない場合 --> <?php else : if ( is_category() ) { // If this is a category archive printf("<h2 class='center'>".__("Sorry, but there aren't any posts in the %s category yet.", 'kubrick').'</h2>', single_cat_title('',false)); } else if ( is_date() ) { // If this is a date archive echo('<h2>'.__("Sorry, but there aren't any posts with this date.", 'kubrick').'</h2>'); } else if ( is_author() ) { // If this is a category archive $userdata = get_userdatabylogin(get_query_var('author_name')); printf("<h2 class='center'>".__("Sorry, but there aren't any posts by %s yet.", 'kubrick')."</h2>", $userdata->display_name); } else { echo("<h2 class='center'>".__('No posts found.', 'kubrick').'</h2>'); } get_search_form(); endif; ?> </div> <!-- / メイン --> <?php get_sidebar(); ?> <?php get_footer(); ?>
どうぞよろしくお願いいたします。
あ、お使いのテーマが何なのか、配布されているものなのかどうかを聞いたほうが早かったです。
詳しくはこちらを→問題解決のためのチェックリスト
コードをチラ見しただけなので、まだあまり詳しく読み込んでないんですが
ループ内にあるmy_result_count();
という関数と変数とかバッティングしてたりしないかなーと。
これってWordPressの関数じゃなくて自作だと思うんですが、
そのへんと干渉してたりしないか一応確認してみてください。
(意味がわからない場合は該当部分を一旦削除してください)あと、このテンプレ、
・カテゴリーアーカイブの場合
・タグアーカイブの場合
・年別アーカイブの場合
などといくつも条件分岐してるんですがそれぞれ
category.php, tag.php, date.php など、テンプレート階層に沿って分けたほうがいいような気はします。こういうときのトラブルシューティングの鉄則として、問題の部分以外のif文とか処理を全部省いたシンプルなテーマでどうなるのかというチェックは必須です。
このテーマのままだと記述が多すぎて問題がわかりづらいと思いますので、
if文とか他の独自関数とかいったん消してためしてみましょう。階層に分けるですか。。。
購入したテンプレートですので、こういうものだと思っていました。my_result_count();あたりは私の方で色々参考に付け足したものですが
根本的なところは知識がないので難しいです。
ですので、まずは階層分けに参考になるサイトをまずは探してみます。有償テンプレートの場合ですと、回答者側が同じテーマを入手できないのと、
販売者の独自カスタマイズが入っている場合が多いので、なかなかフォーラムだけだと難しいケースもあります。
どうしても解決しない場合、購入元のサポート(有償サポートの場合もあります)に問い合わせてみるのが得策かと思います。>>mypacecreator さん
ありがとうございます。
お教えいただいた通り、階層を分けコードをすっきりさせました。
その後、my_result_count();の箇所を削除しましたが
やはり、2ページ目の送りが404となってしまいます。有償ですが、ベースはここのコードのようで特に特別な処理はないようです。
function.phpでも抵触するような処理はないと思います。
サポートとに問い合わせる傍ら、もう少し調べてみます。念の為、コードも載せておきます。
<?php get_header(); ?> <div id="contents" class="clearfix"> <div id="main"> <h2 class="pagetitle">カテゴリー:『<?php single_tag_title( ); ?>』 の投稿一覧</h2> <?php while (have_posts()) : the_post(); ?> <h3 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3> <div class="sectionBorder2"><div id="archive_meta"><ul> <li><span class="date post_calendar"><?php the_time('Y年m月d日') ?></span><span class="post_category"><?php the_category(', '); ?></span> <span class="post_tag"><?php the_tags('', ', '); ?></span> <span class="post_comments"><a href="<?php comments_link(); ?>"><?php comments_number('コメント0件', 'コメント1件', 'コメント%件');?></a></span> <?php if ( is_user_logged_in() == TRUE ) : edit_post_link('編集', '<span class="edit-link">[ ', ' ]</span>');endif ?> </li> </ul></div> <?php the_content() ?></div> <?php endwhile; ?> <?php get_template_part('loop-pagenav'); ?> </div> <?php get_sidebar(); ?> <?php get_footer(); ?>
loop-pagenav.phpに、ページナビ用のコードを書いてるってことでいいですね?
ようやく、まるっと挙げてもらったコードを自分の環境にコピペして試してみましたけど、
ページ送りは正常に動作しました。
なので挙げてもらったコード部分の問題じゃないと思います。
ちなみに、直してもらう前の長い方のコードでも問題なく動きました。なので今上がっている情報だけでは手詰まりなかんじです。すみません。
rewriteまわりがちゃんと動いてないとかかな??>>mypacecreatorさん
ありがとうございます。
loop-pagenav.phpは仰る通りです。
上部に記載したYuriko.netさんのページネーションがそのまま入っています。rewrite関係ですが、.htaccessにリダイレクト処理(この処理)を行ったいましたので
その処理もデフォルトに戻し、試しましたが駄目でした。サポートからもパーマリンクと.htaccessの設定をご確認くださいと回答がありましたが
他になにもないようですので、どうしようもない状況です。念の為、.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
もう少し調べます。
解決しましたので、ご報告です。
当初からプラグインでWP No Category Baseを使用していましたが
この件が原因のだったようです。■プラグイン名:WP No Category Base
停止時:カテゴリー一覧でのページ送りエラー
有効化:該当ページ表示テーマ編集時は停止にしていました。
他に思いつくところが無かったので、苦肉の対応でしたが
プラグインは慎重に使わないといけないと思いました。
mypacecreatorさん、ありがとうございました。WP No Category Baseですかーーー。
さすがに、そこまでは推測できませんでしたわ^^;
やはり、デバッグ時はプラグイン全停止、これ大事ですね。
- トピック「アーカイブのページ送り」には新たに返信することはできません。