Я использую несколько плагинов с 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' );