Как добавить товар в WooCommerce с помощью PHP кода

10 мар. 2014 г., 21:43:34
Просмотры: 107K
Голосов: 40

Я хочу добавить товары с помощью PHP кода подобно этому:

$post_information = array(
  'post_title' => 'новый товар магазина',
  'post_content' => 'это новый товар магазина',
  'post_type' => 'post',
  'post_status' => 'publish'
);
$post_id = wp_insert_post($post_information);

но этот код нужно оптимизировать для WooCommerce, включая тип записи (post type), guid и метаданные и... Может кто-нибудь помочь?

2
Комментарии

Добавление товаров через PHP потребует значительных усилий, так как нужно вставлять/обновлять множество различных данных. Возможно, этот ответ и связанные с ним плагины помогут вам выполнить задачу проще :)

Sven Sven
10 мар. 2014 г. 23:46:26

В 2017 году используйте REST API, как предложено в https://stackoverflow.com/a/40133117/5749914.

Elliott Beach Elliott Beach
17 июн. 2017 г. 20:22:49
Все ответы на вопрос 1
7
60

Приведенный ниже метод устарел, так как WooCommerce добавили таблицу wc_product_meta_lookup, которая также должна обновляться с некоторыми мета-значениями.

WooCommerce теперь предоставляет CRUD-интерфейс, поэтому лучше использовать его.

            $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 );
            // и так далее...
            $product->save();

Рецензент, не стесняйтесь вносить правки по своему усмотрению.


Это довольно просто, когда разберешься с данными, добавляемыми в пост-мета. Проблема, с которой я столкнулся — добавление скачиваемых товаров в магазин.

Ниже приведен код, который я использую. В нем перечислены все пост-мета, используемые WooCommerce. Товар публикуется, но ссылка на скачивание не прикрепляется.

Изначально я допустил ошибку в массиве, который хранит ссылку на скачивание, из-за чего генерировалась некорректная ссылка "b" и вторая правильная ссылка. После исправления массива в соответствии с тем, что используется при ручном добавлении товара, файл больше не отображается. Если у кого-то есть информация по этому поводу, буду очень признателен.

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

// Создаем пост
$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', "" );

// Пути к файлам будут храниться в массиве с ключами md5(путь к файлу)
$downdloadArray =array('name'=>"Test", 'file' => $uploadDIR['baseurl']."/video/".$video);
    
$file_path =md5($uploadDIR['baseurl']."/video/".$video);
    
    
$_file_paths[  $file_path  ] = $downdloadArray;
// Даем разрешение на добавление новых файлов в существующие заказы этого товара
// 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', '');

Надеюсь, это соответствует стандартам качества :)

11 мар. 2014 г. 12:42:27
Комментарии

После недель поисков оказалось, что у меня был пробел после "_downloadable_files", из-за чего WooCommerce не распознавал это поле. Также я прочитал, что файлы могут храниться в папке загрузок WooCommerce.

user3361421 user3361421
11 мар. 2014 г. 15:10:58

Со всеми этими update_post_meta я не нашел способа установить краткое описание добавляемого товара... Как можно установить краткое описание товара с помощью PHP кода?

prelite prelite
25 сент. 2014 г. 21:27:27

Я работал над чем-то похожим, но обнаружил, что после использования wp_insert_post запись создается и данные вводятся, но товар не появляется на странице магазина WooCommerce, а категория не отображается в сайдбаре. Очень странно, поскольку запись и все ее данные существуют в админке.

EHerman EHerman
3 дек. 2014 г. 20:34:22

@prelite разве post_excerpt не является кратким описанием?

Daniel Daniel
3 мар. 2017 г. 15:04:30

Работает именно так, как и ожидалось

Alaksandar Jesus Gene Alaksandar Jesus Gene
10 дек. 2018 г. 23:27:10

Теперь вы можете использовать 'meta_input' для установки всех метаданных в методе wp_insert_post().

Bjorn Bjorn
21 дек. 2018 г. 07:57:25

Как установить основное изображение товара и галерею?

Muzaffar Mahmood Muzaffar Mahmood
14 февр. 2020 г. 09:37:00
Показать остальные 2 комментариев