Как в личном кабинете WooComerce вывести все товары продавца?

Ссылка скопирована
1 ответ

Код ниже выводит товары конкретного продавца по id, а нужно текущего/авторизованного пользователя

// Создаём меню и страницу Мои товары на продажу /my-account/my-products/  add_filter( 'woocommerce_account_menu_items', 'add_my_products_item' ); function add_my_products_item( $items ) {  	$items['my-products'] = __( 'Мои товары на продажу' );  	return $items; }  // Добавим конечную точку // После добавления конечной точки нужно обновить пермалинки! add_action( 'init', 'add_my_products_endpoint' ); function add_my_products_endpoint() { 	add_rewrite_endpoint( 'my-products', EP_PAGES ); }  // Выведем контент для страницы add_action( 'woocommerce_account_my-products_endpoint', 'show_my_products' ); function show_my_products( $query ) { 	 	$query = new WP_Query( 'post_type=product&author=2' ); while ( $query->have_posts() ) { 	$query->the_post();  	the_title(); } }    //конец

// Создаём меню и страницу Мои товары на продажу /my-account/my-products/ add_filter( 'woocommerce_account_menu_items', 'add_my_products_item' ); function add_my_products_item( $items ) { $items['my-products'] = __( 'Мои товары на продажу' ); return $items; } // Добавим конечную точку // После добавления конечной точки нужно обновить пермалинки! add_action( 'init', 'add_my_products_endpoint' ); function add_my_products_endpoint() { add_rewrite_endpoint( 'my-products', EP_PAGES ); } // Выведем контент для страницы add_action( 'woocommerce_account_my-products_endpoint', 'show_my_products' ); function show_my_products( $query ) { $query = new WP_Query( 'post_type=product&author=2' ); while ( $query->have_posts() ) { $query->the_post(); the_title(); } } //конец

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Frontend-редакция Ответ

В WooCommerce “товары продавца” можно вывести только если у товара есть связь с продавцом. Обычно это автор записи товара (post_author) или метаполе, которое добавляет marketplace-плагин: Dokan, WCFM, WC Vendors и т.п. Сначала нужно понять, как именно у Вас хранится продавец.

Если продавец — это автор товара, в личном кабинете можно сделать запрос по текущему пользователю:

$vendor_id = get_current_user_id();
 
$products = new WP_Query([
    'post_type'      => 'product',
    'post_status'    => ['publish', 'draft', 'pending'],
    'author'         => $vendor_id,
    'posts_per_page' => 20,
]);
 
if ($products->have_posts()) {
    echo '<ul class="vendor-products">';
 
    while ($products->have_posts()) {
        $products->the_post();
        echo '<li><a href="' . esc_url(get_edit_post_link(get_the_ID())) . '">' . esc_html(get_the_title()) . '</a></li>';
    }
 
    echo '</ul>';
    wp_reset_postdata();
}

$vendor_id = get_current_user_id(); $products = new WP_Query([ 'post_type' => 'product', 'post_status' => ['publish', 'draft', 'pending'], 'author' => $vendor_id, 'posts_per_page' => 20, ]); if ($products->have_posts()) { echo '<ul class="vendor-products">'; while ($products->have_posts()) { $products->the_post(); echo '<li><a href="' . esc_url(get_edit_post_link(get_the_ID())) . '">' . esc_html(get_the_title()) . '</a></li>'; } echo '</ul>'; wp_reset_postdata(); }

Для вывода на странице “Мой аккаунт” лучше добавить endpoint WooCommerce:

add_action('init', function () {
    add_rewrite_endpoint('my-products', EP_ROOT | EP_PAGES);
});
 
add_filter('woocommerce_account_menu_items', function ($items) {
    $items['my-products'] = 'Мои товары';
    return $items;
});
 
add_action('woocommerce_account_my-products_endpoint', function () {
    // здесь вывод списка товаров текущего продавца
});

add_action('init', function () { add_rewrite_endpoint('my-products', EP_ROOT | EP_PAGES); }); add_filter('woocommerce_account_menu_items', function ($items) { $items['my-products'] = 'Мои товары'; return $items; }); add_action('woocommerce_account_my-products_endpoint', function () { // здесь вывод списка товаров текущего продавца });

После добавления endpoint нужно один раз сбросить правила ссылок: зайти в Настройки → Постоянные ссылки и сохранить. На проде перед этим лучше иметь бэкап, потому что rewrite-логика влияет на URL.

Если используется Dokan/WCFM, не пишите свой запрос вслепую. У таких плагинов есть свои функции получения vendor_id и своих товаров. Иначе можно вывести не те товары или обойти ограничения доступа.

Обязательно проверьте права: пользователь должен видеть только свои товары. Не передавайте ID продавца из GET-параметра без проверки, иначе один продавец сможет посмотреть товары другого. Для текущего кабинета почти всегда нужен get_current_user_id(), а не произвольный ID из запроса.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно