Required()/Include()帖子模板添加额外内容

时间:2021-08-24 作者:Andrew Konken

我使用WP端点通过Javascript请求额外的post-HTML。当我使用Postman查询端点时,我看到了添加到标记中的其他内容,而它不在我的代码中的任何地方。我有一种感觉,这是PHP错误,但我不知道是什么问题。

function get_post($data)
{
    global $post;
    $post = get_post($data[\'id\']);
    $previous_post = get_previous_post();
    $post = $previous_post;
    $markup = include(\'includes/template.php\');
    return $markup;
}
add_action(\'rest_api_init\', function () { // Add API endpoint on init
    register_rest_route(\'query-post\', \'/post/(?P<id>\\d+)\', array( 
        \'methods\' => \'GET\',
        \'callback\' => \'get_post\',
        \'permission_callback\' => \'__return_true\'
    ));
});
API返回的是带有正确post数据的呈现模板,但有一个随机1 在标记的末尾。

<div class="post">
    Hello World!                            
</div>1

1 个回复
SO网友:Andrew Konken

问题在get_post 作用

在查看文档后include()require(), 其中包括*_once() 函数的变化,问题似乎是它返回了一个关于是否包含/需要模板的布尔值,而没有抛出错误。

在更改模板要求/包括其模板文件的方式后,REST API函数仍将附加的布尔值作为返回语句的一部分,作为打印的1.

导致问题的原因实际上是return 陈述The PHP documentation for Return states:

return将程序控制返回给调用模块。在调用被调用模块后的表达式处继续执行。

如果从函数内调用,return语句将立即结束当前函数的执行,并将其参数作为函数调用的值返回。return还结束eval()语句或脚本文件的执行。

如果从全局范围调用,则当前脚本文件的执行将结束。如果包含或需要当前脚本文件,则控制权会传递回调用文件。此外,如果包含了当前脚本文件,那么给定给return的值将作为include调用的值返回。

这个return 语句正在结束函数的执行并返回已执行函数返回的值。所以我将函数更新为return 一旦执行include 功能已完成。

NOTE 我已经移除了return ,它返回了预期值,但我将其添加到get_post 作用

function get_post($data)
{
    global $post;
    $post = get_post($data[\'id\']);
    $previous_post = get_previous_post();
    $post = $previous_post;
    include(\'includes/template.php\');
    return;
}