自动将一个标签添加到类别中的所有帖子

时间:2011-10-19 作者:Squrler

我目前正在重新设计一个有700多个帖子的网站,分为大约150个不同的类别。有些类别有2个职位,其他类别有70个。

现在,对于每个类别,我想为该类别中的所有帖子添加一个标签。

有人知道有没有一种方法可以自动为一个类别中的所有帖子添加特定的标签?

或者,唯一的方法是逐个浏览所有帖子,并为每个帖子添加一个标签,一个接一个?

非常感谢您的帮助!

1 个回复
SO网友:kaiser

一个好的起点是(一如既往地)Codex函数参考。

有一个很好的小功能可以用来向帖子添加标签或类别(或任何内置或自定义分类法):wp_set_object_terms();. 大概wp_set_post_terms(); 更易于使用。当您点击链接时,可以找到进一步的解释。

有多种方法可以做到这一点:批量添加,获取所有帖子(例如,从类别中获取)get_posts(); (或其他查询),然后遍历所有给定的post对象并添加所需的标记。你也可以尝试向你的管理UI中添加批量编辑选项,但在你的情况下,我会用最简单的方法编写一个很好的小函数,将你的标签添加到一个类别中,然后再添加一个类别来检查是否添加了标签。然后进入下一个类别。编写一些定制函数来捕获所有添加的标记(真/假)并在之后进行检查不会太多。关机时把它倒在一张漂亮的桌子上不会有什么坏处:

function wpse31531_add_tags()
{
    global $_dump_tag_check;

    // the following array can contain any taxonomy. But you have to name it inside wp_set_post_terms. If you need to add tags, use \'post_tag\' as 3rd argument.
    $tags = array( \'YOUR TAG NAME A HERE\', \'YOUR TAG NAME B HERE\' );

    $args = array( \'post_type\' => \'post\', \'numberposts\' => -1, \'post_status\' => published );
    $posts = get_posts( $args );
    foreach ( $posts as $post )
    {
        $check = wp_set_post_terms( intval( $post->ID ), $tags, \'post_tag\', true ); // set last value to false if you want to replace existing tags.
        $_dump_tag_check[ $post->ID ][\'tags\'] = $check ? explode( ", ", $tags ) : \'failed\';
    }
}
add_action( \'init\', \'wpse31531_add_tags\' );


function wpse31531_dump_tag_check()
{
    echo \'<table><thead><tr><th>Post ID</th><th>Tags</th></tr></thead><tbody>\';
    foreach ( $GLOBALS[\'_dump_tag_check\'] as $ID => $check )
        echo "<tr><td>{$ID}</td><td>{$check[\'tags\']}</td></tr>";
    echo \'</tbody></table>\';
}
add_action( \'wpse31531_dump_tag_check\', \'shutdown\' );
当你阅读链接的codex页面时,你会发现上面的代码不是现成的,更像是一个粗略的指南。如果您能用您的工作代码编辑我的答案,以供以后的读者阅读,我们将不胜感激。谢谢

结束