Come impostare automaticamente l'attributo 'Mostra nella pagina prodotto' in WooCommerce

28 feb 2015, 00:04:08
Visualizzazioni: 16.4K
Voti: 1

Ho scritto uno script per importare prodotti in una nuova installazione di WooCommerce.

I prodotti hanno attributi configurati nell'amministrazione. Questo frammento di codice aggiunge gli attributi durante l'importazione.

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');

Tuttavia, quando controllo l'attributo del prodotto nell'amministrazione, la casella di spunta per 'Mostra nella pagina prodotto' non è selezionata.

Esiste un modo per impostare questa opzione come selezionata utilizzando la funzione sopra? OPPURE Ha importanza se questa opzione è selezionata o meno? Se chiamo l'attributo direttamente nel template usando qualcosa come get_the_term_list (anche se la maggior parte dei miei attributi ha un singolo termine) verrà visualizzato, oppure il fatto che questa casella sia selezionata ne sovrascrive la visualizzazione?

1
Commenti

Automattic ha acquistato Woozone, WooCommerce sarà presto parte del core di WordPress. Smettete di chiudere queste domande come fuori tema, è fastidioso.

Dave Hilditch Dave Hilditch
27 gen 2016 23:21:45
Tutte le risposte alla domanda 1
0

In realtà non ha importanza perché WooCommerce utilizza questo codice per visualizzare:

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

Tuttavia, se non imposti la visualizzazione su true, dovrai aggiungere questo codice ai tuoi file template. Potresti dover fare anche altre cose (styling, ecc.). Se semplicemente imposti la visualizzazione su true, non dovrai fare nulla. WooCommerce si occuperà di tutto.

Ecco come WooCommerce lo gestisce, approssimativamente (/includes/class-wc-ajax.php):

wp_set_object_terms( $product_id, $values, $attribute_name);

// ottieni gli attributi esistenti

$attributes = get_post_meta( $product_id, '_product_attributes' );

$attributes[ sanitize_title( $attribute_name ) ] = array(
        'name'          => wc_clean( $attribute_name ),
        'value'         => $values,
        'position'      => $attribute_position, // l'ordine in cui viene visualizzato
        'is_visible'    => $is_visible, // questo è quello che volevi, impostalo su true
        'is_variation'  => $is_variation, // impostalo su true se verrà utilizzato per le variazioni
        'is_taxonomy'   => $is_taxonomy // impostalo su true
);


// questa parte ordina gli attributi prima del salvataggio in base al valore position 
// questo è definito da WooCommerce, ma se la tua importazione viene eseguita prima che WooCommerce sia caricato, questa funzione non sarà disponibile
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' );

// aggiorna nuovamente
update_post_meta( $post_id, '_product_attributes', $attributes );
28 feb 2015 02:10:45