短码内容输出,但位置不正确

时间:2019-02-18 作者:Stuart Moir

我已经创建了一个从ACF转发器字段获取信息的快捷码。。。

function display_websites_shortcode() {

    ob_start();

    // check if the repeater field has rows of data
    if( have_rows(\'streaming\') ):
        while ( have_rows(\'streaming\') ) : the_row();

            // Your loop code          
            echo \'<a href="\' . the_sub_field(\'website_url\') . \'" >\' . the_sub_field(\'website_source\') . \'</a>\';     

        endwhile;
    else :
        // no rows found        
        echo \'<p>No Websites Available</p>\';            
    endif;

    return ob_get_clean();
}   
add_shortcode( \'display_websites\', \'display_websites_shortcode\' );
输出/循环有效,但内容在HTML之外。所以,与其这样。。。

<a href="http://google.com">Google</a>
我们得到这个。。。

http://google.comGoogle

我还有其他使用类似代码的短代码,我就是搞不懂这一点。我查看了其他有类似问题的帖子,但没有什么突出的地方

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

问题是在99%的情况下,the_*() 函数将回显内容。如果要分配它们,则需要使用get_*() 功能。

在您的情况下,您会重复两次,一次是在链接的开头,另一次是the_*() 函数在属性中以及开始标记和结束标记之间。它通过多次回显来中断现有的字符串连接。

您的代码应该如下所示:

echo \'<a href="\' . get_sub_field(\'website_url\') . \'" >\' . get_sub_field(\'website_source\') . \'</a>\';