以编程方式删除POST标签时出现问题

时间:2011-01-12 作者:user1567

我使用以下函数来检索帖子的标签,从数组中删除一个元素,然后将结果设置为帖子:

$post_tags = wp_get_post_terms( $post_id );
foreach ( $post_tags as $key => $tag) {
    $tag_string = http_build_query( $tag );
    if( 0 != strpos( $tag_string , \'tag-to-be-deleted\' ) ) {
            unset( $post_tags[$key] );
    }
}
wp_set_post_terms ($post_id, $post_tags, \'post_tag\');
然后我在wp\\u set\\u post\\u terms函数中发现了一个bug,它说$post\\u tags参数应该是字符串而不是数组。。。我做错了什么?

任何帮助都将不胜感激。

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

你的代码看起来有点笨拙,http_build_query() 绝对不是为了这样。此外,您获取的不是简单的数组,而是标记对象的数组。

我的看法:

$post_tags = wp_get_post_terms( $post_id, \'post_tag\', array( \'fields\'=>\'names\' ) );
$pos = array_search( \'tag-to-be-deleted\', $post_tags );

if( false !== $pos ) {

    unset( $post_tags[$pos] );
    wp_set_post_terms ($post_id, $post_tags, \'post_tag\');
}

SO网友:onetrickpony

wp_get_post_terms() 似乎返回了一个对象,您需要将数组传递给wp_set_post_terms:

$post_tags = wp_get_post_terms( $post_id );
$new_tags = array();
foreach ( $post_tags as $tag) {
    $tag_string = http_build_query( $tag );
    if( strpos( $tag_string , \'tag-to-be-deleted\' ) === false ) {
            $new_tags[] = $tag->name;
    }
}
wp_set_post_terms ($post_id, $new_tags, \'post_tag\');

结束

相关推荐

Tags page not for post

符合Wordpress: category page not for post\'s.我使用wordpress为flash游戏创建网站,所以我没有特定的贴子页面。我通过新贴子添加每个游戏。php?post\\u type=游戏,你可以看到这不是wordpress的常规帖子。现在我尝试对标签进行相同的处理,但再次卡住。我现在拥有的:<?php if (is_page() ) { $tag = get_post_meta($posts[0]->ID, \'tag\', true);