我开发了一个插件,其中包括一个自定义帖子类型,该类型在WP Admin中显示为列表。
插件中定义了不同级别的用户,还有一些其他选项可以确定哪些帖子显示给当前登录的用户。此外,帖子可能属于自定义分类法。在这种情况下,进一步的条件应该确定当前用户看到的帖子。例如,也许当前用户应该能够看到所有使用部门分类法中术语支持的帖子。
我正迷上pre_get_posts
为了构建查询,确保当前用户只看到他们应该看到的帖子。管理员看到所有,其他人只看到分配给他们的帖子。对于标准元查询,这一切都可以正常工作。
我对分类法有意见。我理解,除非我自己构建了一个数据库查询,否则不可能创建一个WP查询来查询存在元键并等于一个值的帖子,或者帖子有一个特定的分类术语与之关联。
确保数据库查询最小化的最佳方法是什么?
我已经在下面发布了我当前的查询。我正在寻找关于要使用的最佳挂钩和要使用的查询的指导,以实现我所需要的。
function kbs_restrict_agent_ticket_view( $query ) {
if ( ! is_admin() || \'kbs_ticket\' != $query->get( \'post_type\' ) ) {
return;
}
$admin_agents = kbs_get_option( \'admin_agents\' );
if ( empty( $admin_agents ) && current_user_can( \'administrator\' ) ) {
$query->set( \'p\', \'99999999\' );
return;
}
// If user is admin and admins are agents, they see all.
if ( current_user_can( \'manage_ticket_settings\' ) ) {
return;
}
if ( kbs_get_option( \'restrict_agent_view\', false ) ) {
$agent_id = get_current_user_id();
$meta_query = array(
\'relation\' => \'OR\',
array(
\'key\' => \'_kbs_ticket_agent_id\',
\'value\' => $agent_id,
\'type\' => \'NUMERIC\'
),
array(
\'key\' => \'_kbs_ticket_agent_id\',
\'value\' => \'\'
),
array(
\'key\' => \'_kbs_ticket_agent_id\',
\'value\' => \'anything\',
\'compare\' => \'NOT EXISTS\'
)
);
if ( kbs_multiple_agents() ) {
$meta_query[] = array(
\'key\' => \'_kbs_ticket_agents\',
\'value\' => sprintf( \':%d;\', $agent_id ),
\'compare\' => \'LIKE\'
);
}
$query->set( \'meta_query\', $meta_query );
}
} // kbs_restrict_agent_ticket_view
add_action( \'pre_get_posts\', \'kbs_restrict_agent_ticket_view\' );
我现在正在有效地寻找或发布术语(“支持”、“部门”)