在帖子页面上显示合著者

时间:2020-05-21 作者:Gusto

我正在努力使我的主题与Co-Authors Plus plugin 如果有帖子的话,给合著者看看。我花了大约30分钟的时间试图说服自己,我理解以下显示文章作者和日期的代码:

function posted_on() {
    global $post;
    $author_id=$post->post_author;
    $time_string = \'<time class="entry-date published updated" datetime="%1$s">%2$s</time>\';
    if ( get_the_time( \'U\' ) !== get_the_modified_time( \'U\' ) ) {
        $time_string = \'<time class="entry-date published" datetime="%1$s">%2$s</time><time class="updated" datetime="%3$s">%4$s</time>\';
    }

    $time_string = sprintf( $time_string,
        esc_attr( get_the_date( \'c\' ) ),
        esc_html( get_the_date() ),
        esc_attr( get_the_modified_date( \'c\' ) ),
        esc_html( get_the_modified_date() )
    );


    $posted_on = sprintf(
        __( \'<i class="entry-date">\'. get_the_date( \'F d, Y\' ) .\'</i>\' ),
        \'<a href="\' . esc_url( get_permalink() ) . \'" rel="bookmark">\' . $time_string . \'</a>\'
    );

    $byline = sprintf (
        __( \'by %s\' ),


        \'<span class="author vcard"><a class="url fn n" href="\' . esc_url( 

            get_author_posts_url( $author_id )

        ) . \'">\' . esc_html( get_the_author_meta( \'display_name\', $author_id ) ) . \'</a>\' . \'</span>\'

    );



    echo \'<span class="posted-on">\' . $posted_on . \'</span><i><span class="byline"> \' . $byline . \'</span></i>\'; // WPCS: XSS OK.
} 
所以我添加了一个函数:


        $byline = sprintf(
            __(\'by %s\'),

            /*Added this*/
            if (function_exists(\'coauthors_posts_links\')) {
                \'<span class="author vcard">\'.esc_html(coauthors_posts_links()).
                \'</span>\'
            } else {

                \'<span class="author vcard"><a class="url fn n" href="\'.esc_url(

                    get_author_posts_url($author_id)

                ).
                \'">\'.esc_html(get_the_author_meta(\'display_name\', $author_id)).
                \'</a>\'.
                \'</span>\'
            }

        );

这个函数应该像。。。

如果此帖子包含合著者,

显示作者和合著者。

如果帖子不包含合著者,

显示默认的作者链接。

但这只是个错误。可能需要一些建议。

2 个回复
最合适的回答,由SO网友:Rup 整理而成

您的错误是您编写了if 在sprintf参数列表中。你不能那样做。相反,您可以使用ternary operator, 其中包含语法

<condition> ? <result if true> : <result if false>
例如:。

$byline = sprintf(
        __(\'by %s\'),
        function_exists(\'coauthors_posts_links\')
            ? (\'<span class="author vcard">\' .
                    coauthors_posts_links( null, null, null, null, false ) . \'</span>\')
            : (\'<span class="author vcard"><a class="url fn n" href="\'.esc_url(
                    get_author_posts_url($author_id)
                ).\'">\'.esc_html(get_the_author_meta(\'display_name\', $author_id)).
                \'</a>\'.\'</span>\')
    );
(为了清晰起见,添加了括号-您可能不需要全部使用它们)
或者为帖子链接使用单独的变量,并首先使用if-else设置,例如。

if (function_exists(\'coauthors_posts_links\')) {
    $author_post_links = coauthors_posts_links( null, null, null, null, false );
} else {
    $author_post_links = \'<a class="url fn n" href="\' .
        esc_url( get_author_posts_url( $author_id ) ) .
        \'">\' . esc_html( get_the_author_meta( \'display_name\', $author_id ) ) . \'</a>\';
}
$byline = sprintf(
    __(\'by %s\'),
    \'<span class="author vcard">\' . $author_post_links . \'</span>\' );
如评论中所述

默认情况下coauthors_posts_links() 将回显链接并将其作为字符串返回,这不是您想要的。您需要传递$echo=false,这是第五个参数,因此我们需要用默认的null值填充前四个参数esc_html() 的输出coauthors_post_links() 所以我也把它去掉了

SO网友:Raashid Din

您可以创建其他可以存储的函数function exists 这样可以使代码更容易阅读。

   function custom_coauthors() 
    {
        $author = \'\';
        if (function_exists(\'coauthors_posts_links\')) {
            $author .= \'<span class="author vcard">\' . esc_html(coauthors_posts_links()) . \'</span>\';
        } else {
            $author .= \'<span class="author vcard"><a class="url fn n" href="\'.esc_url( get_author_posts_url(get_the_author_meta( \'ID\' ))).\'">\' . esc_html(get_the_author_meta(\'display_name\', $author_id)) . \'</a>\' . \'</span>\';
        }

        return $author;
    }

     $byline = sprintf(
        __(\'by %s\'),
        custom_coauthors()
    );
您还可以使用get_the_author_meta(\'ID\') 获取作者id。