我正在尝试将页面模板加载到一个短代码中,这样我就可以轻松地将内容加载到任何我想要的地方。
我做了一些研究,很多人说这段代码对他们有用,但由于某种原因,这似乎无法正确加载我的模板,因为我只得到一个空白页面。
我知道短代码正在执行,因为它不显示为纯文本,所以我猜加载模板的方式有问题。
非常感谢您的帮助。
public function register(){
add_shortcode( \'sponsor_main_page\', array($this,\'my_form_shortcode\') );
$RegistrationFormId = esc_attr( get_option( \'ik_form_id\' ) );
}
function my_form_shortcode() {
ob_start();
get_template_part( \'template-sponsors.php\' );
return ob_get_clean();
}
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
get_template_part
将slug作为第一个参数,而不是filename。
所以应该是:
get_template_part( \'template-sponsors\' );
还有更多细节。。。此函数采用两个参数:
get\\u template\\u part(字符串$slug,字符串$name=null)
其中,文件名如下所示:
if ( \'\' !== $name )
$模板[]=“{$slug}-{$name}.php”;$模板[]=“{$slug}.php”;
如你所见.php
零件将自动添加。因此,您的代码将尝试加载名为template-sponsors.php.php
我想没有这样的文件。
SO网友:Sunny Johal
很可能是因为您正在添加。php到中的参数get_template_part()
. 下面是我为您的问题编写代码的方式:
Prerequisites for this example to work:
<在主题目录中创建一个名为
template-parts
.在这个目录中创建一个名为
template-sponsors.php
这是假设您的短代码是
[sponsor_main_page]
Code to put in your functions.php:
function custom_theme_load_sponsors_template() {
ob_start();
get_template_part( \'template-parts/template-sponsors\' );
return ob_get_clean();
}
add_shortcode( \'sponsor_main_page\', \'custom_theme_load_sponsors_template\' );