wordpress カスタム投稿で 2ページ目以降が404になってしまう

公開日: : WordPress, wordpress テンプレート

wordpress カスタム投稿で 2ページ目以降が404

wordpress のカスタム投稿で、ニュースのページを作っていました。

ニュース一覧で、ページ遷移 get_the_posts_pagination を使おうと思ったら2ページから404エラーになりました。

  • パーマリンク設定は、カスタム構造「/%category%/%postname%/」です。
  • ニュース一覧は、固定ページでテンプレートを指定。
  • スラッグ名(=パーマリンク)は「news」になっている状態。

カスタム投稿はこんな感じで指定していました。
functions.php

//////////////////////////////////////////////////////////
//ニュースカスタム投稿
function custom_post_type_news() {
	$labels = array(
		'name' => _x('News','post type general name'),
		'singular_name' => _x('News', 'post type singular name'),
		'add_new' => _x('新規News', 'book'),
		'add_new_item' => __('新しいNewsを追加'),
		'edit_item' => __('Newsを編集'),
		'new_item' => __('新しいNews'),
		'view_item' => __('Newsを表示'),
		'search_items' => __('Newsを探す'),
		'not_found' =>  __('Newsありません'),
		'not_found_in_trash' => __('ゴミ箱にNewsはありません'),
		'parent_item_colon' => ''
	);
	$args = array(
		'labels' => $labels,
		'public' => true,
		'show_ui' => true,
		'query_var' => true,
		'hierarchical' => false,
		'menu_position' => 4,
		'supports' => array('title','editor'),
	);
	//カスタム投稿タイプを登録
	register_post_type('news', $args);
}
add_action('init', 'custom_post_type_news');

どこが問題かというと、27行目の post_type を登録しているところです。

これだと、一覧と個別ページが同じ「news」というスラッグ名になってしまい、リダイレクトが不具合を起こすということです。

ニュース一覧 1ページ目 /news/
ニュース一覧 2ページ目 /news/page/2/
ニュース個別ページ /news/個別ページスラッグ/

やり方1:一覧と個別ページのスラッグを違うものにする

カスタム投稿の27行目の post_type を複数形に変更してあげます。

register_post_type('news', $args);
↓変更
register_post_type('newss', $args);

こうすることによって、

ニュース一覧 1ページ目 /news/
ニュース一覧 2ページ目 /news/page/2/
ニュース個別ページ /newss/個別ページスラッグ/

になり、無事に404にならずにページ遷移することが出来ました。

でも「newss」ってなんか嫌だな・・・

という場合、一覧を表示する個別ページのスラッグを「newstop」とか「newslist」にすれば大丈夫でした。

ニュース一覧 1ページ目 /newslist/
ニュース一覧 2ページ目 /newslist/page/2/
ニュース個別ページ /news/個別ページスラッグ/

でもやっぱり、「newstop」も「newslist」も嫌だなって思いました・・・

やり方2:function.php でリダイレクトを制御する

一覧と個別ページのスラッグを同じにしたくなったので、以下のように paged という、GETをつけるようなやり方にしました。

ニュース一覧 1ページ目 /news/
ニュース一覧 2ページ目 /news/?paged=2
ニュース個別ページ /news/個別ページスラッグ/

その場合は、function.php でページ遷移時だけ、リダイレクト阻止するというものを入れます。
function.php

// ページ遷移時のリダイレクトを阻止する
add_filter('redirect_canonical','my_disable_redirect_canonical');
function my_disable_redirect_canonical( $redirect_url ) {
if ( is_single() ){
	//リクエストURLに「/page/」があれば、リダイレクトしない
	preg_match('/\/paged\//', $redirect_url, $matches);
	if ($matches){
		$redirect_url = false;
		return $redirect_url;
	}
}
}

WP_Query でのデータの取得は以下のような感じ。

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
$args = array(
    'post_type' => 'news',
    'posts_per_page' => 10,
    'paged' => $paged,
);
$the_query = new WP_Query( $args );

ページ遷移の表示が以下のようになっているとします。

$GLOBALS['wp_query']->max_num_pages = $the_query->max_num_pages;
$pagination = get_the_posts_pagination( array(
	'prev_text' => '前へ',
	'next_text' => '次へ',
	));
echo $pagination;

↓ 変更
そこにbaseとformatを以下のように足します。

$GLOBALS['wp_query']->max_num_pages = $the_query->max_num_pages;
$pagination = get_the_posts_pagination( array(
	'base'               => '?paged=%#%',
	'format'             => '?paged=%#%',
	'prev_text' => '前へ',
	'next_text' => '次へ',
	));
echo $pagination;

こんな感じで出来ました。

関連記事

Wordpress 自作フォーム (チェックボックスなど)

WordPress 自作フォーム その3(チェックボックスなど)

以前、WordPress 自作フォーム その1の記事で Wordpress で自作フォームを作ってみ

記事を読む

ロリポップでWordPressのPHPバージョンを5から7にする

ロリポップでWordPressのPHPバージョン7.1に変更後「サイトに技術的な問題が発生しています。」

WordPress.org の推奨環境 PHP7以上 MySQL5.6以上またはMaria

記事を読む

WordPress カレンダー カスタマイズ

WordPress カレンダー カスタマイズ

WordPressでカレンダーの表示部分をいじってみようかと思います。 どうやら、カレンダー関

記事を読む

Wordpress 自作フォーム 2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)

WordPress 自作フォーム その2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)

前回(WordPress 自作フォーム 1)のつづきです。 今回は細かいところや注意点とエラーなど

記事を読む

WordPress プラグイン「 Search Everything 」

WordPressでカテゴリー名も検索にひっかけるプラグイン「Search Everything」

WordPressでカテゴリーも検索にひっかけるプラグイン「Search Everything 8.

記事を読む

WordPress Twenty Seventeen function.php

WordPress twentyseventeen の function.php を見る – その2

前回の続きです。 次のスターターコンテンツは、今回のシンプルテンプレートには不要ですが、よくわ

記事を読む

WordPress Warning エラー

WordPress フォルダー・ファイル系の関数 is_dir や opendir や exif_imagetype で Warning エラー

Wordpress の管理画面でフォルダーの中身を読み込む関数 opendir でエラー Word

記事を読む

WordPress レスポンシブ テンプレート

WordPress レスポンシブ テンプレート の メニューやブログの設置

前回の 「WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダ

記事を読む

Wordpress VR Test

WordPress で VR させて、360°のパノラマ画像を表示する

WordPress.com内ショートコードで VR させる WordPress.com内で、VR(

記事を読む

WordPress の PHP をちょっと見てみよう Ⅲ

WordPress の PHP をちょっと見てみよう Ⅲ

前記事の続きで、wp-settings.php の91行目あたりから見ていきます。 次は、wp

記事を読む

WordPress wordpress テンプレート

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

wordpress カスタム投稿を一覧(ループ)で表示する
wordpress カスタム投稿を一覧(ループ)で表示する

カスタム投稿を一覧で表示する方法がいろいろあります。 query_p

wordpress カスタム投稿で 2ページ目以降が404
wordpress カスタム投稿で 2ページ目以降が404になってしまう

wordpress のカスタム投稿で、ニュースのページを作っていました

ロリポップでWordPressのPHPバージョンを5から7にする
ロリポップでWordPressのPHPバージョン7.1に変更後「サイトに技術的な問題が発生しています。」

WordPress.org の推奨環境 PHP7以上 MyS

WEBページをアプリっぽくする(サービスワーカーでホーム画面に追加)
WEBページをアプリっぽくする(サービスワーカーでホーム画面に追加)

前回作ったお絵かきページを、簡単にアプリっぽくしようと思います。 具

canvas タグでお絵描き(レスポンシブ)
canvas タグでお絵描き(レスポンシブ)

簡単なメモ張みたいなものが欲しいので作ってみました。 canvas

→もっと見る

    • 201909
      Mon Tue Wed Thu Fri Sat Sun
      1
      2345678
      9101112131415
      16171819202122
      23242526272829
      30
    にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
    にほんブログ村 FC2 Blog Ranking
    PAGE TOP ↑