如何自动为所有帖子添加/分配类别?
对于包含1000个食谱帖子的博客,您将如何自动添加名为" recipe"所有帖子? (不替换已分配给帖子的当前类别。换句话说,每个帖子仍将保留已分配的类别,例如" chicken"" pork"" beef"类别)。
我可以手动勾选/检查"配方"在WordPress仪表板中的类别,但我正在寻找一种替代方法,也许我可以在functions.php中添加一些代码?
如果有方法可以达到这个目的......
此方法是否会添加类别" recipe"新旧帖子,或只是新帖子?
另外,如果我已经在类别中添加了一些帖子" recipe"
这个方法会添加"配方"类别TWICE到帖子,
因此导致此帖子在类别" recipe"中出现两次?
答案 0 :(得分:0)
您可以通过查看来完全创建一个类别,从URL或数据库中获取其ID。然后创建一个函数,使用$ wpdb,根据需要编写MySQL查询,添加刚从URL或数据库中获取的ID。
以下可能有一些信息可以帮助您:http://codex.wordpress.org/Class_Reference/wpdb
您希望在数据库中查看3或4个表:
wp_posts
- 查找ID和post_type列;
wp_terms
- 查找term_id和名称,查看哪个类别的ID是您的新ID,在此案例中为“食谱”。
wp_term_taxonomy
- 寻找term_id和分类,只是为了确保您使用的是类别。
所有魔法发生的地方:
wp_terms_relationship
- 其中object_id是您的帖子的ID,term_taxonomy_id是来自wp_term_taxonomy
的 term_taxonomy_id。
小心:请勿假设term_id
中的wp_terms
与term_taxonomy_id
中的wp_term_taxonomy
相同。每个都有一个列,它肯定有充分的理由。
您要执行的操作是在此处插入wp_posts.object_id
和wp_term_taxonomy.term_taxonomy_id
。
你可以运行类似的东西:
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) (SELECT DISTINCT ID, your_new_category_id FROM wp_posts WHERE post_type = "your_post_type")
更换:
your_new_category_id
=您的新类别term_taxonomy_id,来自wp_term_taxonomy
your_post_type
=在这些引号之间,post_type,如果wordpress默认,则替换为“post”
例如,假设您的新类别包含taxonomy_id 7且您的帖子是recipe_post:
INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id) (SELECT DISTINCT ID, 7 FROM wp_posts WHERE post_type = "recipe_post")
“是的伙计,但是OP希望在functions.php中运行一些东西”。
没关系:
function update_categories(){
global $wpdb;
if ($_GET['updateall'] == 'banana'){
echo "updating";
$wpdb->query("INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id) (SELECT DISTINCT ID, 7 FROM wp_posts WHERE post_type = 'recipe_post')");
}
}
add_action('wp_loaded', 'update_categories');
这将在每次加载WordPress时(通常是每个页面)挂钩,检查您是否发送GET
值等于只想运行的内容,并且只想运行一次。因此,将'banana'替换为您认为易于记忆和访问的内容:http://www.yourdomain.com/?updateall=banana
并完成了!
当然,请在结束此更新后立即删除该挂钩和该功能。
您的问题:
此方法是否会将“食谱”类别添加到新帖和旧帖,或仅添加新帖?
您的来电,如果您想要选择一系列帖子,您可以向WHERE
添加更多条件:
WHERE post_type = 'recipe_post' AND something = 'something something' AND date = 'some-good-date'
此外,如果我已经在“食谱”类别中有一些帖子,此方法会将“食谱”类别TWICE添加到帖子中,从而导致此帖子在“食谱”类别中出现两次? 强>
不,这就是IGNORE
关键字在INSERT
之后的原因。
答案 1 :(得分:0)
检查出来
http://wordpress-code-snippets.blogspot.in/2014/05/how-to-assing-category-to-post.html
Copy and Paste the Below code in you theme functions.php.
function auto_add_category ($post_id = 0) {
if (!$post_id) return;
$tag_categories = array ( // add multiple items as shown 'Tag Name' => 'Categroy Name'
'toys' => 'Kids',
'apple' => 'Fruits',
);
$post_tags = get_the_tags($post_id);
foreach ($post_tags as $tag) {
if ($tag_categories[$tag->name] ) {
$cat_id = get_cat_ID($tag_categories[$tag->name]);
if ($cat_id) {
$result = wp_set_post_terms( $post_id, $tags = $cat_id, $taxonomy = 'category', $append = true );
}
}
}
}
add_action('publish_post','auto_add_category');
?>