Διαγραφή προϊόντων WooCommerce από συγκεκριμένο WP All Import με SQL
Η διαχείριση χιλιάδων προϊόντων στο WooCommerce συχνά απαιτεί μαζικές εισαγωγές με το WP All Import. Αλλά τι γίνεται αν χρειαστεί να διαγράψετε όλα τα προϊόντα που προήλθαν από μια συγκεκριμένη εισαγωγή;
Αντί να τα σβήνετε χειροκίνητα ένα-ένα, μπορείτε να εκτελέσετε ένα SQL query απευθείας στη βάση δεδομένων σας. Αυτή η μέθοδος εξασφαλίζει μια καθαρή διαγραφή προϊόντων, παραλλαγών και όλων των σχετικών δεδομένων τους (συνημμένα, μεταδεδομένα, σχέσεις).
Γιατί να διαγράψετε προϊόντα βάσει Import ID;
Υπάρχουν αρκετές περιπτώσεις όπου αυτό είναι απαραίτητο:
-
Κάνατε δοκιμαστική εισαγωγή σε staging και θέλετε να την αναιρέσετε.
-
Κάνατε κατά λάθος εισαγωγή διπλότυπων προϊόντων.
-
Θέλετε να αντικαταστήσετε ολόκληρο το product feed ενός προμηθευτή.
Στοχεύοντας το import_id που χρησιμοποιεί το WP All Import, μπορείτε να διαγράψετε με ασφάλεια οτιδήποτε συνδέεται με εκείνο το batch.
SQL Query για διαγραφή προϊόντων από συγκεκριμένο import
⚠️ Σημαντικό: Πάντα να δημιουργείτε ένα backup της βάσης δεδομένων πριν εκτελέσετε καταστροφικά queries.
Αντικαταστήστε τοA9B2c1u_με το δικό σας table prefix του WordPress και ορίστε το@IMPORT_ID.
-- Set your specific import ID here
SET @IMPORT_ID = 1;
-- 1) Collect ALL products & variations from this import
CREATE TEMPORARY TABLE to_del (id BIGINT PRIMARY KEY);
INSERT INTO to_del
SELECT p.ID
FROM A9B2c1u_posts p
JOIN A9B2c1u_pmxi_posts x ON x.post_id = p.ID
WHERE x.import_id = @IMPORT_ID
AND p.post_type IN ('product','product_variation');
-- 2) (Optional but recommended) Delete related attachments
CREATE TEMPORARY TABLE to_del_att (id BIGINT PRIMARY KEY);
INSERT INTO to_del_att
SELECT a.ID
FROM A9B2c1u_posts a
WHERE a.post_type = 'attachment'
AND a.post_parent IN (SELECT id FROM to_del);
DELETE pm FROM A9B2c1u_postmeta pm
JOIN to_del_att da ON pm.post_id = da.id;
DELETE tr FROM A9B2c1u_term_relationships tr
JOIN to_del_att da ON tr.object_id = da.id;
DELETE a FROM A9B2c1u_posts a
JOIN to_del_att da ON a.ID = da.id;
DROP TABLE to_del_att;
-- 3) Delete products/variations + all related records
DELETE pm FROM A9B2c1u_postmeta pm
JOIN to_del d ON pm.post_id = d.id;
DELETE tr FROM A9B2c1u_term_relationships tr
JOIN to_del d ON tr.object_id = d.id;
DELETE wcl FROM A9B2c1u_wc_product_meta_lookup wcl
JOIN to_del d ON wcl.product_id = d.id;
DELETE p FROM A9B2c1u_posts p
JOIN to_del d ON p.ID = d.id;
DELETE x FROM A9B2c1u_pmxi_posts x
JOIN to_del d ON x.post_id = d.id;
DROP TABLE to_del;
Πώς λειτουργεί αυτό το query
-
Συλλέγει όλα τα προϊόντα και τις παραλλαγές που έχουν εισαχθεί με συγκεκριμένο
import_id. -
Διαγράφει τα συνημμένα τους (εικόνες, αρχεία) ώστε η βάση δεδομένων να παραμένει καθαρή.
-
Αφαιρεί όλα τα σχετικά δεδομένα, συμπεριλαμβανομένων:
-
Postmeta
-
Συσχετίσεων όρων (κατηγορίες, ετικέτες)
-
Καταχωρήσεων στους πίνακες product lookup
-
Αναφορών του WP All Import
-
-
Τέλος, διαγράφει τα ίδια τα posts (
productκαιproduct_variation).
Βέλτιστες πρακτικές
-
✅ Πάντα να δοκιμάζετε σε staging πριν το τρέξετε σε production.
-
✅ Ελέγξτε διπλά την τιμή του
@IMPORT_ID. -
✅ Κάντε ένα πλήρες backup της βάσης πριν την εκτέλεση.
-
✅ Τρέξτε τα queries μέσω phpMyAdmin ή WP-CLI με
wp db query.