我正在努力找到以下问题的解决方案。
主查询应仅检查页面和所选自定义帖子类型,以获取所选帖子类型名称。
地址。com/flower post name[自定义帖子类型]
地址。com/flower-page-name[页面]正如您所看到的,我的自定义帖子类型使用此解决方案将slug从permalink中删除
vip.wordpress.com.
我遇到的问题是,查询还检查是否有具有相同slug的附件。因此,尽管帖子和页面都有独特的slug,但仍然与我的媒体库存在冲突。
地址。com/post名称[附件]->显示地址。应显示com/post name[自定义帖子类型]->是否有方法从主查询中排除附件?
这是我正在使用的代码:
function vipx_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( \'flower\', \'page\' ) );
} add_action( \'pre_get_posts\', \'vipx_parse_request_tricksy\' );
据我所知,正在重写查询,以检查是否有自定义的帖子类型“flower”,然后是带有特定slug的“page”。
$query->set( \'post_type\', array( \'flower\', \'page\', \'attachment\' ) );
我尝试了这种方法,但没有成功。Wordpress仍在检查slug是否首先对应于附件,并且显示的页面是否是媒体页面,而不是自定义帖子类型页面。
最合适的回答,由SO网友:Shazzad 整理而成
而不是使用pre_get_posts
胡克,你可以尝试一种更好的方法parse_request
钩代码-
add_action( \'parse_request\', \'my_cpt_parse_request\', 11, 2 );
function my_cpt_parse_request( $wp )
{
if( isset($wp->request) && !is_admin() )
{
$requests = explode(\'/\', $wp->request);
$request_amount = count($requests);
$post_name = array_shift( $requests );
// if an attachment has been queried under this or another post type, skip checking
if( $request_amount > 1 && !in_array( $requests[\'0\'], array(\'feed\', \'page\') ) )
return;
global $wpdb;
$post = $wpdb->get_row( $wpdb->prepare(
"SELECT * FROM $wpdb->posts WHERE post_status=\'publish\' AND post_type=%s AND post_name=%s",
\'flower\',
$post_name
));
if( $post && isset($post->ID) ){
$wp->set_query_var( \'flower\', $post->post_name );
$wp->set_query_var( \'post_type\', \'flower\' );
$wp->set_query_var( \'name\', $post->post_name );
$wp->set_query_var( \'attachment\', false );
$wp->set_query_var( \'error\', false );
return;
}
}
}
删除
pre_get_post hook
使用这个,但保持
post_type_link
按原样钩住。