基于自定义元过滤管理区域中的订单

时间:2013-11-18 作者:Permana

Story:

我有自定义角色Staff 对于我的WooCommerce商店,

当客户创建订单时,会为订单分配一个自定义元名称handle_by 其中该值是角色为Staff的用户的随机值。

当员工登录并单击WooCoomerce > Orders, 他/她只会在以下情况下看到订单handle_by 与当前用户id匹配。

Problem:

如何筛选WooCommerce>Order以仅显示自定义元所在的订单handle_by 与当前用户登录匹配。

1 个回复
最合适的回答,由SO网友:Permana 整理而成

解决了它,使用pre_get_posts 过滤器和WP_Query->set() 方法

function foo_filter_orders($query) {
    global $pagenow;
    $qv = &$query->query_vars;
    
    $currentUserRoles = wp_get_current_user()->roles;
    
    if (in_array(\'shop_manager\', $currentUserRoles)) {
        if ( $pagenow == \'edit.php\' && 
                isset($qv[\'post_type\']) && $qv[\'post_type\'] == \'shop_order\' ) {            
            $query->set(\'meta_key\', \'handle_by\');
            $query->set(\'meta_value\', \'shopmanager1\');
        }
    }
    
    return $query;
}
add_filter(\'pre_get_posts\', \'foo_filter_orders\');

结束

相关推荐

Security and Must Use Plugins

从codex article 必须使用插件:只需将文件上载到mu插件目录即可启用,无需登录我觉得这是一个潜在的安全问题。在站点上运行插件中的任何代码之前,必须通过管理面板激活常规插件。我一直认为这是一个明智的安全预防措施,因为攻击者如果能够以某种方式将文件上载到plugins文件夹,则在运行代码之前,还必须访问和修改数据库。这个mu-plugins 文件夹似乎提供了一种简单的方法来避免这种情况。我知道WordPress开发人员比我更了解安全性,所以我想知道是否有人能解释为什么这不是一个安全漏洞。