需要SQL来删除旧帖子中的标签

时间:2017-07-03 作者:user3874046

我意识到Wordpress标签云对新帖子没有权重。我有成千上万的旧帖子,我不想再把它们作为标签。所以,我想做的是从旧的归档帖子中删除所有标签。所有这些旧帖子都有一个归档类别,category\\u ID为705。我需要帮助构建Mysql查询以删除category\\u id为705的帖子中的所有标记G阿诺德

2 个回复
SO网友:dbeja

要选择需要删除的所有术语ID,请执行以下操作:

select wp_terms.term_id from wp_terms
left join wp_term_taxonomy on wp_terms.term_id = wp_term_taxonomy.term_id
where wp_terms.term_id in (
    select term_taxonomy_id from wp_term_relationships where object_id in (
        select object_id from wp_term_relationships where term_taxonomy_id = 705
    )
)
and wp_term_taxonomy.taxonomy = \'post_tag\'
别忘了先创建数据库备份。

基本上,首先我获取类别ID为705的所有帖子ID(从wp\\U term\\u relationships中选择object\\u ID,其中term\\u taxonomy\\u ID=705),然后我使用这些ID获取添加到wp\\U term\\u relationships表中这些帖子的所有术语ID(从wp\\U term\\u relationships中选择term\\u taxonomy\\u ID…)最后,我通过只过滤那些标记的ID(和wp\\u term\\u taxonomy.taxonomy=\'post\\u tag\'),从wp\\u terms获得所有重要的ID。

获得所有这些ID后,可以使用它们通过SQL查询进行删除,如the_dramatist answer, 或者您可以使用Wordpress函数,以便WP能够处理拥有干净数据库所需的一切:

<?php
$ids = array(12, 23, 45, 100);
foreach($ids as $id) {
    wp_delete_term( $id, \'post_tag\' );
}
?>

SO网友:CodeMascot

好吧,考虑将任务分成多个部分。首先,我们需要获取帖子id,其中包含id为705的类别,然后我们将从这些帖子中删除标签。

现在,如果我们将这个想法转化为SQL,那么查询将是-

DELETE wp_term_relationships FROM wp_term_relationships
INNER JOIN wp_term_taxonomy ON ( wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id )
WHERE wp_term_taxonomy.taxonomy = \'post_tag\' AND wp_term_relationships.object_id IN (SELECT id
FROM (SELECT wp_posts.id FROM wp_posts
       INNER JOIN wp_term_relationships
               ON wp_term_relationships.object_id = wp_posts.id
       INNER JOIN wp_term_taxonomy
               ON wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id
       INNER JOIN wp_terms
               ON wp_term_taxonomy.term_id = wp_terms.term_id
WHERE wp_terms.term_id = 705 AND wp_term_taxonomy.taxonomy = \'category\' ) AS posts)
这是经过测试的。Don\'t forget to backup the DB first. 无论如何table prefix(wp_) 可能因设置而异。因此,请在运行查询之前检查表前缀。

希望这有帮助。

结束

相关推荐

Set post tags using tag ID

我想将post标记设置为新值。有没有办法使用tag ID 这样做?这个wp_set_post_tags 仅接受tag name 或array of tag names.<?php wp_set_post_tags( $post_ID, $tags, $append ) ?> 我想使用ID 我不想为获取完整的标记对象进行额外调用。