我是wordpress开发的初学者。。。
我有一个用户角色“所有者”。那些拥有“机器”(自定义帖子类型)我希望管理员后端的所有者只看到自己的机器(所有者是作者的那些机器)和同一公司拥有的机器(机器的分类)。公司是用户的元字段,它应该与帖子的分类相匹配。
对于条件“相同的公司”,我将查询更改为仅过滤具有给定公司分类法的帖子(请参见“abc”)。
我如何扩展查询,以便用户即使没有填写公司字段,也能看到自己的帖子?
目标:查询(同一公司)或查询(同一作者)
function only_own_company( $query ) {
global $typenow;
$current_user = wp_get_current_user();
$post_type = \'machine\'; // change to your post type
$role = \'owner\';
if ( $typenow == $post_type && current_user_can( $role ) ) {
$query->set( \'tax_query\', array(
array(
\'taxonomy\' => \'company\',
\'field\' => \'slug\',
\'terms\' => \'abc\',
),
) );
}
}
add_action( \'pre_get_posts\', \'only_own_company\' );
我试图将其与第二个新查询结合起来,但这似乎不是正确的方式。。。
$query2 = new WP_Query( array( \'author\', $current_user->ID ) );
$query->posts = array_merge( $query->posts, $query2->posts );
最合适的回答,由SO网友:ClemC 整理而成
看见WP_Query 作为查询后过滤器的参考。您可以使用按作者筛选帖子\'author\'
使用分类法筛选帖子时查询var\'tax_query\'
查询变量。
然后,有条件地设置\'tax_query\'
根据用户的公司元字段查询var。如果为空,请设置\'author\'
改为查询var。
add_action( \'pre_get_posts\', \'alter_query\', 99, 1 );
function alter_query( $query ) {
global $typenow;
if ( \'machine\' === $typenow && current_user_can( \'owner\' ) ) {
$user = wp_get_current_user();
$company = get_user_meta( $user->ID, \'company\', true );
if ( \'\' !== $company ) {
$query->set( \'tax_query\', array(
array(
\'taxonomy\' => \'company\',
\'field\' => \'slug\',
\'terms\' => sanitize_key( $company ),
),
) );
} else {
$query->set( \'author\', $user->ID );
}
}
}
Note:
sanitize_key()
可能是必要的,具体取决于您存储公司用户元价值的方式。它将字符串小写,并用连字符替换其中的空格。例如,WP使用它从帖子标题定义帖子的slug-换句话说,它“slugify”一个字符串。。。