如何在单个帖子元数据上显示自定义分类术语

时间:2020-03-29 作者:Jon Fergus

我有一个称为“源”(使用自定义Post类型UI)的自定义分类法,其中源是最初发布文章的出版物的名称。每个帖子都是一篇文章,并选择了一个来源。我需要做的是在帖子标题下的元数据中显示源代码。我正在使用Avada主题。当前帖子的标题区域如下所示:

Article Title

按作者姓名|月,年

我想要的是:

Article Title

作者姓名,来源,月份,年份

下面是我在开发环境中使用的一个示例帖子:

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

我希望能够在我的孩子主题的函数中使用add\\u action来实现这一点。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 个回复
最合适的回答,由SO网友:Jon Fergus 整理而成

在几个教程的帮助下解决了这个问题。下面是我现在使用的代码:

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";

}
最终结果是:按作者分类,来源,月份,年份

示例:Joe Smith的文章,《杂志名》,1975年10月

《某个家伙的翻译》,《系列名称》,2010年1月

我已经测试了两种插入此主题的方法,都包括将上述代码放入我的子主题函数中。php文件。选项一是使用add\\u filter覆盖主题的单个post元函数add_filter( \'the_author_posts_link\', \'jwf_single_post_meta\' );. 选项二是覆盖主题的单个。php并在此处插入函数<?php echo jwf_single_post_meta(); ?>. 选项2是我现在要做的。

SO网友:mikerojas

您可以使用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/

相关推荐

MySQL query for taxonomy-meta

我直接使用MySQL,使用MySQL workbench。你能帮我写一个SQL查询all custom taxonomies 以及他们的term-meta 字段?我有一个名为(slug)的自定义分类法census-tract 以及附加到每个字段的几个自定义字段:census-tract-income-level census-tract-population我如何加入以下表格wp_terms wp_termmeta wp_term_taxonomy 要查找WHERE wp_ter