Löschen Sie ein Produkt nach ID mit PHP in WooCommerce

Lesezeit: 3 Minuten

Benutzeravatar von dimitrisr
dimitrisr

Da es einen Befehl gibt:

wp_insert_post()

sollte da nicht ein befehl stehen:

wp_delete_post()

Scheint nicht zu existieren, was ist eine Alternative, die Sie verwenden, wenn Sie die ID eines Produkts in der Datenbank haben und es löschen möchten?

  • Sind Sie sicher, dass die ID richtig ist?

    – Mo’men Mohamed

    22. Oktober 2017 um 12:31 Uhr

  • Sie können Produkte über die WC-API löschen woocommerce.github.io/woocommerce-rest-api-docs/…

    – Andreas Schultz

    22. Oktober 2017 um 12:32 Uhr

  • @AndrewSchultz was ist diese $woocommerce-Variable, die verwendet wird? Wie initiiere ich es?

    – dimitrisr

    22. Oktober 2017 um 12:45 Uhr


  • codex.wordpress.org/Function_Reference/wp_delete_post

    – Reigel Gallarde

    22. Oktober 2017 um 13:47 Uhr

  • Es ist eine globale Variable, um sie zu verwenden, deklarieren Sie einfach “global $woocommerce;”

    – Andreas Schultz

    22. Oktober 2017 um 22:00 Uhr


WooCommerce hat eine Methode dazu Löschen Sie ein Produkt über die APIalso habe ich aus dieser Funktion eine Methode erstellt, die ein Produkt einfach löschen kann.

/**
 * 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;
}

Code geht rein functions.php Datei deines aktiven Child-Themes (oder Themes). Oder auch in irgendwelchen Plugin-PHP-Dateien.

VERWENDUNGSZWECK

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

Code ist getestet und funktioniert.

Hoffe das hilft!

Benutzeravatar von Abdallah Awwad Alkhwaldah
Abdallah Awwad Alkhwaldah

Weil alles in WordPress Post ist, ist das Produkt auch ein Post und entsprechend WordPress-Codex Diese Bestellung ist vorhanden, Sie können die Post-ID an die übergeben

wp_delete_post((int)ID) as integer value 

In WordPress ist das Produkt auch der Post und wird auch in der Tabelle post ad post_meta gespeichert, sodass Sie dafür den folgenden Code verwenden können.

$product_id = 108;

wp_delete_post( $product_id );

Sie können die WC-API-PHP-Bibliothek verwenden
https://github.com/woocommerce/wc-api-php

Konfiguration

Zuerst von Woocommerce > Einstellungen > API und fügen Sie einen neuen Schlüssel hinzu
https://docs.woocommerce.com/document/woocommerce-rest-api/

Und fügen Sie die WP REST API-Integration hinzu

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

Produkt löschen

Und verwenden Sie diese Zeile, um das Produkt zu löschen

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

Sie können das Produkt auch mit der Batch-Aktualisierung von Produkten löschen.

Sie müssen die Dokumentation lesen
https://woocommerce.github.io/woocommerce-rest-api-docs

1400880cookie-checkLöschen Sie ein Produkt nach ID mit PHP in WooCommerce

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy