co-opreviews
  • 0
Новичок

Эхо значений поля пользовательской таксономии вне цикла

  • 0

У меня есть пользовательская таксономия под названием «игра»; сообщения имеют значение таксономии, т.е. Halo, которое затем имеет семь различных полей; game_name, game_genre и т. д.

Я пытаюсь повторить метаданные для пользовательской таксономии данного сообщения, хотя и без особой удачи. Небольшой фрагмент PHP, который я пытался использовать для отображения метаданных для поля game_name (предназначенного для запуска в виджете PHP), похоже, не работает. Он использует пользовательский хук, созданный плагином Simple Term Meta.

<?php
global $term;
echo get_term_meta($term->ID, 'game_name', true);
?>

Любая помощь в сортировке этого будет оценена, я не понимал, что это будет так сложно.

Share
  1. Я предполагаю, что вы пытаетесь использовать это при просмотре одного сообщения? Например, в single.php ?

    Если это так, вам нужно сначала получить термины, а затем взять мета.

    global $post;
    
    if ( $terms = get_the_terms( $post->ID, 'game' ) ) {
    
        // $term = $terms[0]; // WRONG! $terms is indexed by term ID!
        $term = array_shift( $terms ); // RIGHT! Will get first term, and remove it from $terms array
    
        echo get_term_meta( $term->term_id, 'game_name', true );
    
    }
    

    ОБНОВИТЬ

    Поскольку уровень кода увеличился, вам было бы гораздо лучше обернуть его в функцию. Поместите следующее в свой functions.php ;

    /**
     * Get the game box image for a post.
     * 
     * @param int|object $post
     * @return string
     */
    function get_game_box_image( $post = 0 )
    {
        if ( ( !$post = get_post( $post ) ) || ( !$terms = get_the_terms( $post->ID, 'game' ) ) )
            return ''; // bail
    
        $term = array_shift( $terms );
        if ( $box = get_term_meta( $term->term_id, 'game_box', true ) ) {
    
            $rel = str_replace( content_url(), '', $box );
            if ( is_file( WP_CONTENT_DIR . '/' . ltrim( $rel, '/' ) ) )
                return '<div style="text-align: center;"><img src="' . $box . '" alt="" /></div>';
        }
    
        return '';
    }
    

    Затем, чтобы отобразить изображение игрового поля, назовите его так:

    <?php echo get_game_box_image(); ?>
    

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

    • 0

Оставить ответ

You must login to add an answer.