wordpress 我有成千上万的文章,我想通过一个db查询为他们设置一个类别

cgh8pdjw  于 2023-06-21  发布在  WordPress
关注(0)|答案(2)|浏览(119)

因为我有成千上万的文章,批量编辑是不可能的。这将需要太多的时间和999篇文章的时间WordPress已经崩溃。
所以我想使用一个简单的数据库查询,但我不知道如何构建它。
我如何为每个包含特定单词的帖子设置特定类别?
例如,我想把每一篇包含“商业”一词的文章放入“商业”类别。
我应该使用哪种查询?
我尝试了我在这里找到的东西,但没有任何成功。答案总是不清楚或建议使用批量编辑功能,这是我不能使用的。

lp0sw83n

lp0sw83n1#

您可以使用WP_Query根据您的条件检索帖子,然后您可以使用wp_set_post_categories()设置您想要的类别:

$category_id = get_cat_ID('business');

$args = array(
    's' => 'business',
    'post_type' => 'post',
    'posts_per_page' => -1,
    'category__not_in' => array($category_id),
);

$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        wp_set_post_categories(get_the_ID(), array($category_id));
    }
}
wp_reset_postdata();

在上面的查询中,'s'参数用于指定搜索项。它在文章标题、文章内容和文章摘录中搜索准确的单词“business”。
它不会匹配单词的变体或部分匹配。如果你还需要单词“businesses”或“businessman”,那么你可以使用带有通配符的's'参数:

$args = array(
    's' => 'business*',
    // Rest of the arguments...
);

请确保只运行一次上述查询,因此不要将其留在functions.php文件中,否则每次加载页面时都会执行。
根据你的服务器的规格,如果你有成千上万的匹配帖子,它可能会超时。只需再次运行查询,它就会完成,因为它会跳过以前运行的帖子('category__not_in')。

ie3xauqp

ie3xauqp2#

使用WP CLI命令是执行此操作的最佳方式:它的高性能,并使用WordPress的功能(由GeorgeP提到)。
使用wp post list获取帖子列表,然后使用wp post term add设置帖子上的术语。
下面是我发现的一个可能有效的Bash脚本(未经测试):

for post in $(wp post list --s=business --format=ids)
do
wp post term add $post category 'category_name'
done

来源:https://www.presslabs.com/code/wp-cli-guide-wp-term/

相关问题