将模板部件添加为快捷代码的一部分

时间:2019-10-30 作者:Sergi

我使用“Ultimate Member”插件允许用户注册,因为我希望一些内容对未登录用户进行限制。根据他们的文档,有几个短代码,我正试图在这样的模板中使用其中一个:

<?php
    $out_content = get_template_part( \'templates/template-parts/loggedout\', \'content\' );
    do_shortcode("[um_loggedout] {$out_content} [/um_loggedout]");
?>

<?php
    $in_content = get_template_part( \'templates/template-parts/loggedout\', \'content\' );
    do_shortcode("[um_loggedin] {$in_content} [/um_loggedin]");
?>
实际上,两个模板部分都是这样输出的,这是可以做到的吗?

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

get_template_part 不返回其值,而是输出它,这是它通常使用的方式。这样想,它怎么知道echo 还是返回模板?

因此,我们使用输出缓冲区来捕获输出并将其刷新为变量,例如:

ob_start( );
echo "test";
$output = ob_get_clean();
<进一步注意,避免将变量直接嵌入PHP字符串中,如下所示:"variable: {$variable} " 而是使用串联:" variable:".$variable. 如果您直接嵌入字符串中,则无法清理escape,短代码是调用函数的一种奇特方式,因为您使用的是PHP而不是post内容,为什么不跳过中间人直接调用函数呢is_user_logged_in() 使用if (...) { .... } 声明

相关推荐

获取AJAX调用的ShortCode属性

我想给我的插件传递一个可以访问文件的文件夹,这样我就可以运行多个设置了不同文件夹的实例。我的第一个想法是用文件夹名添加一个属性。因为我使用的是AJAX,所以我需要始终访问我的短代码的属性。我找到了这样一种解决方案,将属性传递给JS,然后在发生AJAX调用时将其传回:https://wordpress.stackexchange.com/a/184219我试过了,但没用。有没有更优雅的方法?以下是我的PHP文件的重要部分:add_action(\'init\', \'wporg_shortcodes_ini