Eliminar un producto por ID usando PHP en WooCommerce

3 minutos de lectura

avatar de usuario
dimitrisr

Ya que hay un comando:

wp_insert_post()

¿No debería haber un comando:

wp_delete_post()

Parece que no existe, ¿cuál es una alternativa que usas cuando tienes el ID de un producto en la base de datos y quieres eliminarlo?

  • ¿Estás seguro de que la identificación es correcta?

    – Señor Mohamed

    22 de octubre de 2017 a las 12:31

  • Puede eliminar productos a través de la API de WC woocommerce.github.io/woocommerce-rest-api-docs/…

    –Andrew Schultz

    22 de octubre de 2017 a las 12:32

  • @AndrewSchultz, ¿qué es esta variable de $woocommerce que se usa? ¿Cómo lo inicio?

    – dimitrisr

    22 de octubre de 2017 a las 12:45


  • codex.wordpress.org/Function_Reference/wp_delete_post

    –Reigel Gallarde

    22 de octubre de 2017 a las 13:47

  • Es una variable global, para usarla simplemente declara “global $woocommerce”;

    –Andrew Schultz

    22/10/2017 a las 22:00


WooCommerce tiene métodos para eliminar un producto a través de APIpor lo que he creado un método a partir de esa función que puede eliminar un producto fácilmente.

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

El código entra functions.php archivo de su tema hijo activo (o tema). O también en cualquier complemento de archivos php.

USO

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

El código está probado y funciona.

¡Espero que esto ayude!

avatar de usuario
Abdallah Awwad Alkhwaldah

porque todo lo que está en wordpress es una publicación, por lo que el producto también es una publicación y, de acuerdo con WordPress Códice este pedido existe, puede pasar la identificación de la publicación al

wp_delete_post((int)ID) as integer value 

En WordPress, el producto también es la publicación y también se almacena en la tabla post_meta del anuncio de la publicación, por lo que puede usar el siguiente código para eso.

$product_id = 108;

wp_delete_post( $product_id );

Puede usar la biblioteca PHP API de WC
https://github.com/woocommerce/wc-api-php

Configuración

Primero desde Woocommerce> configuración> API y agregue una nueva clave
https://docs.woocommerce.com/document/woocommerce-rest-api/

Y agregue la integración de la API REST de WP

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

Eliminar producto

Y use esta línea para eliminar el producto

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

Además, puede usar productos de actualización por lotes para eliminar el producto.

Debes leer la documentación.
https://woocommerce.github.io/woocommerce-rest-api-docs

¿Ha sido útil esta solución?