更新,代码现在正在运行。
我有以下代码,但不经意的是它没有按预期工作。它应该将分类法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);
}
答案 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以逗号分隔的字符串作为第二个参数,而不是数组