WordPress - Автоматически вставлять термин слаг в качестве тега на сохранение записи - PullRequest
3 голосов
/ 09 декабря 2011

ОБНОВЛЕНИЕ, код работает сейчас.

У меня есть следующий код, но, очевидно, он не работает должным образом.Следует использовать условия таксономии 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 голосов
/ 12 декабря 2011

Это не проверено, но это должен быть шаг в правильном направлении, я сделал несколько настроек и прокомментирую:

<?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-> id , PHP вызывает предупреждение о том, что $ post не является объектом. Итак, я переместил вызов на get_post наверх функции.

Небольшой трюк, который я добавил, - это возвращение пораньше, если сообщение не соответствует желаемому типу. Лучше сделать это КАК МОЖНО СКОРЕЕ, а не тратить время на вычисления, которые могут быть просто отброшены чеком дальше по линии.

Я также собрал количество циклов foreach и переименовал некоторые переменные для пояснения. Единственное, что я видел в вашем исходном коде, который, возможно, не работал должным образом, это вызов wp_add_post_tags , это задокументировано , чтобы принять строку с разделителем-запятой в качестве второго параметра, массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...