Intereting Posts
Как отключить разбивку на страницы (следующие / предыдущие ссылки) в архиве почтового типа? Бесплатные темы для коммерческого использования Использование метаданных треков из аудиокода проблема с мета-контентом WP-Post Ratings Локальный веб-сайт WordPress не работает после настройки порта Автоматическое перенаправление WordPress на 404 Как получить бабушку и дедушку данной категории Как добавить текстовый виджет во время активации темы Как импортировать контент из WordPress.com в самостоятельную установку WordPress? Сообщение на страницу не работает, если ни одна категория не указана Как включить текстовый редактор в моей теме WordPress? Добавить редактор боковой панели / виджета на экран редактирования сообщений? Пользовательские поля не отображаются для пользовательских типов сообщений Пользовательская форма не отображается в правильном месте на странице Пользовательский таксономический термин как класс?

Программно добавленный атрибут автоматически устанавливается на страницу «показывать на странице продукта». Woocommerce

Ive написал сценарий для импорта продуктов на новую установку Woocommerce.

У продуктов есть атрибуты, установленные в администраторе. Этот бит кода добавляет атрибуты при импорте.

update_post_meta($product_id, 'common_name', $product['common_name']); wp_set_object_terms($product_id, $product['flowering_period'], 'pa_flowering'); wp_set_object_terms($product_id, $product['native_plant'], 'pa_native'); 

Однако, когда я смотрю на атрибут продукта в админке, галочка «показать на странице продукта» отключена.

Есть ли способ установить это как отмеченное галочкой, используя указанную выше функцию? ИЛИ Имеет значение, если это отмечено галочкой или нет, если я вызываю атрибут в шаблоне напрямую, используя что-то вроде get_the_term_list (хотя большинство моих атрибутов имеют один термин), будет ли оно отображаться или будет ли этот флажок превышать его отображение?

На самом деле это неважно, потому что WooCommerce использует это, чтобы отобразить:

 $values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) ); 

Однако, если вы не настроили отображение на true, вам придется добавить этот код в файлы шаблонов. Возможно, вам придется делать и другие вещи (стилизация и т. Д.). Если вы просто установите отображение в true, вам не нужно ничего делать. WooCommerce позаботится об этом.

это как WooCommerce делает это, грубо (/includes/class-wc-ajax.php):

 wp_set_object_terms( $product_id, $values, $attribute_name); // get existing attributes $attributes = get_post_meta( $product_id, '_product_attributes' ); $attributes[ sanitize_title( $attribute_name ) ] = array( 'name' => wc_clean( $attribute_name ), 'value' => $values, 'position' => $attribute_position, // the order in which it is displayed 'is_visible' => $is_visible, // this is the one you wanted, set to true 'is_variation' => $is_variation, // set to true if it will be used for variations 'is_taxonomy' => $is_taxonomy // set to true ); // this part sorts the attributes before saving based on the position value // this is defined by WooCommerce, but if your import runs before WooCommerce is loaded, this function won't be available if ( ! function_exists( 'attributes_cmp' ) ) { function attributes_cmp( $a, $b ) { if ( $a['position'] == $b['position'] ) { return 0; } return ( $a['position'] < $b['position'] ) ? -1 : 1; } } uasort( $attributes, 'attributes_cmp' ); // update it back update_post_meta( $post_id, '_product_attributes', $attributes );