这不是真正的WP_Rewrite
问题,除非您想在URL中包含帖子ID。我认为解决这个问题的最好方法是,正如你所建议的那样get_posts()
使用slug进行查询,并从中更改变量。
当然你不必每次都这么做init
, 只有当你在clubs/[club_slug]/news/
页因此,首先创建一个重写规则,该规则将设置一个可以检查的特殊变量:
add_action( \'init\', \'wpse8421_init\' );
function wpse8421_init()
{
// Assuming `wpse8421_club` is the name of your custom post type
add_rewrite_rule( \'clubs/([^/]+)/news/?$\', \'index.php?wpse8421_club=$matches[1]&wpse8421_related_news=true\', \'top\' );
}
将此查询变量添加到公共查询变量中,以便您可以检查它:
add_filter( \'query_vars\', \'wpse8421_query_vars\' );
function wpse8421_query_vars( $query_vars )
{
$query_vars[] = \'wpse8421_related_news\';
return $query_vars;
}
然后检查此额外变量,如果已设置,请修改查询。
add_filter( \'request\', \'wspe8421_request\' );
function wpse8421_request( $query_vars )
{
if ( array_key_exists( \'wpse8421_related_news\', $query_vars ) ) {
$club_posts = get_posts( array(
\'post_type\' => \'wpse8421_club\',
\'name\' => $query_vars[\'wpse8421_club\'],
) );
if ( $club_posts ) {
$query_vars[\'connected\'] = $club_posts[0]->ID;
unset( $query_vars[\'wpse8421_club\'] );
}
}
return $query_vars;
}