サポート » 使い方全般 » カスタム投稿タイプを「ページ」として使用する際の動作について

  • 解決済 mokeco

    (@mokeco)


    お世話になります。
    カスタム投稿タイプを「ページ」として使用する際の挙動について質問させていただきます。
    hierarchical を true にすると編集画面にページ属性が表示され、記事同士の親子関係を作ることができますが、実際に子ページを表示させてみると 404 エラーとなります。
    管理画面では希望する階層構造のURLが表示されているが、閲覧するときのURLは子ページにしたいpostが親と同じ階層にある状態です。

    カスタム投稿タイプの機能がWordPressに登場してから、ずっとこの404エラーはあったと思います。以前試したときは下層ページを作ることもなかったので特に気にしなかったのですが、
    最近「『ページ風』カスタム投稿タイプのなかで階層を持たせたい」という状況になり、調べてもカスタマイズの方法がわかりませんでした。

    カスタム投稿タイプの「投稿風」の場合の階層を持たせる方法はあるようですが、「ページ」として使いたいたいと思っています。

    最新のデフォルトテーマ「Twenty Seventeen」で試しています。
    現状はこれが「仕様」と捉えるべきでしょうか。
    それとも、何かしらの方法で制御できるのでしょうか。

    要約すると、以下のとおりとなります。
    希望としては
    http://example.com/%5BポストタイプAのslug%5D/%5BポストタイプAの中の親ページ%5D/%5BポストタイプAの中の子ページ%5D/
    という構造にしたいのですが、これを閲覧するためには
    http://example.com/%5Bポストタイプslug%5D//%5BポストタイプAの中の子ページ%5D/
    にアクセスしなければならず、これを親ページが入るURLに修正したいということです。

    どうぞご教示いただければ幸いです。
    よろしくお願いいたします。

    【各種バージョン等】
    WP4.7
    PHP 5.6.19(7系は使用しているプラグインがエラーになるためやむを得ず)
    MySQL 5.6
    サーバ:CPI シェアードプランACE01(ACE01_2015)

    ※PHP 5系が影響してくるのはプラグイン「Hi Counter Max」およびガラケー用テーマ「garake」です。

    携帯電話(ガラケー)用テーマ

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは、

    hierarchical を true にすると編集画面にページ属性が表示され、記事同士の親子関係を作ることができますが、実際に子ページを表示させてみると 404 エラーとなります。
    管理画面では希望する階層構造のURLが表示されているが、閲覧するときのURLは子ページにしたいpostが親と同じ階層にある状態です。

    興味があったので、自分のテーマで試してみたのですが、特に問題はなさそうに感じます。

    
    http://www.example.com/wp/archives/movies/テスト/テスト子/test子2
    

    で表示できています。

    気になるのは、Page Attributes の設定が行われているかどうかぐらいです。

    もしよかったら、こちらでテストしたテーマでテストしてみてください。(テーマでのカスタム投稿のサポートを始めているので)

    raindrops

    インストールしたら、カスタマイザーの 外観 / ウィジェット(カスタマイザーを開いてすぐにあるウィジェットとは異なる項目です)にある、3項目を 「はい」に設定してみてください。

    最近の投稿、カテゴリー、アーカイブウィジェットが、カスタム投稿を開いている場合、カスタム投稿のタクソノミ、アーカイブ、最近の投稿を表示するようになります。

    おかしなところがあったら教えていただけるとうれしいです。

    nobitaさん、返信ありがとうございます。
    support の項目に page-attributes も設定してあるのですが、希望通りに動作しません。

    また、提示いただいたテーマを試してみましたが、
    カスタム投稿タイプの親ページでは
    「最近の◯◯ページ」「◯◯ページ:アーカイブ」が表示されているのは確認しました。
    ただ子ページに行くと、通常の表示に戻り「エラー:ファイルが見つかりませんでした。」が表示されます。
    また、カスタム投稿タイプのアーカイブページも404になりました。

    私の書き方が悪いのか…環境が悪いのか…
    ローカルテスト環境(MAMP / PHP:5.5.18)でも同じ状況になっており、困っています。
    お手数ですが、よろしければ私のコードを検証していただけますでしょうか。
    いろいろいじった後なので、変更しなくて良いところを変更しているかもしれませんが…。

    カスタム投稿タイプの生成は Custom Post Type UI を使用していましたが、
    この現象の確認のために Custom Post Type Generator で書き出し、プラグイン化(functions.php ではない)しています。

    add_action( 'init', 'cptg_custom_post_types' );
    function cptg_custom_post_types()
    {
    	$labels = array(
    		'name' => 'hogeページ',
    		'singular_name' => 'hogeページ',
    		'menu_name' => 'hogeページ',
    		'name_admin_bar' => 'hogeページ',
    		'all_items' => '投稿一覧',
    		'add_new' => '新規追加',
    		'add_new_item' => '新規投稿を追加',
    		'edit_item' => '投稿の編集',
    		'new_item' => '新規投稿',
    		'view_item' => '投稿を表示',
    		'search_items' => '投稿を検索',
    		'not_found' =>  '投稿が見つかりませんでした。',
    		'not_found_in_trash' => 'ゴミ箱内に投稿が見つかりませんでした。',
    		'parent_item_colon' => '親投稿',
    	);
    	$args = array(
      		'labels' => $labels,
        	'public' => true,
        	'publicly_queryable' => true,
        	'show_ui' => true,
        	'query_var' => true,
    		'rewrite' => array('slug' =>'hoge','with_front' => true ),
        	'capability_type' => 'post',
        	'hierarchical' => true,
        	'menu_position' => 4,
    		'supports' => array( 'title','editor','thumbnail','page-attributes' ),
        	'has_archive' => true,
    	);
    	register_post_type( 'hoge', $args );
    add_action( 'after_switch_theme', 'cptg_rewrite_flush' );
    
    function cptg_rewrite_flush()
    {
    	flush_rewrite_rules();
    }

    以上、お手数をおかけしますが、よろしくお願いいたします。

    • この返信は2 年、 9 ヶ月前に  mokeco さんが編集しました。理由: コードの表記をわかりやすくした
    
    'capability_type' => 'post',
    

    のところが

    
    'capability_type' => 'page',
    

    じゃないですか?

    ‘capability_type’ => ‘post’,
    のところが

    ‘capability_type’ => ‘page’,
    じゃないですか?

    ここは page で合っているのですね、ありがとうございます。
    じつは、いろいろ試していてここも変えたものの、効果がなかったので戻したのです。
    そして、今変更してみましたがやはり変化はありませんでした。

    念のため書いておきますが、パーマリンクの空更新は行っています。

    • この返信は2 年、 9 ヶ月前に  mokeco さんが編集しました。

    念のためですが、コードを変更してから、パーマリンクの保存ボタンを 押しましたか?今のコードだと、flushするのは、テーマ変更のタイミングでしか行われないので

    書いてくださっていましたね、何でしょうかね

    最初、コードを実行した時に なんかおかしかったので メニューの場所とか、、、

    コードクリーニングしてから、やってみたんですけど、こちらでは 動いている風なんですが、、、、

    • この返信は2 年、 9 ヶ月前に  nobita さんが編集しました。
    • この返信は2 年、 9 ヶ月前に  nobita さんが編集しました。

    ありがとうございます。
    「コードクリーニング」という言葉がヒントになりました。
    コードの書かれている順番を見直し、
    処理の流れを考慮した(だいぶ当てずっぽうですが)書き方に変えてみました。
    上のレスで書いたものから、次のように変更したら、希望する動作になったようです。

    add_action( 'init', 'cptg_custom_post_types' );
    function cptg_custom_post_types()
    {
    	$labels = array(
    		'name' => 'hogeページ',
    		'singular_name' => 'hogeページ',
    		'menu_name' => 'hogeページ',
    		'name_admin_bar' => 'hogeページ',
    		'all_items' => '投稿一覧',
    		'add_new' => '新規追加',
    		'add_new_item' => '新規投稿を追加',
    		'edit_item' => '投稿の編集',
    		'new_item' => '新規投稿',
    		'view_item' => '投稿を表示',
    		'search_items' => '投稿を検索',
    		'not_found' =>  '投稿が見つかりませんでした。',
    		'not_found_in_trash' => 'ゴミ箱内に投稿が見つかりませんでした。',
    		'parent_item_colon' => '親投稿',
    	);
    	$args = array(
            'labels' => $labels,
            'public' => true,
            'publicly_queryable' => true,
            'capability_type' => 'page',
            'rewrite' => array('slug' =>'hoge','with_front' => true ),
            'show_ui' => true,
            'hierarchical' => true,
            'query_var' => false,
            'has_archive' => true,
            'menu_position' => 4,
            'supports' => array( 'title','editor','thumbnail','page-attributes' ),
    	);
    	register_post_type( 'hoge', $args );

    助かりました。ありがとうございます。
    もう少し様子を見てみて、問題なさそうならこのスレッドを「解決済み」にしようと思います。
    まだ問題が出てくるようであれば、また相談させてください。
    よろしくお願いいたします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「カスタム投稿タイプを「ページ」として使用する際の動作について」には新たに返信することはできません。