サポート » 使い方全般 » カスタム投稿のみ404エラーが効かない。

  • 解決済 cotalow

    (@cotalow)


    カスタム投稿タイプの記事階層のみ404エラー(404.php)が効かず、
    なぜかindex.phpが表示されてしまい困っております。

    その他のページはすべて上手く404エラー(404.php)が返されます。
    どのような原因が考えられますでしょうか?

    ご教示いただけますと幸いです。

    【現象例】
    (例1)
    http://www.サイトURL/適当な文字列
    →正常に404エラー表示

    (例2)
    http://www.サイトURL/project/記事ID/適当な文字列
    →正常に404エラー表示

    (例3)
    http://www.サイトURL/project/記事ID
    →正常に記事IDのページが表示される(single-projects.php)。

    (例4)
    http://www.サイトURL/project/記事ID適当な文字列
    →404エラー作動せず記事IDのページが表示される。

    (例5)
    http://www.サイトURL/project/適当な文字列
    →404エラー作動せずなぜかindex.phpが読み込まれる

    functions.phpに下記のようなソースコードを記入しカスタム投稿を作っています。
    ↓↓
    —————————-
    // カスタム投稿()
    function codex_custom_init() {
    $labels = array(
    ‘name’ => ‘projects’,
    ‘singular_name’ => ‘projects’,
    ‘add_new’ => ‘Add New’,
    ‘add_new_item’ => ‘Add New projects’,
    ‘edit_item’ => ‘Edit projects’,
    ‘new_item’ => ‘New projects’,
    ‘all_items’ => ‘All projects’,
    ‘view_item’ => ‘View projects’,
    ‘search_items’ => ‘Search projects’,
    ‘not_found’ => ‘No projects found’,
    ‘not_found_in_trash’ => ‘No projects found in Trash’,
    ‘parent_item_colon’ => ”,
    ‘menu_name’ => ‘projects’
    );

    $args = array(
    ‘label’ => “事例紹介”,
    ‘public’ => true,
    ‘publicly_queryable’ => true,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,
    ‘query_var’ => true,
    ‘rewrite’ => array( ‘slug’ => ‘projects’ ),
    ‘capability_type’ => ‘post’,
    ‘has_archive’ => false,
    ‘hierarchical’ => false,
    ‘menu_position’ => null,
    // フィールド削除’supports’ => array(‘title’,’editor’,’author’,’thumbnail’,’excerpt’,’comments’)
    ‘supports’ => array(‘title’,’editor’,’thumbnail’,’custom-fields’,’excerpt’,’author’,’trackbacks’,’comments’,’revisions’,’page-attributes’)

    );

    $attachment_id = get_field(‘projects_gallery’);
    $size = “full”;
    $image = wp_get_attachment_image_src( $attachment_id, $size );
    $attachment = get_post( get_field(‘projects_gallery’) );
    $alt = get_post_meta($attachment->ID, ‘_wp_attachment_image_alt’, true);
    $image_title = $attachment->post_title;

    register_post_type( ‘projects’, $args );

    }
    add_action( ‘init’, ‘codex_custom_init’ );

    //カスタム投稿(projects)のパーマリンク設定
    add_action(‘init’, ‘myposttype_rewrite’);
    function myposttype_rewrite() {
    global $wp_rewrite;
    $queryarg = ‘post_type=projects&p=’;
    $wp_rewrite->add_rewrite_tag(‘%projects_id%’, ‘([^/]+)’,$queryarg);
    $wp_rewrite->add_permastruct(‘projects’,’/project/%projects_id%’, false);
    }
    add_filter(‘post_type_link’, ‘myposttype_permalink’, 1, 3);
    function myposttype_permalink($post_link, $id = 0, $leavename) {
    global $wp_rewrite;
    $post = &get_post($id);
    if ( is_wp_error( $post ))
    return $post;
    $newlink = $wp_rewrite->get_extra_permastruct($post->post_type);
    $newlink = str_replace(‘%’.$post->post_type.’_id%’, $post->ID, $newlink);
    $newlink = home_url(user_trailingslashit($newlink));
    return $newlink;
    }
    —————————-

    • このトピックは cotalowが2 週間前に変更しました。
    • このトピックは cotalowが2 週間前に変更しました。
    • このトピックは cotalowが2 週間前に変更しました。
    • このトピックは cotalowが2 週間前に変更しました。
    • このトピックは cotalowが2 週間前に変更しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • msio

    (@msio)

    projectという単位での読み込みに対して記事のパラメータ以降を与えることで表示のようなので
    projectの引数による記事読み出しについてページがなくともprojectが存在しているので
    記事のないprojectが返っている結果indexの読み出し止まりになっているのではないでしょうか。
    記事がない場合や記事の記載の法則性に則っていない場合は
    projectが404を読み出すように設定するか
    対象がない場合はproject自体がemptyを返すように設計をする必要があるのではないでしょうか。
    この状態をそのまま404判別に基本機能だけで調整するのはむつかしいことかと思うのですが
    なにかよい方法がありそうな気もするのでなにか思いついたら追って申し上げます。

    cotalow

    (@cotalow)

    msioさま

    誠にありがとうございます。
    確かに仰る通りの原因かもしれません。
    調べながら解決策を引き続き探ってみようと思います。

    >なにかよい方法がありそうな気もするのでなにか思いついたら追って申し上げます。

    ありがとうございます。
    もし何か良い解決策がありましたら、おしえていただけると非常に助かります!
    何卒よろしくお願い申し上げます。

    @cotalow

    $wp_rewrite->add_rewrite_tag( '%projects_id%',
    '([^/]+)', $queryarg );

    これはスラッシュ以外の全ての文字列にマッチするので、

    http://www.サイトURL/project/記事ID適当な文字列

    の場合、p=記事ID適当な文字列 となりますが、内部的に数字にキャストされるので、404 にならないのだと思います。

    $wp_rewrite->add_rewrite_tag( '%projects_id%', '([0-9]+)', $queryarg );

    としてみるとどうでしょう。

    @toro_unit さま

    誠にありがとうございます!!

    教えて頂いた方法を試した所、完璧に治りました!!

    index.php内で、if分でカスタム投稿専用の404テンプレートを読ませるなどの方法を試しておりましたが、

    http://www.サイトURL/project/記事ID適当な文字列

    が解決できず..悶々としている所でした。

    ありがとうございます!!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。