Как отобразить пользовательский термин таксономии в метаданных одной записи
У меня есть пользовательская таксономия под названием "Источники" (с использованием пользовательского интерфейса пользовательского типа сообщений), где источниками являются названия публикаций, в которых были первоначально опубликованы статьи. Каждое сообщение представляет собой статью с выбранным источником. Что мне нужно сделать, так это показать источник в метаданных под заголовком сообщения. Я использую тему 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 );
}
Кроме этого, я не уверен, какая еще информация мне нужна. Любая помощь будет очень признательна! Имейте в виду, что я в этом деле большой любитель.
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/
Разобрался с этим с помощью нескольких учебных пособий. Вот код, который я сейчас использую:
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 - это то, что я сейчас использую.