サポート » 使い方全般 » カスタム投稿のパーマリンクリライトについて

  • aki

    (@akistar02)



    こちらのページを参考に、カスタム投稿のパーマリンクをカスタマイズしています。
    カスタム投稿タイプ使用時のパーマリンクをPostnameからPost_Idにする(2)

    これ自体は問題なく、faqsというカスタム投稿のパーマリンクを「ドメイン/post_id.html」
    http://www.example.jp/111.html

    という形に変更できました。

    さて、これの応用をしよう!と思っているのですがつまずいておりまして・・

    やりたいことはカスタム投稿「faqs」のパーマリンクを
    http://www.example.jp/%postname%_111.html
    という形式にしたいのです。

    単純に

    
    $newlink = str_replace('%'.$post->post_type.'_id%', $post->ID, $newlink);     $newlink = str_replace('%'.$post->post_type.'_postname%', $post->ID, $newlink);
    

    
    $queryarg = 'post_type=faqs&p=';
    $wp_rewrite->add_rewrite_tag('%faqs_id%', '([^/]+)',$queryarg);
    $wp_rewrite->add_rewrite_tag('%faqs_postname%', '([^/]+)',$queryarg);
    $wp_rewrite->add_permastruct('faqs', '/%faqs_postname%_%faqs_id%.html', false);
    

    としただけでだと、通常のpostが404エラーになってしまい困っています。
    WPの管理画面のパーマリンクは「/%postname%_%post_id%.html」としていて、用はカスタム投稿とpostのパーマリンクの形式をそろえたいのです。

    ちなみにどちらかを「/%postname%~%post_id%.html」などと文字をかえると問題なくできるので、仕様的に同じパーマリンク形式はできないのか?とも思っているのですが、どうなのでしょうか?

    詳しい方がいらっしゃいましたら教えてもらえると助かります。

    よろしくお願いします。

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

    下記のようにするのではどうでしょうか。
    $newlink = str_replace( '%cpt_id%', "{$post->post_type}_{$post->ID}", $newlink );

    ちなみに、Google Search Console のヘルプには「URL にはアンダースコア(_)ではなくハイフン(-)を使用することをおすすめします。」と明記されています。
    https://support.google.com/webmasters/answer/76329?hl=ja&topic=2370420&ctx=topic

    • この返信は1 週、 1 日前に  ishitaka さんが編集しました。

    ちなみにどちらかを「/%postname%~%post_id%.html」などと文字をかえると問題なくできるので、仕様的に同じパーマリンク形式はできないのか?とも思っているのですが、どうなのでしょうか?

    仕様的に同じパーマリンク形式は難しいです。

    $wp_rewrite->add_permastruct('faqs', '/%faqs_postname%_%faqs_id%.html', false);

    は、

    ([^/]+)_([^/]+)\.html という正規表現のパーマリンクにマッチして、クエリを設定します。その結果記事が存在しなければ、404ということになります。

    カスタム投稿タイプのほうが、通常の記事に優先してURLの解決が行われるため、%postname%_%post_id%.html とした場合、通常の記事のURLとは判別されず、faq のものとして解決されるのでこのような事が発生します。

    ([^/]+)_([^/]+)\.html の正規表現と競合しない形であれば表示は可能なので、文字を変えると表示されます。

    また、余談ですが、 %faqs_id% は 数字のみが入ると思われるので、

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

    とした方がよいかとは思います。

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