Тег записи WordPress и пользовательское поле

26 сент. 2011 г., 15:10:22
Просмотры: 3.24K
Голосов: 1

У меня есть сайт на WordPress, где я использовал пользовательские поля, но теперь я хочу автоматически использовать это пользовательское поле в качестве тега записи.

У кого-нибудь есть идеи как это сделать?

Спасибо.

0
Все ответы на вопрос 3
1

Для преобразования старых произвольных полей вы можете написать плагин, который при активации получает все записи с именем вашего произвольного поля и преобразует их в метки с помощью удобной функции wp_set_post_terms.

Сначала установите несколько констант с именами ваших полей и типом записи.

<?php
/**
 * ИЗМЕНИТЕ ЭТО! Какое имя у вашего произвольного поля?
 */
define( 'WPSE29498_FIELD', 'custom_field_name' );


/**
 * ИЗМЕНИТЕ ЭТО! Какой тип записи?
 */
define( 'WPSE29498_TYPE', 'post' );

Затем функция хука активации:

<?php
register_activation_hook( __FILE__, 'wpse29498_field_to_tag' );
function wpse29498_field_to_tag()
{
    $posts = get_posts(
        array(
            'post_type'     => WPSE29498_TYPE,
            'post_status'   => array( 'publish', 'draft', 'pending', 'future' ),
            'numberposts'   => -1,
            'meta_key'      => WPSE29498_FIELD
        )
    );

    if( empty( $posts ) ) return;

    foreach( $posts as $p )
    {
        if( $meta = get_post_meta( $p->ID, WPSE29498_FIELD, true ) )
        {
            wp_set_post_terms( $p->ID, $meta, 'post_tag', true );
        }
    }
}

И, наконец, вы можете подключиться к save_post и проверить, есть ли значение произвольного поля. Если оно есть, убедитесь, что это ещё не метка, и добавьте её, если это не так.

Не уверен, нужно ли вам это для постоянного использования или для одноразового преобразования.

<?php
add_action( 'save_post', 'wpse29498_save_post' );
function wpse29498_save_post( $post_id )
{
    if( $meta = get_post_meta( $post_id, WPSE29498_FIELD, true ) )
    {
        // получаем текущие метки записи
        $terms = wp_get_object_terms( $p->ID, 'post_tag', 'name' );

        // если наша метка уже есть, выходим
        if( in_array( $meta, $terms ) ) return;

        // добавляем метку, если её нет
        wp_set_post_terms( $post_id, $meta, 'post_tag', true );
    }
}

Как плагин.

2 дек. 2011 г. 22:00:44
Комментарии

Пожалуйста, сложно ли представить то же самое для преобразования в категорию вместо тега?

jjj jjj
9 июн. 2015 г. 22:55:51
0

Насколько мне известно, это невозможно сделать автоматически "из коробки". Быстрый поиск в Google показывает, что в настоящее время нет плагинов, которые могли бы выполнить эту задачу за вас.

Однако я не вижу причин, по которым нельзя было бы написать плагин для этого. Вам нужно будет использовать хук "save_post", который срабатывает каждый раз при сохранении/обновлении записи, проверять пользовательское поле и применять его как тег.

Документация по этому конкретному хуку скудна, но он упоминается здесь:

http://codex.wordpress.org/Plugin_API/Action_Reference

26 сент. 2011 г. 15:29:42
1

Я столкнулся с похожим вопросом некоторое время назад, когда кто-то спрашивал, как автоматически добавлять ключевые слова из плагина All-in-one SEO в качестве меток записи (http://www.vidalquevedo.com/how-to-add-tags/#li-comment-62)

Увидев ваш вопрос, я взял тот скрипт, который написал, и модифицировал его, чтобы он также автоматически добавлял значения произвольных полей в качестве меток записи.

Вот ссылка на скрипт и статью: http://www.vidalquevedo.com/wordpress-how-to-automatically-convert-custom-fields-to-post-tags/

Спасибо, и дайте мне знать, если это поможет!

Vq.

26 сент. 2011 г. 20:00:14
Комментарии

Я думаю, ваше решение — добавить ключевые слова 'All in one seo' в качестве тегов, как я прочитал на vidalquevedo.com/how-to-add-tags#comment-123. Я не использую All in one SEO, просто вставляю пользовательское поле в запись и хочу, чтобы оно стало тегами для этой записи.

shah parthvi shah parthvi
1 дек. 2011 г. 10:31:53