我正在尝试按条件输出列表
我正在尝试创建一个插件和插件插件插件。当插件插件激活时,应该触发条件。
Condition
1。如果是管理员、编辑或作者,则输出所有帖子
2。如果不是其中之一,则只输出我的帖子(按用户id)
但是,它应该使用挂钩
这是原始页面。
$lava_listing_posts_args =
Array(
\'post_type\' => $post_type
, \'post_status\' => \'publish\'
, \'posts_per_page\' => 10
, \'paged\' => $this_paged
, \'orderby\' => \'modified\'
, \'tax_query\' => Array()
);
/* Get Current logged in user info */
$user = wp_get_current_user();
$allowed_roles = array(\'editor\', \'administrator\', \'author\');
if( !array_intersect($allowed_roles, $user->roles ) ) {
$author_check= array(\'author\'=> $get_current_user_id);
$lava_listing_posts_args[\'author\'] = $author_check;
$lava_listing_posts_args = array_merge($lava_listing_posts_args, $author_check);
}
当它是普通用户时,使用array\\u merge添加“按作者id”效果很好。
所以我在挂钩中添加了条件代码
http://prntscr.com/bodiim (添加了“do\\u action”):原始插件
$lava_listing_posts_args =
Array(
\'post_type\' => $post_type
, \'post_status\' => \'publish\'
, \'posts_per_page\' => 10
, \'paged\' => $this_paged
, \'orderby\' => \'modified\'
, \'tax_query\' => Array()
);
/* Added them to a hook "lava_lv_support_list_output_restrict" */
/*$user = wp_get_current_user();
$allowed_roles = array(\'editor\', \'administrator\', \'author\');
if( !array_intersect($allowed_roles, $user->roles ) ) {
$author_check= array(\'author\'=> $get_current_user_id);
$lava_listing_posts_args[\'author\'] = $author_check;
$lava_listing_posts_args = array_merge($lava_listing_posts_args, $author_check);
}*/
do_action( \'lava_lv_support_list_output_restrict\');
http://prntscr.com/bodjlz (在另一个包含页面上添加了“add\\u action”):插件
/*
Hook for output only my tickets for non staff (normal users)
*/
add_action( "lava_lv_support_list_output_restrict", Array( $this, \'lava_list_output_restrict\' ) );
/** this is __construct(). I just put here to show you. **/
public function lava_list_output_restrict(){
$user = wp_get_current_user();
$allowed_roles = array(\'editor\', \'administrator\', \'author\');
if( !array_intersect($allowed_roles, $user->roles ) ) {
$get_current_user_id = get_current_user_id( );
$author_check= array(\'author\'=> $get_current_user_id);
$lava_listing_posts_args[\'author\'] = $author_check;
$lava_listing_posts_args = array_merge($lava_listing_posts_args, $author_check);
}
}
但它似乎不起作用。我尝试添加整个数组($lava\\u listing\\u posts\\u args)。它不调用数组。
我想如果我把这个条件放在一个钩子里,他们是不会明白的
我们如何才能让它发挥作用?
钩子必须位于加载项插件上(如此不同的页面),当加载项激活时,应该触发条件。
最合适的回答,由SO网友:Cai 整理而成
看起来您正在尝试访问$lava_listing_posts_args
来自不同文件(和类)的数组。你需要把它作为你行动的论据。
虽然您可以对操作执行此操作,因为您只是在修改数组,但您可能应该使用过滤器(操作和过滤器本质上是相同的,只是使用方式不同)
而不是打电话do_action
, 按如下方式过滤阵列:
$lava_listing_posts_args = apply_filters( \'lava_lv_support_list_output_restrict\', $lava_listing_posts_args );
然后在插件类中,像这样钩住过滤器:
add_filter( \'lava_lv_support_list_output_restrict\', Array( $this, \'lava_list_output_restrict\' ) );
将数组作为如下参数传递给函数(完成后返回数组):
public function lava_list_output_restrict( $lava_listing_posts_args ) {
// Do stuff with $lava_listing_posts_args
return $lava_listing_posts_args;
}
顺便说一句,我不确定你想用这段代码做什么:
if( !array_intersect($allowed_roles, $user->roles ) ) {
$get_current_user_id = get_current_user_id( );
$author_check= array(\'author\'=> $get_current_user_id);
$lava_listing_posts_args[\'author\'] = $author_check;
$lava_listing_posts_args = array_merge($lava_listing_posts_args, $author_check);
}
在我看来,这大部分都是不必要的,你真正做的就是:
if( !array_intersect( $allowed_roles, $user->roles ) ) {
$lava_listing_posts_args[\'author\'] = get_current_user_id();
}