web-dev-qa-db-ja.com

WooCommerceでPHP)を使用してIDで商品を削除します

コマンドがあるので:

wp_insert_post()

コマンドがあるべきではありません:

wp_delete_post()

存在しないようですが、データベースに製品のIDがあり、それを削除したい場合に使用する代替手段は何ですか?

7
dimitrisr

WooCommerceには API経由で商品を削除する のメソッドがあるので、その関数から商品を簡単に削除できるメソッドを作成しました。

/**
 * Method to delete Woo Product
 * 
 * @param int $id the product ID.
 * @param bool $force true to permanently delete product, false to move to trash.
 * @return \WP_Error|boolean
 */
function wh_deleteProduct($id, $force = FALSE)
{
    $product = wc_get_product($id);

    if(empty($product))
        return new WP_Error(999, sprintf(__('No %s is associated with #%d', 'woocommerce'), 'product', $id));

    // If we're forcing, then delete permanently.
    if ($force)
    {
        if ($product->is_type('variable'))
        {
            foreach ($product->get_children() as $child_id)
            {
                $child = wc_get_product($child_id);
                $child->delete(true);
            }
        }
        elseif ($product->is_type('grouped'))
        {
            foreach ($product->get_children() as $child_id)
            {
                $child = wc_get_product($child_id);
                $child->set_parent_id(0);
                $child->save();
            }
        }

        $product->delete(true);
        $result = $product->get_id() > 0 ? false : true;
    }
    else
    {
        $product->delete();
        $result = 'trash' === $product->get_status();
    }

    if (!$result)
    {
        return new WP_Error(999, sprintf(__('This %s cannot be deleted', 'woocommerce'), 'product'));
    }

    // Delete parent product transients.
    if ($parent_id = wp_get_post_parent_id($id))
    {
        wc_delete_product_transients($parent_id);
    }
    return true;
}

コードはfunctions.phpアクティブな子テーマ(またはテーマ)のファイル。または、プラグインのphpファイルでも。

[〜#〜]使用法[〜#〜]

wh_deleteProduct(170); //to trash a product
wh_deleteProduct(170, TRUE); //to permanently delete a product

コードはテストされ、機能します。

お役に立てれば!

9
Raunak Gupta

wordpressのすべてが投稿であるため、製品も投稿であり、 Word Press Codex によると、この順序が存在するため、投稿IDをに渡すことができます

wp_delete_post((int)ID) as integer value 

WCAPIを使用できますPHPライブラリ https://github.com/woocommerce/wc-api-php

セットアップ

まず、Woocommerce>設定> APIから、新しいキーを追加します https://docs.woocommerce.com/document/woocommerce-rest-api/

そして、WP REST API統合

require_once( __DIR__ . '/wc-api-php-master/src/WooCommerce/Client.php');
require_once( __DIR__ . '/wc-api-php-master/src/WooCommerce/HttpClient/BasicAuth.php');
require_once( __DIR__ . '/wc-api-php-master/src/WooCommerce/HttpClient/HttpClient.php');
require_once( __DIR__ . '/wc-api-php-master/src/WooCommerce/HttpClient/HttpClientException.php');
require_once( __DIR__ . '/wc-api-php-master/src/WooCommerce/HttpClient/OAuth.php');
require_once( __DIR__ . '/wc-api-php-master/src/WooCommerce/HttpClient/Options.php');
require_once( __DIR__ . '/wc-api-php-master/src/WooCommerce/HttpClient/Request.php');
require_once( __DIR__ . '/wc-api-php-master/src/WooCommerce/HttpClient/Response.php');

use Automattic\WooCommerce\Client;
use Automattic\WooCommerce\HttpClient\HttpClientException;


    $woocommerce = new Client(
        home_url(), 
        'ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', //Consumer Key
        'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', //Consumer Secret
        [
            'wp_api' => true,
            'version' => 'wc/v2',
        ]
    );

製品を削除する

そして、この行を使用して製品を削除します

<?php  
$PRODUCT_ID = 40;
print_r($woocommerce->delete('products/'.$PRODUCT_ID, ['force' => true])); 
?>

また、バッチ更新製品を使用して製品を削除することもできます。

ドキュメントを読む必要がありますhttps://woocommerce.github.io/woocommerce-rest-api-docs

1
Mo'men Mohamed

WordPressでは、製品は投稿でもあり、post ad post_metaテーブルにも保存されるため、次のコードを使用できます。

$product_id = 108;

wp_delete_post( $product_id );
0
Mr. Ajay