WP查询按IF条件添加数组

时间:2016-07-04 作者:pulla

我正在尝试按条件输出列表
我正在尝试创建一个插件和插件插件插件。当插件插件激活时,应该触发条件。

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)。它不调用数组。

我想如果我把这个条件放在一个钩子里,他们是不会明白的
我们如何才能让它发挥作用?

钩子必须位于加载项插件上(如此不同的页面),当加载项激活时,应该触发条件。

1 个回复
最合适的回答,由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();
}   

相关推荐

OOP development and hooks

我目前正在为Wordpress编写我的第一个OOP插件。为了帮助我找到一点结构,a boiler plate 这为我奠定了基础。在里面Main.php 有一种方法可以为管理员加载JS和CSS资产:/** * Register all of the hooks related to the admin area functionality * of the plugin. * * @since 0.1.0 * @access private