web-dev-qa-db-ja.com

カスタム投稿タイプのスラッグ/ページスラッグの競合 - ページの保存時に予約スラッグが使用されないようにしますか?

私のテーマにはカスタムポストタイプのポートフォリオ(スラッグポートフォリオ)があり、1つを除いてすべてがうまく機能しています。例:example.com/portfolioのようにポートフォリオのスラッグを含んだページを作成するとき、テーマは私がエディターで作成したページではなく、カスタム投稿タイプのアーカイブページを使用したいと思うものです。

ページが保存されたときにスラッグポートフォリオをどうにかして「予約」して、使用されないようにすることはできますか。

私のプロジェクトはこのチュートリアルで概説されている方法を使用しています、これが私が言及している衝突です:

「ページのスラッグをカスタム投稿タイプのスラッグと同じものにすることはできません。ただし、カスタム投稿タイプのスラッグを予約済みキーワードとして使用することもできます。あなたのページのタイトルはあなたのカスタム投稿タイプのナメクジと同じ名前あなたのページのナメクジが何か違っている限り。 - http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/ /

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

12
hhins

以下の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;
}
13
Rachel Carden

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

1
Max Yudin

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

問題は、私たちのNewsカスタムタイプにもスラッグ "news"が与えられていたことです。後者を変更することで(例えば "news_archive"に)、問題は修正されました。これにより、元のニュースURLの参照は変更されません。ニュースホームページスラッグの変更もうまくいきましたが、それからすべてのURLは変更されたスラッグを組み込んでいました。

1
Ross