WordPress MySQL – alle benutzerdefinierten Beitragstypen löschen

Lesezeit: 2 Minuten

Benutzer-Avatar
Charlie Mc

Ich habe ein WordPress/Mysql mit dem „benutzerdefinierten Beitragstyp“ eingerichtet, der derzeit etwa 40.000 Datenzeilen in der wp_posts-Tabelle der Datenbank enthält. Ich versuche, an einer SQL-Abfrage zu arbeiten, die alle Zeilen eines bestimmten benutzerdefinierten Beitragstyps auf einmal entfernt, aber es sagt mir immer wieder, dass ich einen Syntaxfehler habe. Der Code, den ich verwende, ist unten, entschuldigen Sie, wenn es einfach ist, aber SQL ist mir fremd und ich habe Mühe, etwas in den Foren zu finden.

DELETE FROM `wp_posts`
WHERE  `post_type` =  'prefix-numberplates'
LIMIT 0 , 3000

Es gibt ` um wp_posts & post_type, aber ich kann sie hier nicht stylen. Jede Hilfe wird sehr geschätzt.

  • Die Abfrage sieht gut aus. Was ist Ihre Fehlermeldung? Wenn Sie dies über die Befehlszeile tun, haben Sie use <databasename> Erste?

    – Rauben

    21. Juli 2012 um 2:31 Uhr

global $wpdb;

// delete all posts by post type.
$sql="DELETE `posts`, `pm`
    FROM `" . $wpdb->prefix . 'posts` AS `posts` 
    LEFT JOIN `' . $wpdb->prefix . 'postmeta` AS `pm` ON `pm`.`post_id` = `posts`.`ID`
    WHERE `posts`.`post_type` = \'prefix-numberplates\'';
$result = $wpdb->query($sql);

Dadurch werden sowohl Beiträge als auch die Postmeta-Tabelle gelöscht. Es hinterließ keinen Müll in db.

Gelöst –

DELETE FROM `wp_posts`
WHERE  `post_type` =  'prefix-numberplates'

funktionierte – unteres Teil raus und gut.

  • Sie entfernen das Post-Meta nicht, indem Sie diese Abfrage ausführen, Sie hinterlassen eine Menge Müll in Ihrer Datenbank.

    – Barry Kooij

    25. März 2014 um 11:26 Uhr

Folgendes wird aus den Tabellen posts, postmeta und term_relationships entfernt:

DELETE p,tr,pm
    FROM wp_posts p
    LEFT JOIN wp_term_relationships tr
        ON (p.ID = tr.object_id)
    LEFT JOIN wp_postmeta pm
        ON (p.ID = pm.post_id)
    WHERE p.post_type="post_type_name";

Ändern Sie einfach „post_type_name“ in den CPT, den Sie entfernen möchten. Ändern Sie gegebenenfalls auch die Tabellennamenpräfixe.

Auf diese Weise stellen Sie sicher, dass Sie die richtige Tabelle erhalten – $wpdb weiß es am besten 🙂

// delete CPT posts ##
global $wpdb;

$posts_table = $wpdb->posts;

$query = "
  DELETE FROM {$posts_table}
  WHERE post_type="post_type_name" 
";

$wpdb->query($query);

delete p,m from wp_posts p left join wp_postmeta m on p.ID = m.post_id where p.post_type = "my_custom_post_type"

Benutzer-Avatar
Scully

Versuchen Sie es mit der $wpdb-Klasse.

$query = "
DELETE FROM wp_posts 
WHERE post_type="prefix-numberplates" 
LIMIT 0, 3000
";

$wpdb->query($query);

1175890cookie-checkWordPress MySQL – alle benutzerdefinierten Beitragstypen löschen

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

Privacy policy