按错误顺序输出的快捷码

时间:2018-10-22 作者:user1676224

我有两个用于版权信息的短代码。

// Year shortcode
function year_shortcode() {
    $year = the_time(\'Y\');
    return $year;
}
add_shortcode( \'year\', \'year_shortcode\' );

// Copyright shortcode
function copyright_shortcode() {
    $copyright = \'©\';
    return $copyright;
}
add_shortcode( \'c\', \'copyright_shortcode\' );
版权信息在这里。。。

返回2018©此处的版权信息。。。

我正在尝试添加©符号作为第一个文本元素。

我还测试了ob_start()ob_get_clean() 但它们仍然以错误的顺序出现。

// Copyright shortcode
function copyright_shortcode() {
    ob_start();
    echo \'©\';
    return ob_get_clean();
}

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

the_time() 这就是问题所在。它回声其输出。短代码实际上按以下顺序发生:

分析包含短代码的文本以查找短代码echo 在短代码内部,其输出将在步骤2打印到屏幕上,而不是在步骤3中的适当位置。

所以现在发生的是:

文本,[c][year] 已分析。这个[c][year] 找到了短代码

  • [c] 已执行,以及© 存储以备以后更换
  • [year] 执行时,输出the_time() 打印到屏幕上,然后null 存储以备以后更换
  • © 打印到屏幕上,其中[c] 是的
  • [year] 被替换为nothing,因为快捷码回调没有返回任何内容
  • 因此您可以看到,年份是在版权符号之前输出的,因为它是在步骤3中作为执行短代码的一部分输出的,而在步骤4中版权符号是输出的。

    您需要更换the_time() 具有get_the_time() 以便将年份返回给$year 变量,未打印。

    结束

    相关推荐

    Shortcode with foreach

    我不能对foreach使用shortcode。它给了我语法错误。我错在哪里?function create_galeri_shortcode($atts) { $atts = shortcode_atts( array( ), $atts, \'galeri\' ); if ( has_post_format( \'gallery\' )) { $images = get_post_