【问题标题】:Show only current user's products on the frontend in Woocommerce在 Woocommerce 的前端仅显示当前用户的产品
【发布时间】:2018-02-24 20:57:54
【问题描述】:

我只需要在前端显示当前用户的产品,即对于已登录的用户,他/她应该只能在整个站点上查看自己的产品。我尝试了下面的代码,但这限制了对当前用户未创建的所有帖子和页面的访问。而且我只需要限制 woocommerce 产品。

function shapeSpace_set_only_author($query) {
    global $current_user;
    $query->set('author', $current_user->ID);
}
add_action('pre_get_posts', 'shapeSpace_set_only_author');

【问题讨论】:

  • 不确定我是否清楚地理解了您的要求。你想限制登录用户在管理区域或前端只能看到他们自己的产品吗?如果是它的前端,那么听起来就像限制卖家只购买他自己的产品(如果他登录了也是如此;如果没有,他也可以从其他卖家那里购买任何产品)。这真的是业务需求吗?

标签: php wordpress woocommerce product author


【解决方案1】:

您可以使用 dedicated woocommerce_product_query 动作挂钩,将产品显示限制在:

add_action( 'woocommerce_product_query', 'shapeSpace_set_only_author', 20, 2 );
function shapeSpace_set_only_author ( $q, $query ) {
    if( is_admin() ) return;

    global $current_user;
    $q->set('author', $current_user->ID);
}

代码进入活动子主题(或主题)的 function.php 文件中。

经过测试并且可以工作

【讨论】:

    【解决方案2】:

    差不多了,您只需要指定您想要更改仅针对产品的查询。

    add_action( 'pre_get_posts', 'modify_query_show_current_user_products' );
    
    function modify_query_show_current_user_products( $query ) {
        global $current_user;
    
        if( ! is_admin() && $query->is_main_query() && isset( $query->query_vars['wc_query'] ) && $query->query_vars['wc_query'] == 'product_query' ) {
            $query->set('author', $current_user->ID);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 2015-10-10
      • 2023-03-23
      • 2019-01-08
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2022-08-24
      相关资源
      最近更新 更多