需要帮助将ECHO转换为返回,以便与短码一起使用

时间:2019-06-26 作者:akdream

我不太擅长编码,但我设法写了一段代码,用一个短代码在帖子中显示合著者(合著者加插件)的简历/描述。

我想出的密码是

<?php function torque_hello_world_shortcode() { ?>
<?php if ( function_exists( \'get_coauthors\' ) ) ?>
<?php $coauthors = get_coauthors(); ?>
<?php foreach ( $coauthors as $coauthor ) { ?>
    <div><span class="authorboxsinglename"><?php echo ( $coauthor->display_name ); ?></span></div>
    <div><span class="authorboxsinglebio"><?php echo ( $coauthor->description ); ?></span></div>
<?php } ?>
<?php } ?>
它是有效的,除了:内容出现在帖子的最顶端,而不是我放短码的地方。在我读过的某个地方,可能是因为我使用了回声而不是返回。

由于我不擅长编码,我不知道如何将代码更改为return。有人能帮我吗?非常感谢。

你好,塞德里克

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

有两种方法。

首先,您可以将任何HTML放入字符串中,并将其与., 和.= 将字符串添加到现有值。这样,您可以构建一个大字符串,并在末尾返回它:

function torque_hello_world_shortcode() {
    $html = \'\';

    if ( function_exists( \'get_coauthors\' ) ) {
        $coauthors = get_coauthors();

        foreach ( $coauthors as $coauthor ) {
            $html .= \'<div><span class="authorboxsinglename">\' . $coauthor->display_name . \'<span></div>\';
            $html .= \'<div><span class="authorboxsinglebio">\' . $coauthor->description . \'</span></div>\';0
        }
    }

    return $html;
}
(您不需要在每一行上都有打开的PHP标记。)

或者,您可以使用“输出缓冲”来捕获所有输出,然后在最后返回它。这在处理大量HTML时更有用。开始捕获使用ob_start() 并使用ob_get_clean():

function torque_hello_world_shortcode() {
    ob_start();

    if ( function_exists( \'get_coauthors\' ) ) {
        $coauthors = get_coauthors();

        foreach ( $coauthors as $coauthor ) {
            ?>

            <div><span class="authorboxsinglename"> <?php echo $coauthor->display_name; ?> <span></div>
            <div><span class="authorboxsinglebio"> <?php echo $coauthor->description; ?> </span></div>

            <?php
        }
    }

    return ob_get_clean();
}

SO网友:Camille V.

要返回某些内容,需要创建如下字符串变量:

$output = \'<div><span class="authorboxsinglename">\'.$coauthor->display_name.\' </span></div>\';
$output .= \' <div><span class="authorboxsinglebio">\'.$coauthor->description.\'</span></div>\';

return $output;
这里要知道的主要事情:

PHP concatenation operator for strings...= 将右侧的参数附加到左侧的参数$coauthor 变量,因为它们是$output 返回的字符串(然后由Wordpress shortcode函数回显)是的,关于回声不工作的原因,您是对的,如add_shortcode Wordpress Codex page :

请注意,由shortcode调用的函数不应产生任何类型的输出。短代码函数应返回用于替换短代码的文本。直接生成输出将导致意外的结果。这类似于过滤器函数的行为方式,因为它们不应该在调用中产生预期的副作用,因为您无法控制从何时何地调用它们。

此外,我删除了最后一个结束语</div> 因为它没有关闭任何东西。

相关推荐

WordPress循环中的WordPress AJAX PHP(Html)文件

我有一个Wordpress AJAX调用,它可以从PHP文件中获取原始数据。AJAX使用的是管理AJAX。php文件。然而,我需要获取的PHP文件位于页面的循环中。如果它只是包含在页面上,那么它的放置位置就是它的工作位置。总结一下:如果AJAXed的PHP文件中包含:<?php echo \'this is the file!\' ?> …一切正常。但如果有:<?php the_title(); ?> …返回空白。感谢您抽出时间阅读此文!