Показывать только продукты текущего пользователя на веб-интерфейсе в Woocommerce

Мне нужно показывать только продукты текущего пользователя на внешнем интерфейсе, то есть для пользователя, который вошел в систему, он / она должен иметь возможность просматривать только свои собственные продукты на сайте. Я попробовал код ниже, но это ограничивает доступ ко всем постам и страницам, которые не создавал текущий пользователь. И мне нужно ограничить только для продуктов 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');

1

Решение

Ты можешь использовать преданный 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 вашей активной дочерней темы (или темы).

Проверено и работает

1

Другие решения

Почти там, вам просто нужно указать, что вы хотите изменить запрос только для продуктов.

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);
}
}
1