Cum să adaugi produse în WooCommerce folosind cod PHP

10 mar. 2014, 21:43:34
Vizualizări: 107K
Voturi: 40

Vreau să adaug produse folosind cod PHP similar cu cel de mai jos:

$post_information = array(
  'post_title' => 'articol nou magazin',
  'post_content' => 'acesta este un articol nou în magazin',
  'post_type' => 'post',
  'post_status' => 'publish'
);
$post_id = wp_insert_post($post_information);

dar acest cod trebuie optimizat pentru WooCommerce cum ar fi tipul de postare, guid și metadate și... Poate cineva să mă ajute?

2
Comentarii

Adăugarea produselor prin PHP va fi destul de multă muncă, deoarece există multe lucruri diferite de inserat/actualizat. Poate acest răspuns și plugin-urile conexe vă vor ajuta să finalizați sarcina mai ușor :)

Sven Sven
10 mar. 2014 23:46:26

În 2017, folosiți REST API așa cum este sugerat în https://stackoverflow.com/a/40133117/5749914.

Elliott Beach Elliott Beach
17 iun. 2017 20:22:49
Toate răspunsurile la întrebare 1
7
60

Metoda de mai jos este acum depășită, deoarece WooCommerce a adăugat tabelul wc_product_meta_lookup care trebuie de asemenea actualizat cu unele dintre valorile meta.

Woo a oferit acum o interfață CRUD, așa că folosește aceea în schimb.

            $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 );
            // etc...
            $product->save();

Reviewer, te rog să modifici după cum consideri potrivit.


Este destul de ușor odată ce ai stabilit datele adăugate în post meta. Problema pe care o am este adăugarea de produse descărcabile în magazin.

Mai jos este codul pe care îl folosesc, care listează toate meta-datelor postului utilizate de WooCommerce. Acesta publică un produs, însă link-ul de descărcare nu se atașează.

Inițial, când am început, am făcut o eroare cu array-ul care stochează link-ul de descărcare, producând un link incorect "b" urmat de un al doilea fișier de descărcare care era corect. După ce am corectat array-ul să se potrivească cu cel al unui produs adăugat manual, nu mai afișează un fișier. Dacă cineva are informații despre acest lucru, ar fi foarte apreciat.

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

//Crează postul
$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', "" );

// căile fișierelor vor fi stocate într-un array indexat după md5(cale fișier)
$downdloadArray =array('name'=>"Test", 'file' => $uploadDIR['baseurl']."/video/".$video);
    
$file_path =md5($uploadDIR['baseurl']."/video/".$video);
    
    
$_file_paths[  $file_path  ] = $downdloadArray;
// acordă permisiune pentru orice fișiere nou adăugate la orice comenzi existente pentru acest produs
// 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', '');

Sper că acest lucru respectă standardul de calitate :)

11 mar. 2014 12:42:27
Comentarii

După săptămâni de căutare, am descoperit că aveam un spațiu după "_downloadable_files", așa că nu a fost recunoscut de WooCommerce. De asemenea, am citit că fișierele pot fi stocate în folderul de încărcări WooCommerce.

user3361421 user3361421
11 mar. 2014 15:10:58

Cu toate acele update_post_meta, nu am găsit nicio modalitate de a seta descrierea scurtă a produsului adăugat... Cum pot seta descrierea scurtă a unui produs folosind cod PHP?

prelite prelite
25 sept. 2014 21:27:27

Am lucrat la ceva similar cu asta, dar am descoperit că după ce am folosit wp_insert_post, articolul este creat și datele sunt introduse, dar articolul nu apare în pagina magazinului Woo, iar categoria nu apare în bara laterală. Foarte ciudat, deoarece articolul și toate datele sale există în back-end.

EHerman EHerman
3 dec. 2014 20:34:22

@prelite nu este post_excerpt descrierea scurtă?

Daniel Daniel
3 mar. 2017 15:04:30

Funcționează exact conform așteptărilor

Alaksandar Jesus Gene Alaksandar Jesus Gene
10 dec. 2018 23:27:10

Acum poți folosi 'meta_input' pentru a seta toate metadatele în cadrul metodei wp_insert_post().

Bjorn Bjorn
21 dec. 2018 07:57:25

Cum să setezi imaginea principală a produsului și galeria?

Muzaffar Mahmood Muzaffar Mahmood
14 feb. 2020 09:37:00
Arată celelalte 2 comentarii