カスタム投稿タイプのスラッグ/ページスラッグの競合-ページの保存時に予約スラッグの使用を禁止しますか?


13

テーマにカスタム投稿タイプのポートフォリオ(スラッグポートフォリオ)があり、1つを除いてすべて正常に機能しています。たとえば、example.com / portfolioなどのポートフォリオのスラッグを含むページを作成する場合、テーマは、エディターで作成されたページではなく、カスタム投稿タイプのアーカイブページを使用したいと考えます。

ページが保存されたときにスラッグポートフォリオを何らかの方法で「予約」して、使用されないように、おそらくポートフォリオページに名前を変更することはできますか?

私のプロジェクトでは、このチュートリアルで概説した方法を使用していますが、ここで言及している競合は次のとおりです。

「コードにパッチを適用しなければならないことに加えて、あなたのページスラッグをカスタム投稿タイプスラッグと同じものと呼ぶことはできないという点で、もう一つの落とし穴があります。ページのタイトルは、ページのスラッグが何か異なる限り、カスタム投稿タイプのスラッグと同じ名前です。」- http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

アドバイスをありがとう!


私が見る1つのオプションは、これをregister_post_type()initから削除することです: 'rewrite' => array( 'slug' => 'portfolio'、 'with_front' => true)、そして単に 'rewrite' => falseを設定し、 justい「単一」のポートフォリオアイテムと一緒に暮らすだけです。
hhins

私も答えを知りたいので、あなたの質問に投票してください!私はカスタムポストを数回使用しましたが、これに気付くことはありませんでした。今、あなたの質問を読んだ後、試しました。あなたは正しい、WordPressはここで混乱します!
ラトウィックガンガード

回答:


13

以下の2つのフィルターを使用すると、WordPressがスラッグをチェックし、wp-includes / post.phpファイルの関数wp_unique_post_slug()にあるときにフックできます。

2つのフィルターがあります。1つは階層的な投稿用で、もう1つは非階層的な投稿用です。階層フィルターは投稿の親のIDを提供するため、$ post_parentが0の場合、これは「ベース」投稿であることがわかります。

特定の投稿タイプをロジックに追加する場合、フィルターは$ post_typeも渡します。

「true」を返すことで、このスラグが悪いことをWordPressに伝えているので、WordPressが接尾辞を追加します。

add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'portfolio_is_bad_hierarchical_slug', 10, 4 );
function portfolio_is_bad_hierarchical_slug( $is_bad_hierarchical_slug, $slug, $post_type, $post_parent ) {
    if ( !$post_parent && $slug == 'portfolio' )
        return true;
    return $is_bad_hierarchical_slug;
}

add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'portfolio_is_bad_flat_slug', 10, 3 );
function portfolio_is_bad_flat_slug( $is_bad_flat_slug, $slug, $post_type ) {
    if ( $slug == 'portfolio' )
        return true;
    return $is_bad_flat_slug;
}

何らかの理由で、私はまだ同じ問題に直面しています
タン-007

1

「ポートフォリオ」のスラッグを含むページを作成し、「プライベート」にします。それ以降の使用からナメクジを予約するとき、それは公衆から隠されます。


1

ページネーションの問題を調査するときに、まさにこの問題に出くわしました。ニュースホームページ(スラッグ「ニュース」)があり、ページネーションが失敗していました... / news / page / 2 /にアクセスしようとすると、常に「404-Not Found」が発生しました。

問題は、Newsカスタムタイプにもスラッグ「ニュース」が与えられていたことが判明しました。後者を変更することにより(たとえば「news_archive」に)、問題は修正されました。これにより、元のニュースURL参照は変更されませんでした。ニュースホームページのスラッグの変更も機能しましたが、すべてのURLに変更されたスラッグが組み込まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.