因为我有成千上万的文章,批量编辑是不可能的。这将需要太多的时间和999篇文章的时间WordPress已经崩溃。所以我想使用一个简单的数据库查询,但我不知道如何构建它。我如何为每个包含特定单词的帖子设置特定类别?例如,我想把每一篇包含“商业”一词的文章放入“商业”类别。我应该使用哪种查询?我尝试了我在这里找到的东西,但没有任何成功。答案总是不清楚或建议使用批量编辑功能,这是我不能使用的。
lp0sw83n1#
您可以使用WP_Query根据您的条件检索帖子,然后您可以使用wp_set_post_categories()设置您想要的类别:
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')。
functions.php
'category__not_in'
ie3xauqp2#
使用WP CLI命令是执行此操作的最佳方式:它的高性能,并使用WordPress的功能(由GeorgeP提到)。使用wp post list获取帖子列表,然后使用wp post term add设置帖子上的术语。下面是我发现的一个可能有效的Bash脚本(未经测试):
wp post list
wp post term add
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/
2条答案
按热度按时间lp0sw83n1#
您可以使用
WP_Query
根据您的条件检索帖子,然后您可以使用wp_set_post_categories()
设置您想要的类别:在上面的查询中,'s'参数用于指定搜索项。它在文章标题、文章内容和文章摘录中搜索准确的单词“business”。
它不会匹配单词的变体或部分匹配。如果你还需要单词“businesses”或“businessman”,那么你可以使用带有通配符的's'参数:
请确保只运行一次上述查询,因此不要将其留在
functions.php
文件中,否则每次加载页面时都会执行。根据你的服务器的规格,如果你有成千上万的匹配帖子,它可能会超时。只需再次运行查询,它就会完成,因为它会跳过以前运行的帖子(
'category__not_in'
)。ie3xauqp2#
使用WP CLI命令是执行此操作的最佳方式:它的高性能,并使用WordPress的功能(由GeorgeP提到)。
使用
wp post list
获取帖子列表,然后使用wp post term add
设置帖子上的术语。下面是我发现的一个可能有效的Bash脚本(未经测试):
来源:https://www.presslabs.com/code/wp-cli-guide-wp-term/