Добавление & quot; Продажа & quot; категория продукта для продуктов, которые продаются в Woocommerce

Как часть сайта WooCommerce, я хочу иметь страницу продажи, на которой перечислены элементы продажи (с нумерацией страниц и фильтрацией). Я думаю, что лучший способ сделать это — иметь категорию «Продажа», которая автоматически добавляется к любым публикациям, которые являются частью продажи (поскольку страницы категорий позволяют автоматически фильтровать и разбивать на страницы.

Пока у меня есть этот код, чтобы программно добавить категорию продажи к товарам при их сохранении:

function update_test( $product) {
wp_set_object_terms($product, 'sale', 'product_cat', true );
}

add_action( 'save_post', 'update_test', 1, 2);`

Тем не менее, я хочу, чтобы это происходило только в том случае, если продукт продается (т.е. установленная цена продажи), так что сохранение записей, которые не продаются, не добавляет категорию продажи. Я пробовал несколько разных вещей, но мне не повезло. Я попробовал это, но это не сработало:

function update_test( $product ) {
if($product->is_on_sale()){
wp_set_object_terms($product, 'sale', 'product_cat', true );
}
}

add_action( 'save_post', 'update_test', 1, 2);`

но это только заставило мой сайт заморозить при сохранении.

Есть идеи?

Энди

7

Решение

Обновлено 2 (Октябрь 2018 г.)

save_post это хук WordPress, который работает с $post_id аргумент и цель все виды сообщений. Вы должны нацелиться product пользовательские WooCommerce post_type сначала в состоянии (и publish post_status).

Кроме того, поскольку это не почтовый объект, вы не можете использовать is_on_sale() метод с этим. Но вы можете использовать get_post_meta() функция, чтобы проверить, если цена продажи установлен в продукте.

Вот полностью функциональный и проверенный код (за только простые продукты):

add_action( 'save_post_product', 'update_product_set_sale_cat' );
function update_product_set_sale_cat( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return $post_id;
}

if ( ! current_user_can( 'edit_product', $post_id ) ) {
return $post_id;
}

if( get_post_status( $post_id ) == 'publish' && isset($_POST['_sale_price']) ) {
$sale_price = $_POST['_sale_price'];

if( $sale_price >= 0 && ! has_term( 'Sale', 'product_cat', $post_id ) ){
wp_set_object_terms($post_id, 'sale', 'product_cat', true );
}
}
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Связанные с: Авто удалить категорию продукта Продажа из не продаваемых продуктов в Woocommerce

3

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

Других решений пока нет …

По вопросам рекламы [email protected]