Cum să setați automat atributul 'show on product page' în Woocommerce atunci când este adăugat programatic
Am scris un script pentru a importa produse într-o instalație nouă de Woocommerce.
Produsele au atribute configurate în administrare. Acest fragment de cod adaugă atributele la import.
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');
Totuși, când verific atributul produsului în administrare, caseta de bifat pentru 'show on product page' este debifată.
Există vreo modalitate de a seta această opțiune ca bifată folosind funcția de mai sus? SAU Contează dacă această opțiune este bifată sau nu? Dacă apelez atributul direct în template folosind ceva precum get_the_term_list (deși majoritatea atributelor mele au un singur termen), va fi afișat sau trebuie neapărat bifată această casetă pentru a apărea?
De fapt, nu contează pentru că WooCommerce folosește acest lucru pentru afișare:
$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) );
Totuși, dacă nu setați afișarea la true, va trebui să adăugați acest cod în fișierele de șablon. S-ar putea să fiți nevoit să faceți și alte lucruri (stilizare, etc.). Dacă setați afișarea la true, nu trebuie să faceți nimic. WooCommerce se va ocupa de asta.
așa face WooCommerce, aproximativ (/includes/class-wc-ajax.php):
wp_set_object_terms( $product_id, $values, $attribute_name);
// obține atributele existente
$attributes = get_post_meta( $product_id, '_product_attributes' );
$attributes[ sanitize_title( $attribute_name ) ] = array(
'name' => wc_clean( $attribute_name ),
'value' => $values,
'position' => $attribute_position, // ordinea în care este afișat
'is_visible' => $is_visible, // acesta este cel pe care îl doreați, setați la true
'is_variation' => $is_variation, // setați la true dacă va fi folosit pentru variații
'is_taxonomy' => $is_taxonomy // setați la true
);
// această parte sortează atributele înainte de salvare în funcție de valoarea poziției
// acest lucru este definit de WooCommerce, dar dacă importul dvs. rulează înainte ca WooCommerce să fie încărcat, această funcție nu va fi disponibilă
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' );
// actualizează înapoi
update_post_meta( $post_id, '_product_attributes', $attributes );
