Метки/теги в произвольных полях

👍 Научим создавать сайты на WordPress бесплатно за 19 уроков. Подробнее →

Здравствуйте. Требуется, чтоб значение, вводимое в произвольное поле автоматически становилось меткой/тегом или чтоб определённому произвольному полю именно в данном посте соответствовали определённые метки и они были выведены в посте, как значения произвольного поля, т.е., например, так:

ИмяПроизПоля1: метка, метка, метка
ИмяПроизПоля2: метка

Или такое лучше сделать с помощью таксономии (register_taxonomy)? Выводить тогда получается в произвольное поле нужное мне значение в виде ссылки; но если метка/тег автоматом создаёт страницу, если по ней кликнуть, со всеми постами, где эта метка присвоена, то в случае с «таксонометкой» такая страница автоматом не создаётся.

Создай свой первый сайт на WordPress

oleghreb
Оцените автора
Добавить комментарий

  1. oleghreb автор

    Извиняюсь за нубство) разобрался сам. Элементарно в записи задаю нужную мне метку, а в значение нужного мне произвольного поля впихиваю HTML-код с ссылкой на страницу этой метки. (Пример: делаю к записи метку «red», а в произвольное поле «Цвет» заношу код 2012 )

    Всё оказалось очень просто. Всем спасибо.

    Ответить
    1. oleghreb автор

      *заношу код <а href="httр://сайт.ru/tag/red" rel="tag">red

      Ответить
  2. tiaurus

    Посмотрите плагин Ultimate Taxonomy Manager. Сам я не проверял, но разработчик пишет, что можно управлять любыми таксономиями с помощью произвольных полей.

    Так же есть такой метод: автоматическое создание меток из значений определенного произвольного поля.

    Определите произвольное поле, в котором вы будете через запятую вводить метки:

    define( 'TAGS_FIELD', 'custom_field_name' );
    define( 'TAGS_TYPE', 'post' );

    Конвертация значения произвольного поля в метки (текст вводится через запятую:

    register_activation_hook( __FILE__, 'tags_field_to_tag' );
    function tags_field_to_tag()
    {
        $posts = get_posts(
            array(
                'post_type'     =>TAGS_TYPE,
                'post_status'   => array( 'publish', 'draft', 'pending', 'future' ),
                'numberposts'   => -1,
                'meta_key'      => TAGS_FIELD
            )
        );
        if( empty( $posts ) ) return;
        foreach( $posts as $p )
        {
            if( $meta = get_post_meta( $p->ID, TAGS_FIELD, true ) )
            {
                wp_set_post_terms( $p->ID, $meta, 'post_tag', true );
            }
        }
    }

    Добавление меток при сохранении поста:

    add_action( 'save_post', 'tags_save_post' );
    function tags_save_post( $post_id )
    {
        if( $meta = get_post_meta( $post_id, TAGS_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 );
        }
    }

    Весь код вставляется в functions.php.

    Так же я встречал и другие методы с подобной идеей — конвертацией значения произвольного поля в метки:
    WordPress: how to automatically convert custom fields to post tags
    Add meta tags to WordPress with custom fields

    Ответить
  3. oleghreb автор

    спасибо. тоже очень пригодится.

    Ответить
  4. oleghreb автор

    по описанному вами методу «автоматическое создание меток из значений определенного произвольного поля» получилось: метки из произвольного поля создаются чётко как одиночные, так и списком через запятую. Но в посте в произвольных полях значения метками (т.е. ссылками) не стали, а по-прежнему выводятся, как обычный текст. Дело в выводе произвольных полей? сейчас у меня так:

    <?php $pole1 = get_field(pole1); ?>
    <?php if($pole1!="") { echo "Пример:   ".$pole1.""; } ?>
    
    Ответить
    1. tiaurus

      Так а зачем вы выводите содержимое произвольного поля? Выводите метки или делайте произвольные поля ссылками на страницы меток (../tag/значение).

      Ответить
  5. oleghreb автор

    В знании функций PHP полный ноль, только на логике выезжаю иногда. Я понимаю, что $pole1 в echo — это вывод содержимого произвольного поля. Мне нужно, чтобы созданные метки по содержимому именно этого произвольного поля тут выводились, а метки по второму полю выводились соответственно рядом со вторым полем… Т.е. мне не нужно выводить ВСЕ метки поста в куче, а нужно распределить их, как задано произвольными полями. Если такое возможно — с кодом плз… как я понимаю, должен быть цикл какой-то, потому что меток в одном произвольном поле может быть несколько?

    Ответить
  6. oleghreb автор

    делайте произвольные поля ссылками на страницы меток (../tag/значение).

    — это можно, но при большом кол-ве меток и постов это тяжело постоянно делать, вот я и думал, что возможно немного автоматизировать это путём функций. Половина дела сделана — метки из содержимого поля создаются, осталось их в таком же порядке и раздельности по полям выводить)

    Ответить
    1. ana

      У вас получилось как-то это решить? у меня точно такая же проблема.

      Ответить