wordpress - 在帖子保存时自动插入术语slug作为标记

时间:2011-12-08 20:38:51

标签: php wordpress

更新,代码现在正在运行。

我有以下代码,但不经意的是它没有按预期工作。它应该将分类法TAXONOMY_NAME中的条款仅用于自定义帖子类型CUSTOM_POST_TYPE并添加为标记。


add_action('save_post','add_tags_auto');
function add_tags_auto($id) {

    $terms = get_the_terms( $post->id, 'TAXONOMY_NAME' ); // get an array of all the terms as objects.
    $add_tags = array();

    foreach( $terms as $term ) {
        $add_tags[] = $term->slug; // save the slugs in an array
    }
    $temp = array();
    $tags = get_the_tags($id);
    if ($tags) {
    foreach ($tags as $tag)
        $temp[] = $tag->name;
    }
    $tags = $temp;

    $post = get_post($id);

    if ($post->post_type != 'CUSTOM_POST_TYPE')
        return false;

    foreach ($add_tags as $t)
        if (!in_array($t,$tags))
            wp_add_post_tags($id,$add_tags);
}

1 个答案:

答案 0 :(得分:0)

这是未经测试的,但它应该朝着正确的方向迈出一步,我做了一些调整并发表评论:

<?php
add_action('save_post','add_tags_auto');
function add_tags_auto($post_id) {
    $post = get_post($post_id);

    // bail if this isn't a type of post we want to auto-tag
    if($post->post_type != 'CUSTOM_POST_TYPE')
        return false;

    // --------------------------------------------------
    // get the list of tag names from the post
    // --------------------------------------------------
    $tagNames = array();
    $tags     = get_the_tags($post_id);

    foreach($tags as $tag)
        $tagNames[] = $tag->name;

    // --------------------------------------------------
    // get the list slugs from terms in the post, any
    // slugs that aren't alredy a tag, will be marked for
    // addition automatically
    // --------------------------------------------------
    $tagsToAdd = array();
    foreach(get_the_terms($post_id, 'TAXONOMY_NAME') as $term)
        if(!in_array($term->slug, $tagNames))
            $tagsToAdd[] = $term->slug;

    // if we have some new tags to add, let's do that now
    if(!empty($tagsToAdd))
        wp_add_post_tags($post_id, implode(',', $tagsToAdd));
}

我在您的代码中看到的一个潜在问题是在尝试使用它之后设置 $ post 。我很确定在您的函数的第一行调用 $ post-&gt; id 时,PHP会发出警告 $ post 是非对象。所以我已将 get_post 的调用移至函数顶部。

我添加的一点调整是如果帖子不是所需的类型,则提前返回。最好尽快做到这一点,而不是花时间进行计算,而这些计算可能会被支票进一步放弃。

我还整合了foreach循环的数量,并重命名了一些变量以便澄清。我在原始代码中看到的唯一可能没有按预期工作的另一件事是调用 wp_add_post_tags it's documented以逗号分隔的字符串作为第二个参数,而不是数组