Producten in bulk verwijderen (WordPress PHP-API)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The solutions below are from 2019 and done through SQL.

This can be done much more carefully through WP-CLI, and with some proper parallelisation, without taking too much time. See Wp wc product delete for some really cool code!

get_posts werkt niet?

Het lijkt erop, dat je niet zomaar de ID's van alle producten kunt verkrijgen via get_posts. Zie deze voorbeelden:

<?php
#
# Get all products and/or images
###############################################################
#
print "\n===================================================\n";
print "===================================================\n";
print "===================================================\n";

###############################################################
# Libraries
###############################################################
#
$pad = "/home/strompf/www/rt.dvb/";
require_once($pad . "wp-load.php");

# These libraries seem not to be needed
#######################################
#
# require_once($pad . 'wp-admin/includes/media.php');
# require_once($pad . 'wp-admin/includes/file.php');
# require_once($pad . 'wp-admin/includes/image.php');


###############################################################
# get_pages - Wrong function
###############################################################
#
// $pages = get_pages();
// print_r($pages);


###############################################################
# get_pages - Wrong function
###############################################################
#
# Appearantly, products are not "pages" in the sense of this
# function - You just don't get them!
#
// $args = array
// (
//     'post_type' => 'product'
// );
// $pages = get_pages($args);
// print_r($pages);


###############################################################
# get_posts - Prints only Dutch products!
###############################################################
#
# * The trick is, that if you don't specify otherwise, some 
#   default values are in place, like 
#
#   * 'post_type'   =>  'page'
#   * 'numberposts' =>  72
#
# * I still only get 23 products - Exactly all Dutch products
#   but no translations
#
// $args     = array
// ( 
//     'numberposts'   =>  72,
//     'post_type'     => 'product'
// );


// $products = get_posts( $args );
// print_r($products);


###############################################################
# Delete!
###############################################################
#
// $args     = array
// ( 
//     'numberposts'   =>  1000,
//     'post_type'     => 'product'
// );

// $products = get_posts( $args );
// print_r($products);
// $i=0;

// foreach ($products as $product)
// {
//     $i++;
//     echo $i." Post-ID: ".$product->ID."\n";
//     wp_delete_post($product->ID, true);
// }


###############################################################
# get_posts - Get translations - Not working
###############################################################
#
$args     = array
( 
    'numberposts'   =>  -1,
    'post_type'     => 'product',
    'category'      => 1
);

$products = get_posts( $args );
$i=0;

foreach ($products as $product)
{
    $i++;
    echo $i." Post-ID: ".$product->ID."\n";
}

$wpdb-oplossing

Dit script werkt wel. Het is een niveau lager:

###############################################################
# DB-level
###############################################################
#
global $wpdb;
 
$sql_1 = "DELETE FROM ".$wpdb->prefix."term_relationships WHERE object_id IN (SELECT ID FROM ".$wpdb->prefix."posts WHERE post_type = 'product');";
$sql_2 = "DELETE FROM ".$wpdb->prefix."postmeta WHERE post_id IN (SELECT ID FROM ".$wpdb->prefix."posts WHERE post_type = 'product');";
$sql_3 = "DELETE FROM ".$wpdb->prefix."posts WHERE post_type = 'product';";
 
$sql_4 = "DELETE relations.*, taxes.*, terms.*
  FROM ".$wpdb->prefix."term_relationships AS relations
  INNER JOIN ".$wpdb->prefix."term_taxonomy AS taxes
    ON relations.term_taxonomy_id=taxes.term_taxonomy_id
  INNER JOIN ".$wpdb->prefix."terms AS terms
    ON taxes.term_id=terms.term_id
  WHERE object_id IN (SELECT ID FROM ".$wpdb->prefix."posts WHERE post_type='product');";
 
try{
    
    $wpdb->query($sql_1);
    $wpdb->query($sql_2);
    $wpdb->query($sql_3);
    $wpdb->query($sql_4);
    
}catch(Exception $e){}

Zie ook

Bronnen