Как в личном кабинете WooComerce вывести все товары продавца?
Код ниже выводит товары конкретного продавца по 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(); } } //конец
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В 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(); }
Для вывода на странице “Мой аккаунт” лучше добавить 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 () { // здесь вывод списка товаров текущего продавца });
После добавления endpoint нужно один раз сбросить правила ссылок: зайти в Настройки → Постоянные ссылки и сохранить. На проде перед этим лучше иметь бэкап, потому что rewrite-логика влияет на URL.
Если используется Dokan/WCFM, не пишите свой запрос вслепую. У таких плагинов есть свои функции получения vendor_id и своих товаров. Иначе можно вывести не те товары или обойти ограничения доступа.
Обязательно проверьте права: пользователь должен видеть только свои товары. Не передавайте ID продавца из GET-параметра без проверки, иначе один продавец сможет посмотреть товары другого. Для текущего кабинета почти всегда нужен
get_current_user_id(), а не произвольный ID из запроса.