Обновление видимости продукта в Woocommerce 3 - PullRequest
0 голосов
/ 01 июня 2018

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

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

Так что я, должно быть, что-то упускаю в базе данных, к которой обращаются, но я не могу сказать, что таблицы post и post_meta выглядят одинаково до и после нажатия кнопки сохранения на стороне администратора.Единственное поле, которое изменилось, - это поле _edit_lock в таблице post_meta.

Вот часть сценария, который я написал для переноса настроек видимости, у меня изначально была эта проблема, и я обнаружил, что это было связано с выделением продуктадо сих пор, поэтому я добавил эту строку в конце, и она, кажется, работает, но теперь что-то еще вызывает это:

    ...
    // $child_id is the product that the visibility settings are being transferred to, it should at this point be hidden
    // $visibility is the settings of the product that was visibile


    // swap visibility settings of the products
    $child_visibility = get_post_meta($child_id,"_visibility",true);
    update_post_meta($product->get_id(),"_visibility",$child_visibility);
    update_post_meta($child_id,"_visibility",$visibility);


    // copy color taxonomies over in case they were not entered 
    // this saved time so that the admin only had to enter taxonomy information on the visible products
    $terms = get_the_terms( $product->get_id(), 'product_color');
    $termArray = array();
    foreach($terms as $term) {
        $termArray[] = $term->name;
    }
    wp_set_object_terms( $child_id, $termArray, 'product_color', false );

    // i dont remember what this was for
    delete_transient( 'jck_wssv_term_counts' );

    // make sure new item is not marked out of stock
    wp_remove_object_terms( $child_id, 'outofstock', 'product_visibility' );
    wp_remove_object_terms( $child_id, 'exclude-from-catalog', 'product_visibility' );

1 Ответ

0 голосов
/ 01 июня 2018

Начиная с Woocommerce 3, видимость продуктов теперь обрабатывается пользовательской таксономией 'product_visibility' для терминов 'exclude-from-catalog' и 'exclude-from-search'…. См. в этой теме или этот тоже.

Таким образом, вы должны использовать вместо WC_Product методы установки CRUD set_catalog_visibility() таким образом:

// Get an instance of the product variation from a defined ID
$child_product = wc_get_product(child_id);
// Change the product visibility
$child_product->set_catalog_visibility('visible');
// Save and sync the product visibility
$child_product->save();

Это также обновит кешированные данные переходных процессов и сделает свое дело ...

...