Как отобразить пользовательский термин таксономии в метаданных одной записи


У меня есть пользовательская таксономия под названием "Источники" (с использованием пользовательского интерфейса пользовательского типа сообщений), где источниками являются названия публикаций, в которых были первоначально опубликованы статьи. Каждое сообщение представляет собой статью с выбранным источником. Что мне нужно сделать, так это показать источник в метаданных под заголовком сообщения. Я использую тему Avada. В настоящее время область заголовка сообщения выглядит следующим образом:

Название статьи

По Имени Автора |Месяц, Год

Чего я хочу, так это это:

Название статьи

Имя автора, Источник, Месяц, Год

Вот пример сообщения, с которым я работаю в своей среде разработки:

Http://dev.universaltheosophy.com/articles/the-logos-and-meditation/

Я бы хотел иметь возможность сделать это с помощью add_action в моей дочерней теме functions.php, и прикрепите его до даты или после имени автора. Но я не уверен, как это сделать.

Все, что я вижу в одном почтовом файле темы файл:

<?php if ( 'below' === Avada()->settings->get( 'blog_post_title' ) ) : ?>
            <?php if ( 'below_title' === Avada()->settings->get( 'blog_post_meta_position' ) ) : ?>
                <div class="fusion-post-title-meta-wrap">
            <?php endif; ?>
            <?php $title_size = ( false === avada_is_page_title_bar_enabled( $post->ID ) ? '1' : '2' ); ?>
            <?php echo avada_render_post_title( $post->ID, false, '', $title_size ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
            <?php if ( 'below_title' === Avada()->settings->get( 'blog_post_meta_position' ) ) : ?>
                <?php echo avada_render_post_metadata( 'single' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
                </div>
            <?php endif; ?>
        <?php endif; ?>

И я вижу в файлах темы:

            // Render author meta data.
        if ( $settings['post_meta_author'] ) {
            ob_start();
            the_author_posts_link();
            $author_post_link = ob_get_clean();

            // Check if rich snippets are enabled.
            if ( fusion_library()->get_option( 'disable_date_rich_snippet_pages' ) && fusion_library()->get_option( 'disable_rich_snippet_author' ) ) {
                /* translators: The author. */
                $metadata .= sprintf( esc_html__( 'By %s', 'Avada' ), '<span class="vcard"><span class="fn">' . $author_post_link . '</span></span>' );
            } else {
                /* translators: The author. */
                $metadata .= sprintf( esc_html__( 'By %s', 'Avada' ), '<span>' . $author_post_link . '</span>' );
            }
            $metadata .= '<span class="fusion-inline-sep">|</span>';
        } else { // If author meta data won't be visible, render just the invisible author rich snippet.
            $author .= fusion_render_rich_snippets_for_pages( false, true, false );
        }

        // Render the updated meta data or at least the rich snippet if enabled.
        if ( $settings['post_meta_date'] ) {
            $metadata .= fusion_render_rich_snippets_for_pages( false, false, true );

            $formatted_date = get_the_time( fusion_library()->get_option( 'date_format' ) );
            $date_markup    = '<span>' . $formatted_date . '</span><span class="fusion-inline-sep">|</span>';
            $metadata      .= apply_filters( 'fusion_post_metadata_date', $date_markup, $formatted_date );
        } else {
            $date .= fusion_render_rich_snippets_for_pages( false, false, true );
        }

Кроме этого, я не уверен, какая еще информация мне нужна. Любая помощь будет очень признательна! Имейте в виду, что я в этом деле большой любитель.

Author: Jon Fergus, 2020-03-29

2 answers

Возможно, вы сможете использовать фильтр the_author_posts_link для этого:


add_filter( 'the_author_posts_link', functoin ($link) {

  global $post_id;

  // get "source" tax terms
  $sources = get_the_terms( $post_id, 'source' );

  // build html
  $html = '';

  foreach ($sources as $source) {
    $html += '<a href="'. get_term_link($source) .'">'. $source->name .'</a>';
  }

  // pre-pend html to author link

  $link = $link . $html;

  return $link;
});

Дополнительная информация: https://developer.wordpress.org/reference/functions/the_author_posts_link/

 0
Author: mikerojas, 2020-03-29 02:06:47

Разобрался с этим с помощью нескольких учебных пособий. Вот код, который я сейчас использую:

function jwf_single_post_meta() {

// CATEGORY
$categories = get_the_category();
$catoutput = '';
if ( ! empty( $categories ) ) {
    foreach( $categories as $category ) {
        $catoutput .= '<a target="_blank" href="' . esc_url( get_category_link( $category->term_id ) ) . '" alt="' . esc_attr( sprintf( __( 'View all posts in %s', 'textdomain' ), $category->name ) ) . '">' . esc_html( $category->name ) . '</a>';
    }
}

// AUTHOR
$author = get_the_author_meta( 'display_name' );
$authorlink = get_author_posts_url( get_the_author_meta( 'ID' ) );

// SOURCE   
$sources = get_the_terms( $post->ID, 'source' );
if ( ! empty( $sources ) && ! is_wp_error( $sources ) ){
foreach ( $sources as $source ) {
    $sourcename = $source->name;    
    }
$sourcelink = get_term_link( $source );
$sep = __( ',' );
}   

// DATE
$original_date = get_the_time( 'F, Y' );
// $modified_date = get_the_modified_time( 'F, Y' );
// [Last Modified: $modified_date]</span>

echo "<span class='jwf-single-meta'>$catoutput by <a href='$authorlink'>$author</a>, <em><a href='$sourcelink'>$sourcename</a></em>$sep $original_date";

}

Конечный результат: Категория по автору, Источник, Месяц, год

Примеры: Статья Джо Смита, Название журнала, Октябрь 1975 года

Перевод Какого-то Парня, Название серии, Январь 2010

Я протестировал два метода для вставки этого, оба включают в себя размещение вышеуказанного кода в моей дочерней теме functions.php файл. Первый вариант - использовать add_filter для переопределите мета-функцию одного сообщения темы add_filter( 'the_author_posts_link', 'jwf_single_post_meta' );. Второй вариант - переопределить тему single.php и вставьте туда функцию <?php echo jwf_single_post_meta(); ?>. Вариант 2 - это то, что я сейчас использую.

 0
Author: Jon Fergus, 2020-04-11 22:20:40