保存新帖子时从帖子中删除类别

时间:2020-11-29 作者:OpenBayou

我的代码有问题。我试图从使用该类别的帖子中删除一个类别,然后在保存帖子时添加相同的类别。

例如,如果我有一篇帖子使用了;第一次发布“;,保存使用该类别的任何帖子时,将删除该帖子,并将正在保存的新帖子添加到该类别中;第一篇帖子;。

我正在使用的代码在保存帖子时会添加类别,但之前使用该类别的帖子不会被删除。

这是我的代码:

function save_category($post_ID){
// get all posts using \'First post\' category
$categories =  wp_get_object_terms( $post_ID, \'First post\' );
// query to get posts using \'First post\' category
if ($categories) {
    foreach ($categories as $key => $category)
    // if post is using \'First post\' category then remove the category
    if ($category->name == "First post") {
        wp_remove_object_terms( $post_ID, \'First post\', \'category\' );
    }
    return;
}
// Add \'First post\' to post when saving
wp_set_post_categories( $post_ID, get_cat_ID( "First post" ) ); 
}
add_action(\'save_post\', \'save_category\');

2 个回复
最合适的回答,由SO网友:tiago calado 整理而成

您的foreach没有括号或分号,这可能就是为什么。也不是很清楚。这里是正确识别的代码,可能只有一个,foreach结束括号可能必须在返回之后,就像下面的代码一样,或者可能就在返回之前。如果此代码不起作用,请剪切并粘贴“;退货"E;在“之后”;endforeach"E;。

function save_category($post_ID){                                     // get all posts using \'First post\' category
  $categories =  wp_get_object_terms( $post_ID, \'First post\' );
  if ($categories) {                                                  // query to get posts using \'First post\' category
    foreach ($categories as $key => $category) :
      if ($category->name == "First post") {                          // if post is using \'First post\' category then remove the category
        wp_remove_object_terms( $post_ID, \'First post\', \'category\' );
      }
      return;
    endforeach;
  }
  wp_set_post_categories( $post_ID, get_cat_ID( "First post" ) );     // Add \'First post\' to post when saving
}
add_action(\'save_post\', \'save_category\');

SO网友:hrsetyono

我没有看到你查询使用该类别的帖子,

使用get_posts 像这样:

$first_posts = get_posts([
  \'category_name\' => \'first-post\', // your category slug is
]);

foreach( $first_posts as $p ) {
  wp_remove_object_terms( $p->ID, \'first-post\' );
}