次のような書き換えルールを使用してCPTを作成しました。
"rewrite" => array( "slug" => "/", "with_front" => false ),
Functions.phpに、次のコードを追加しました。
function sh_parse_request_tricksy( $query ) {
// Only noop the main query
if ( ! $query->is_main_query() )
return;
// Only noop our very specific rewrite rule match
if ( 2 != count( $query->query )
|| ! isset( $query->query['page'] ) )
return;
// 'name' will be set if post permalinks are just post_name,
otherwise the page rule will match
if ( ! empty( $query->query['name'] ) ) {
$query->set( 'post_type', array( 'my_cpt1','my_cpt2' ) );
}
}
add_action( 'pre_get_posts', 'sh_parse_request_tricksy' )
CPT URLのCPTスラッグを削除するためにこれを機能させました。しかし、ここでの問題は、すべてのアーカイブページで404エラーが発生することです。著者のアーカイブページも機能していません。
誰も私がこれを解決するのを助けることができますか?
前もって感謝します。
問題を理解するのに時間がかかりましたが、完了しました。
書き換えスラッグに「/」を渡すことは、この場合のように解決するよりも多くの問題を引き起こし、他のページで404エラーを引き起こすため、お勧めしません。
したがって、それを削除することが最初のステップでした。
次に、「functions.php」に次のコードを記述する必要がありました。
公開された投稿からスラッグを削除するには:
/**
* Remove the slug from published post permalinks. Only affect our CPT though.
*/
function sh_remove_cpt_slug( $post_link, $post, $leavename ) {
if ( in_array( $post->post_type, array( 'my_cpt1' ) )
|| in_array( $post->post_type, array( 'my_cpt2' )
|| 'publish' == $post->post_status )
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
return $post_link;
}
add_filter( 'post_type_link', 'sh_remove_cpt_slug', 10, 3 );
これは、「post」および「page」の投稿タイプのみが投稿タイプのスラッグなしでurlを持つことができると指定しているため、エラーを引き起こします。
WPに、CPTにもスラッグのないURLがあることを教えるために、functions.phpでこれを取得する必要があります。
function sh_parse_request( $query ) {
// Only loop the main query
if ( ! $query->is_main_query() ) {
return;
}
// Only loop our very specific rewrite rule match
if ( 2 != count( $query->query )
|| ! isset( $query->query['page'] ) )
return;
// 'name' will be set if post permalinks are just post_name, otherwise the page rule will match
if ( ! empty( $query->query['name'] ) ) {
$query->set( 'post_type', array( 'my_cpt1','my_cpt2' ) );
}
}
add_action( 'pre_get_posts', 'sh_parse_request' );