Php 从短代码函数内部调用WordPress get_template_part首先呈现模板
我有一个页面,我需要允许用户输入一段文字。然后在该文本之后,插入一个短代码,该短代码将呈现一个帖子列表,然后再添加更多自由格式的文本。我的想法是,他们应该能够插入一个短代码,输出帖子。通过这种方式,他们可以简单地在希望帖子出现的地方添加快捷码 我目前有检索在自己的文件中分开的帖子的逻辑。目前,我只需使用Php 从短代码函数内部调用WordPress get_template_part首先呈现模板,php,wordpress,shortcode,Php,Wordpress,Shortcode,我有一个页面,我需要允许用户输入一段文字。然后在该文本之后,插入一个短代码,该短代码将呈现一个帖子列表,然后再添加更多自由格式的文本。我的想法是,他们应该能够插入一个短代码,输出帖子。通过这种方式,他们可以简单地在希望帖子出现的地方添加快捷码 我目前有检索在自己的文件中分开的帖子的逻辑。目前,我只需使用get\u template\u part()函数即可将其包含在页面中: get_template_part('donation', 'posts'); 我研究了如何创建短代码,并将以下代码包含
get\u template\u part()
函数即可将其包含在页面中:
get_template_part('donation', 'posts');
我研究了如何创建短代码,并将以下代码包含到我的functions.php
文件中以创建短代码:
add_shortcode('donation-posts', 'fnDonatePosts');
function fnDonatePosts($attr, $content)
{
get_template_part('donation', 'posts');
}
[template_part path="includes/social-sharing"]
php正在正确执行捐赠帖子,帖子也在出现,但是,帖子总是放在内容之前,而不是放在快捷码的位置
我尝试过删除get\u template\u part()
函数,只输出一些文本,效果很好。因此,我知道get\u template\u part()
可能不是正确的方法,但是,我还没有找到一种方法来完成我正在尝试做的事情(我确信有一种方法……我只是没有找到)
我试过:
include(get_template_directory(). '/donation-posts.php');
include_once(get_template_directory(). '/donation-posts.php') :
但是一旦它们碰到包含文件中的PHP代码,就停止了处理
我也尝试过:
$file = file_get_contents(get_template_directory(). '/donation-posts.php');
return $file;
但这只返回文件的内容(如函数名所示),这意味着它不会执行PHP脚本来返回帖子
以前有人这样做过吗?您可以尝试一下,它可能会解决您的问题,因为
获取模板部分
基本上会像PHP的require
,它不会返回,但会立即在调用它的地方回显内容
add_shortcode('donation-posts', 'fnDonatePosts');
function fnDonatePosts($attr, $content)
{
ob_start();
get_template_part('donation', 'posts');
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
这里是一个更动态的版本,您可以在其中传递模板的路径
function template_part( $atts, $content = null ){
$tp_atts = shortcode_atts(array(
'path' => null,
), $atts);
ob_start();
get_template_part($tp_atts['path']);
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
add_shortcode('template_part', 'template_part');
还有短代码:
add_shortcode('donation-posts', 'fnDonatePosts');
function fnDonatePosts($attr, $content)
{
get_template_part('donation', 'posts');
}
[template_part path="includes/social-sharing"]
接受答案的最低版本:
function my_template_part_shortcode() {
ob_start();
get_template_part( 'my_template' );
return ob_get_clean();
}
add_shortcode( 'my_template_part', 'my_template_part_shortcode' );
其中my template.php
是您希望包含的文件。get\u template\u part()在functions.php中使用时对我不起作用。我在ob_start和clean中使用了locate_template()。例如:
function full_petition_shortcode( $attr ) {
ob_start();
locate_template( 'petition.php', TRUE, TRUE );
return ob_get_clean();
}
add_shortcode( 'full-petition', 'full_petition_shortcode' );
很抱歉,我花了这么长时间才做出回应,但我有一大堆项目要做,这是一个公益项目,因此它在优先事项中占有相应的位置。不管怎样,你的修复正是我需要的!非常感谢。这是一个如此丑陋的解决方案,但它是最好的(唯一的?)解决方案。太棒了,尽管如此,我告诉我这里的评论不是为了感谢你的话,我只能说,谢谢你,伟大的模块化!希望这个例子也能有所帮助: