Получить значение произвольного поля для таксономии

3 нояб. 2013 г., 21:16:49
Просмотры: 18.6K
Голосов: 5

У меня есть произвольное поле my_cf для Таксономии/Термина. Как я могу получить и вывести значение произвольного поля для таксономии/термина?

Я пробовал использовать:

$variable = get_field('my_cf', 'basic');
  echo $variable;

где basic - название моей таксономии. Но это не работает.

Есть предложения?

7
Комментарии

get_field не является функцией ядра WordPress, ваш вопрос, похоже, содержит недостаточно информации.

Milo Milo
3 нояб. 2013 г. 21:29:13

get_field — это функция Advanced Custom Fields, я использую плагин ACF

John Genry John Genry
3 нояб. 2013 г. 21:46:50

вы читали документацию по функции get_field?

Milo Milo
3 нояб. 2013 г. 21:58:34

ок, пробую: '<?php $variable = get_field('my_cf', 'basic'); echo $variable; ?>' и ничего не выводится, где - my_cf - произвольное поле, basic - таксономия в типе записи - и my_cf = 250 значение, но вывода нет, может быть есть специфичный вывод значения произвольного поля в таксономии?

John Genry John Genry
3 нояб. 2013 г. 22:11:40

Пожалуйста, используйте [edit] вместо комментариев, чтобы показать ваш прогресс.

kaiser kaiser
3 нояб. 2013 г. 22:57:12

Вы нашли способ сделать это? Примеры у меня тоже не работают. Не уверен, нужно ли где-то указывать пользовательскую таксономию. Пробовал через DI и имя слага.

v3nt v3nt
17 нояб. 2014 г. 18:36:51
Показать остальные 2 комментариев
Все ответы на вопрос 3
0

Я не могу объяснить это лучше, чем страница документации ACF, которую я разместил в комментариях:

Все API-функции могут использоваться с термином таксономии, однако требуется второй параметр для указания ID термина. Это аналогично передаче post_id для указания конкретного объекта записи.

Необходимый $post_id — это строка, содержащая название таксономии + ID термина в следующем формате: $TaxonomyName_$TermID

Таким образом, если ваше произвольное поле называется my_cf, название вашей таксономии — basic (не название термина), а ID термина в вашей таксономии — 42, то вам нужно:

$variable = get_field( 'my_cf', 'basic_42' );
4 нояб. 2013 г. 02:01:02
2

Хранятся ли ваши данные поля в wp_options? Если да...

$term_id = 12345;
$term_meta = get_option( 'taxonomy_' . $term_id );
$my_cf = $term_meta[ 'my_cf' ];
echo $my_cf;
4 нояб. 2013 г. 00:55:55
Комментарии

ок, мой url: edit-tags.php?taxonomy=basic&post_type=products как я могу получить id таксономии? в basic custom field - my_cf, '$variable = get_field( 'my_cf', 'basic_42' ); - не работает

John Genry John Genry
4 нояб. 2013 г. 12:45:25

Когда я отвечал на этот вопрос, я не заметил, что вы используете плагин для создания пользовательских терминов. Возможно, лучше придерживаться того, как работает ACF. Если это по какой-то причине не работает, вы можете получить id термина с помощью get_term_by(). Документация: http://codex.wordpress.org/Function_Reference/get_term_by

Joey Yax Joey Yax
4 нояб. 2013 г. 20:08:46
0

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

Предположим, что вы создали пользовательское поле с именем my_cf для, скажем, таксономии с именем basic, как в вашем примере. Следующая функция может помочь ответить на ваш вопрос и, возможно, расширить использование вашего пользовательского поля.

function get_taxonomy_terms_custom_fields( $taxonomy = '' ) {

    global $post;

    $terms = get_the_terms( $post->ID, $taxonomy );

    // Проверяем, есть ли таксономия и является ли она валидной. Если нет, возвращаем false
    if ( !$taxonomy )
        return false;

    // Санитизируем ввод таксономии
    $taxonomy = filter_var( $taxonomy, FILTER_SANITIZE_STRING );

    // продолжаем играть безопасно
    if ( !taxonomy_exists( $taxonomy ) )
        return false;

    foreach ( $terms as $term ) {
    // Устанавливаем переменную для term_id таксономии
    $tax_term_id = $term->term_id;

    $my_field = get_term_meta( $tax_term_id, 'my_cf', true ); 

    // Убеждаемся, что у нас нет объекта WP_Error, не совсем необходимо, но лучше перестраховаться
    if ( is_wp_error( $term ) )
        continue;

        // экранируем возвращаемое значение // esc_html(), esc_url(), esc_attr()

        return esc_html($my_field);

    }
}

Просто используйте <?php get_taxonomy_terms_custom_fields ('basic'); ?>, заменив basic на имя вашей таксономии.

Функция get_taxonomy_terms_custom_fields () проверит указанную таксономию и вроде как пройдётся по всем категориям, назначенным записи, типу записи, а затем вернёт значение пользовательского поля, если оно есть, избегая ошибок, если его нет. Её также можно расширить для проверки поля, которое возвращает array(), например, повторяемое поле.

Надеюсь, это поможет - Удачи!

16 мая 2016 г. 18:40:39