如何从WordPress类别中删除超过400天的WordPress帖子

时间:2014-04-23 作者:q305noonce

我尝试了以下phpMyAdmin查询,试图删除wordpress类别378中超过400天的所有帖子。

DELETE a,b,c,d
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_terms e ON ( e.term_id = d.term_id )
WHERE e.term_id =378 AND DATEDIFF(NOW(), `post_date`) > 400
该查询似乎删除了整个类别及其所有帖子。如何进行phpMyAdmin查询,从该特定类别中删除任何超过400天的帖子。

我正在寻找我可以使用的确切查询;因此,我需要做的就是确保类别id是正确的,然后运行它。

我有数据库备份。

注:我的wordpress数据库包含近300000篇帖子;因此,我遇到了太多问题,导致了失败,试图从wordpress的仪表板中删除帖子。

2 个回复
SO网友:phatskat

添加注释和warning: 总是在数据库中执行任何操作之前进行备份。做一些你不想做的事情很容易就会丢失大量数据,尤其是在处理DELETE 声明。此外,如果数据库使用InnoDB作为数据库引擎,则可以使用transactions 通过BEGIN, ROLLBACK, 和COMMIT.

您的查询已关闭,但您正在指定d 在您的DELETE 子句,该子句将导致中的行wp_term_taxonomy 也要删除。wp_term_taxonomy 是将术语与分类法联系起来的内容,这就是术语从类别中删除的原因。请尝试以下操作:

DELETE
    a, -- DELETE from posts
    b, -- DELETE from term relationships
    c  -- DELETE from postmeta
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_terms e ON ( e.term_id = d.term_id )
WHERE e.term_id = 378 AND DATEDIFF(NOW(), post_date) > 400;
这有助于理解WordPress如何存储信息。无论何时创建或更新帖子,都会有三个表受到影响:

  • wp_posts 很明显,这就是WordPress存储帖子主要记录的地方
  • wp_postmeta WordPress在其中存储与帖子相关的额外信息
  • wp_term_relationships 定义post类型对象与术语的关联方式
当您想要删除帖子及其所有关系时,应该关注这些表。

最后一点注意:如果您使用代表其表名的别名,这将有助于您更容易理解像这样复杂的查询,当出现问题时,或者当您暂时不查看查询,然后返回查询时。使用更多描述性别名编写的查询示例如下:

DELETE
    p, -- DELETE from posts
    tr, -- DELETE from term relationships
    pm  -- DELETE from postmeta
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 )
LEFT JOIN wp_term_taxonomy tt ON ( tt.term_taxonomy_id = tr.term_taxonomy_id )
LEFT JOIN wp_terms t ON ( t.term_id = tt.term_id )
WHERE t.term_id = 378 AND DATEDIFF(NOW(), post_date) > 400;

SO网友:Tamer Aljabali

您必须添加“AND a.post\\u type=\'post\'”

delete a,b,c,d
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_terms e ON ( e.term_id = d.term_id )
WHERE e.term_id =378 AND DATEDIFF(NOW(), post_date) > 400
AND a.post_type=\'post\'

结束

相关推荐

Show Pages in Categories

通过将此代码添加到函数中,我创建了category函数。php:function page_category() { register_taxonomy_for_object_type(\'category\', \'page\'); } // Add to the admin_init hook of your theme functions.php file add_action( \'init\', \'page_category\' ); 但问