Come aggiungere un prodotto in WooCommerce con codice PHP

10 mar 2014, 21:43:34
Visualizzazioni: 107K
Voti: 40

Voglio aggiungere prodotti con codice PHP come mostrato di seguito:

$post_information = array(
  'post_title' => 'nuovo articolo negozio',
  'post_content' => 'questo è un nuovo articolo del negozio',
  'post_type' => 'post',
  'post_status' => 'publish'
);
$post_id = wp_insert_post($post_information);

ma questo codice deve essere ottimizzato per WooCommerce per includere il tipo di post corretto, il GUID, i metadati e altro. Qualcuno può aiutarmi?

2
Commenti

Aggiungere prodotti tramite PHP sarà un bel po' di lavoro poiché ci sono molte cose diverse da inserire/aggiornare. Forse questa risposta e i relativi plugin ti aiuteranno a completare il lavoro più facilmente :)

Sven Sven
10 mar 2014 23:46:26

Nel 2017, utilizza la REST API come suggerito in https://stackoverflow.com/a/40133117/5749914.

Elliott Beach Elliott Beach
17 giu 2017 20:22:49
Tutte le risposte alla domanda 1
7
60

Il metodo seguente è ora obsoleto poiché WooCommerce ha aggiunto la tabella wc_product_meta_lookup che deve essere aggiornata con alcuni dei valori meta.

WooCommerce ora fornisce un'interfaccia CRUD, quindi è meglio utilizzare quella.

            $post_id = wp_insert_post( array(
                'post_title' => $title,
                'post_type' => 'product',
                'post_status' => 'publish',
                'post_content' => $body,
            ));
            $product = wc_get_product( $post_id );
            $product->set_sku( $sku );
            // ecc...
            $product->save();

Revisore, sentiti libero di modificare come ritieni opportuno.


È abbastanza semplice una volta che hai compreso i dati aggiunti nei post meta. Il problema che sto avendo è aggiungere prodotti scaricabili allo store.

Di seguito è riportato il codice che sto utilizzando, elenca tutti i post meta utilizzati da WooCommerce. Questo pubblica un prodotto, tuttavia il link di download non viene allegato.

Inizialmente, quando ho iniziato, ho commesso un errore con l'array che memorizza il link di download, producendo un link errato "b" seguito da un secondo file di download che era corretto. Dopo aver corretto l'array per corrispondere a quello di un prodotto aggiunto manualmente, non mostra più un file. Se qualcuno ha informazioni su questo, sarebbe molto apprezzato.

$post = array(
    'post_author' => $user_id,
    'post_content' => '',
    'post_status' => "publish",
    'post_title' => $product->part_num,
    'post_parent' => '',
    'post_type' => "product",
);

// Crea il post
$post_id = wp_insert_post( $post, $wp_error );
if($post_id){
    $attach_id = get_post_meta($product->parent_id, "_thumbnail_id", true);
    add_post_meta($post_id, '_thumbnail_id', $attach_id);
}

wp_set_object_terms( $post_id, 'Races', 'product_cat' );
wp_set_object_terms( $post_id, 'simple', 'product_type');
     
update_post_meta( $post_id, '_visibility', 'visible' );
update_post_meta( $post_id, '_stock_status', 'instock');
update_post_meta( $post_id, 'total_sales', '0');
update_post_meta( $post_id, '_downloadable', 'yes');
update_post_meta( $post_id, '_virtual', 'yes');
update_post_meta( $post_id, '_regular_price', "1" );
update_post_meta( $post_id, '_sale_price', "1" );
update_post_meta( $post_id, '_purchase_note', "" );
update_post_meta( $post_id, '_featured', "no" );
update_post_meta( $post_id, '_weight', "" );
update_post_meta( $post_id, '_length', "" );
update_post_meta( $post_id, '_width', "" );
update_post_meta( $post_id, '_height', "" );
update_post_meta( $post_id, '_sku', "");
update_post_meta( $post_id, '_product_attributes', array());
update_post_meta( $post_id, '_sale_price_dates_from', "" );
update_post_meta( $post_id, '_sale_price_dates_to', "" );
update_post_meta( $post_id, '_price', "1" );
update_post_meta( $post_id, '_sold_individually', "" );
update_post_meta( $post_id, '_manage_stock', "no" );
update_post_meta( $post_id, '_backorders', "no" );
update_post_meta( $post_id, '_stock', "" );

// I percorsi dei file saranno memorizzati in un array indicizzato con md5(percorso del file)
$downdloadArray =array('name'=>"Test", 'file' => $uploadDIR['baseurl']."/video/".$video);
    
$file_path =md5($uploadDIR['baseurl']."/video/".$video);
    
    
$_file_paths[  $file_path  ] = $downdloadArray;
// concedi l'autorizzazione a qualsiasi file appena aggiunto su ordini esistenti per questo prodotto
// do_action( 'woocommerce_process_product_file_download_paths', $post_id, 0, $downdloadArray );
update_post_meta( $post_id, '_downloadable_files', $_file_paths);
update_post_meta( $post_id, '_download_limit', '');
update_post_meta( $post_id, '_download_expiry', '');
update_post_meta( $post_id, '_download_type', '');
update_post_meta( $post_id, '_product_image_gallery', '');

Spero che questo rispetti gli standard di qualità :)

11 mar 2014 12:42:27
Commenti

Dopo settimane di ricerca ho scoperto che avevo uno spazio dopo "_downloadable_files" quindi non veniva riconosciuto da WooCommerce. Inoltre ho letto che i file potrebbero essere memorizzati nella cartella degli upload di WooCommerce.

user3361421 user3361421
11 mar 2014 15:10:58

Con tutti quegli update_post_meta non ho trovato un modo per impostare la descrizione breve del prodotto aggiunto... Come posso impostare la descrizione breve di un prodotto con codice PHP?

prelite prelite
25 set 2014 21:27:27

Stavo lavorando a qualcosa di simile, ma ho scoperto che dopo aver usato wp_insert_post il post viene creato e i dati inseriti, ma il post non compare nella pagina del negozio Woo e la categoria non appare nella sidebar. Molto strano perché il post e tutti i suoi dati esistono nel backend.

EHerman EHerman
3 dic 2014 20:34:22

@prelite non è post_excerpt la breve descrizione?

Daniel Daniel
3 mar 2017 15:04:30

Funziona esattamente come previsto

Alaksandar Jesus Gene Alaksandar Jesus Gene
10 dic 2018 23:27:10

Ora puoi usare 'meta_input' per impostare tutti i meta all'interno del metodo wp_insert_post().

Bjorn Bjorn
21 dic 2018 07:57:25

Come impostare l'immagine principale del prodotto e la galleria?

Muzaffar Mahmood Muzaffar Mahmood
14 feb 2020 09:37:00
Mostra i restanti 2 commenti