短码内的模板部件,意外结果

时间:2020-08-16 作者:Ted

我试图通过一个短代码调用模板部件。我在这个网站上反复阅读了关于如何实现这一点的所有内容,但在尝试了许多方法之后,仍然无法调用简单的php echo时间字符串。The file name is test-one.php .以下是我尝试过的:

function test_2( $attr ) {
    ob_start();
    get_template_part( \'test\', \'one\' );
    return ob_get_clean();
}

add_shortcode(\'test2\', \'test_2\');
<小时/>
function test_2( $attr ) {
    ob_start();
    get_template_part( \'test-one\' );
    return ob_get_clean();
}
add_shortcode(\'test2\', \'test_2\');
<小时/>
function test_2( $attr ) {
    ob_start();
    get_template_part( \'wp-content/themes/theme-name/template-parts/test-one\' );
    return ob_get_clean();
}

add_shortcode(\'test2\', \'test_2\');
模板零件代码为

<?php

echo "Current as of <br>  ".date("m-d-Y h:i:sa");
看起来应该有用,不是吗?我哪里做错了?

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

这个get_template_part() 函数不采用任何目录名,您必须显式提供它。它还与活动主题目录相关。因此,在您的许多示例中,它都是在活动主题的根中查找模板。正确的格式为:

get_template_part( \'template-parts/test-one\' );
如果愿意,可以将文件夹重命名为incincludes - 这是武断的。您只需要在函数调用中反映此更改。

另一方面,WordPress允许您传递第二个参数,并将查找由破折号连接的文件。例如,这也将起作用:

get_template_part( \'template-parts/test\', \'one\' );
这样做的好处是它允许您拥有多个“;“类型”;特定部分的。您可能有content-post.php 文件以输出您的帖子内容和content-page.php 输出页面内容。然后在主题中,您可以通过以下方式调用模板:

get_template_part( \'template-parts/content\', $post->post_type );
只是让它更具活力。

另一个旁注。任何时候,您在使用这些功能时都可以使用:

add_action( \'init\', function() {
    $template = locate_template( $template_string_here );
    printf( \'<pre>%s</pre>\', print_r( $template, 1 ) );
    die( \'end\' );
} );
这将输出WordPress试图通过访问模板的模板路径。

相关推荐

自定义php页面超出了我的主题范围

场景我正在一个域的网站上工作,该网站是多站点安装的一部分。我期待着创建一个自定义php页面,将做一些处理。可以使用Javascript从WP主站点访问此页面XMLHttpRequest我不希望此页面包含任何主题的标题、内容等,因为用户的浏览器实际上不会直接访问此页面。Example php (simplified);<?php session_start() $_SESSION["stuff"] = "things"; echo "success&q