【问题标题】:Passing a variable to template file in wordpress plugin在wordpress插件中将变量传递给模板文件
【发布时间】:2019-05-15 17:34:49
【问题描述】:

在我的 wordpress 插件中,我有一个具有页面 id 的函数:

public function create_view_for_pdf() {
        $page_id = $_POST['page_id'];
        $this->template_shortcode('template.php');
    }

这里,“template_shortcode”函数包括一个位于插件目录文件夹中的模板。

private function KendoPdf_template_shortcode($template_name) {
        return include '/template/dir' . $template_name;
    }

在模板文件中,我想传递页面 id 以便我可以在那里打印内容。我怎样才能做到这一点?

注意:由于我只是包含模板文件,我想我会正常获取 $page_id 变量。但它没有用。我需要模板文件中的页面 ID,因为内容与实际页面不同。该页面也有 ACF 字段。我基本上是在为 pdf 导出创建一个新模板。这就是为什么我不能使用该页面的所有内容。

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    如果我错了,请纠正我,但是如果 page_id 在 $_POST 内,为什么要将它传递给模板文件?只需在模板文件中使用$_POST['page_id']; 访问变量即可。

    除了包含您的模板文件之外,您还可以使用file_get_contents(); 将其读入字符串并在返回之前进行所需的替换。

    另一种可能性是已经设置的全局变量:global $post;

    最后但并非最不重要的一点是,您可以将输出缓冲与ob_start();(和连续函数)一起使用。

    你看:有很多方法可以解决这个问题。

    【讨论】:

    • 由于我只是包含模板文件,我想我会正常获取 $page_id 变量。但它没有用。我需要模板文件中的页面 ID,因为内容与实际页面不同。该页面也有 ACF 字段。我基本上是在为 pdf 导出创建一个新模板。这就是为什么我不能使用该页面的所有内容。
    • @Imrul.H 当然可以,但为什么你不能使用我在这里描述的方法之一?
    • 我尝试了其他两种解决方案,但都不起作用。我在模板文件中试过这个:global $post; echo 'post id:'.$post->ID;这没有用。然后我还尝试在模板包含之前和之后使用 ob_start() 和 ob_get_clean() 。这也没有帮助。
    • 您可以尝试使用自定义全局变量吗?在包含模板之前,请执行以下操作:$page_id = $_POST['page_id']; global $template_page_id = $page_id; .... 然后在模板中执行:global $template_page_id; echo $template_page_id;
    • 成功了!但是有一点点变化。在包含文件之前:::code::global $pdf_page_id; $pdf_page_id = $_POST['page_id'];::code end::.模板文件的代码与您的示例完全相同。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    相关资源
    最近更新 更多