“%5$s”的值在 Wordpress 类别列表中意味着什么?

What does the value of '%5$s' mean within Wordpress category listing?

我目前正在将 Wordpress 多站点编辑为 remove/repair 损坏的 link。索引页面在主页上以磁贴的形式列出了所有子博客中的所有帖子。应用于作者姓名的 link 不正确。

我已经找到它,在 content-single.php 页面中生成了一些代码来检索数据,值为 %5$s

我认为它可能是正则表达式,但我无法确认。该值看起来更像是用于从数据库中检索变量的 shorthand 表达式。进行了 google 搜索,但仍然找不到。我看到了这个手抄本页面 https://codex.wordpress.org/Function_Reference/get_the_category_list

我仍然无法理解这些值的含义。它们是什么意思?

所以我对主题中的 PHP 文件进行了追溯。首先,我在 'content-single.php' 页面中看到了这个函数,它生成了包含错误 link 的内容 <?php slqblogs_posted_on(); ?>

<div class="entry-meta">
    <?php slqblogs_posted_on(); ?>
    <span class="sep">|</span>
    <!-- AddThis Button BEGIN -->
    <div class="addthis_toolbox addthis_default_style ">
    <a href="http://www.addthis.com/bookmark.php?v=250&amp;pubid=ra-4f836b545f19f0e0" class="addthis_button_compact">Share</a>
    </div>
    <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4f836b545f19f0e0"></script>
    <!-- AddThis Button END -->
    <div class="clear"></div>
</div><!-- .entry-meta -->

很明显,我查看了 'theme-functions.php' 文件,我可以看到该函数的所有优点:

if ( ! function_exists( 'slqblogs_posted_on' ) ) :
/**
 * Prints HTML with meta information for the current post-date/time and author.
 * Create your own slqblogs_posted_on to override in a child theme
 *
 * @since slqblogs 1.2
 */
function slqblogs_posted_on() {
    printf( __( '<span class="posted-on"><a href="%1$s" title="%2$s" rel="bookmark"><time class="entry-date published" datetime="%3$s" pubdate>%4$s</time><time class="updated">%8$s</time></a></span><span class="sep">|</span><span class="byline"> <span class="author vcard"><a class="url fn n" href="%5$s" title="%6$s" rel="author">%7$s</a></span></span>', 'slqblogs' ),
        esc_url( get_permalink() ),
        esc_attr( get_the_time() ),
        esc_attr( get_the_date( 'c' ) ),
        esc_html( get_the_date() ),
        esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
        esc_attr( sprintf( __( 'View all posts by %s', 'slqblogs' ), get_the_author() ) ),
        esc_html( get_the_author() ),
        esc_attr( get_the_modified_date() )
    );
}
endif;

所以这是我在署名范围 class 中遇到值的地方:

<span class="byline"> <span class="author vcard"><a class="url fn n" href="%5$s" title="%6$s" rel="author">%7$s</a></span></span>

只是不知道如何访问 %5$s 或其他 keywords/expressions 或其他任何值。

老实说,这种 Wordpress PHP 脚本完全超出了我的深度和舒适范围。如有任何帮助,我们将不胜感激。

它用于 sprintf/printf 格式描述符中的 "swapping" 个参数,即您可以按照您喜欢的任何顺序访问参数,例如

<?php
$p1 = 'a';
$p2 = 'b';
$p3 = 'c';
$p4 = 'd';

printf('%1$s %2$s %3$s %4$s'."\r\n", $p1, $p2, $p3, $p4);
printf('%4$s %3$s %2$s %1$s'."\r\n", $p1, $p2, $p3, $p4);

打印

a b c d
d c b a

即使两个 printf 的参数 p1-p4 的传递顺序相同。 另见:http://docs.php.net/manual/en/function.sprintf.php#example-5403

<?php printf('%1$s, %2$s, %3$s, %4$s', "1 value", "2 value", "3 value", "4 value"); ?>

输出看起来像

1 value, 2 value, 3 value, 4 value