如何在自定义快捷代码中加载特定模板页面

时间:2018-12-22 作者:Albert

我正在为我的WP网站使用一个主题,它有自己的注册页面模板(register.php)。我正在尝试创建一个快捷码,可以在任何地方加载该模板,但我无法使其正常工作。

这是我尝试过的一件事:

function my_BP_registration_form_shortcode( $atts ) {
 ob_start();
 get_template_part( \'register\' );
 return ob_get_clean();
}
add_shortcode( \'my_BP_registration_form\', \'my_BP_registration_form_shortcode\');
这是我尝试过的另一件事:

function my_BP_registration_form_shortcode( $atts ) {
 include(\'/full/path/to/template/register.php\');
}
add_shortcode( \'my_BP_registration_form\', \'my_BP_registration_form_shortcode\');
这两件事都不管用。也许我在这方面完全错了,我只是想在默认WP注册页面之外显示注册表。

顺便说一句,这个短代码工作得很好,我可以把它放在任何我想放的地方,它会加载我放在代码中的任何内容,而不是我想要的模板。如果模板来自使用Buddypress的主题,那么它会对模板有所帮助。

编辑:需要指出的是,我尝试使用的模板位于plugins文件夹(Buddypress插件)中。我尝试将该模板复制到我的主题文件夹中,虽然文件加载很好,但效果不好,因为我假设它所依赖的Buddypress依赖项没有从该位置正确加载

1 个回复
SO网友:Fernando Baltazar

第一个代码调用模板寄存器。php此文件需要位于主题的根目录中,如果没有定义,则为模板部分定义一个子目录,如/部分/加载项/包括/模板/循环等。如果将其更改为\'register\' in the add shortcode line, 然后你可以叫它[注册]示例

function my_BP_registration_form_shortcode( $atts ) {
 ob_start();
 get_template_part( \'register\' );
 return ob_get_clean();
}
add_shortcode( \'register\', \'my_BP_registration_form_shortcode\');
在学习如何使用短代码时,尽量少用行,缩短名称

function register_form( $atts ) {
 ob_start();
 get_template_part( \'register_form\' );
 return ob_get_clean();
}
add_shortcode( \'register_form\', \'register_form\');
请注意,几乎都有相同的名字,所以在学习时,你很少会出错;只需避免使用主题已经为函数激活的名称即可。您的文件也可以重命名为register\\u form。php

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗