自动为所有帖子分配类别

时间:2014-10-22 23:50:22

标签: php categories wordpress

如何自动所有帖子添加/分配类别?

对于包含1000个食谱帖子的博客,您将如何自动添加名为" recipe"所有帖子? (不替换已分配给帖子的当前类别。换句话说,每个帖子仍将保留已分配的类别,例如" chicken"" pork"" beef"类别)。

我可以手动勾选/检查"配方"在WordPress仪表板中的类别,但我正在寻找一种替代方法,也许我可以在functions.php中添加一些代码?

如果有方法可以达到这个目的......

此方法是否会添加类别" recipe"新旧帖子,或只是新帖子?

另外,如果我已经在类别中添加了一些帖子" recipe"
这个方法会添加"配方"类别TWICE到帖子,
因此导致此帖子在类别" recipe"中出现两次?

2 个答案:

答案 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_termsterm_taxonomy_id中的wp_term_taxonomy相同。每个都有一个列,它肯定有充分的理由。

您要执行的操作是在此处插入wp_posts.object_idwp_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');
  ?>