无法在我的自定义 wordpress 主题中使用 smarty 模板引擎

Can't use smarty templating engine in my custom wordpress theme

我试图在我的自定义 wordpress 主题中使用 smarty 模板引擎,但我最终收到以下错误:

Fatal error: Uncaught --> Smarty: Unable to load template 'file:index.tpl' <-- thrown in wordpresspath\inc\sysplugins\smarty_internal_template.php on line 195

对于好奇的人,这里是 smarty_internal_template.php 的第 195 行:

  /**
     * flag if compiled template is invalid and must be (re)compiled
     *
     * @var bool
     */
    public $mustCompile = null;

    /**
     * Template Id                   <--------- Line 195!!
     *
     * @var null|string
     */
    public $templateId = null;

在我的案例中调试后,错误来自 smarty_internal_templatebase.php 的第 134 行函数:

    /**
 * displays a Smarty template
 *
 * @param string $template   the resource handle of the template file or template object
 * @param mixed  $cache_id   cache id to be used with this template
 * @param mixed  $compile_id compile id to be used with this template
 * @param object $parent     next higher level of Smarty variables
 *
 * @throws \Exception
 * @throws \SmartyException
 */
public function display($template = null, $cache_id = null, $compile_id = null, $parent = null)
{
    // display template
    $this->_execute($template, $cache_id, $compile_id, $parent, 1);
}

所以我的主题文件夹层次结构很简单我有主题文件夹,里面有:

mythemefolder/Inc : 包含 smarty
所需文件的文件夹 mythemefolder/templates : 包含 smarty 模板文件的文件夹
mythemefolder/index.php wordpress 主索引文件

所以在 index.file 中,我尝试使用以下 php 代码来执行 smarty 模板:

require 'inc/Smarty.class.php';
$smarty = new Smarty;
$smarty->display('index.tpl'); //index.tpl is my template file inside the templates folder

从上面的错误我得出的结论是 Smarty 没有找到我的模板,所以我尝试使用以下方法设置模板目录:

$smarty->setTemplateDir(get_template_directory_uri().'/templates');
// I also tried these lines
//$smarty->template_dir = get_template_directory_uri().'/templates';
//$smarty->setTemplateDir('./templates');

不幸的是它没有用,有什么想法吗??

所以我在工作中没有使用正确的绝对路径。基本上不是使用给我主题 URL 的 Worpress API get_template_directory_uri() (正确的是外部内容而不是内部 PHP 服务器)。我应该使用 get_theme_file_path() 函数。

我最终写了这段代码:

<?php
require 'inc/smarty/Smarty.class.php';
$smarty = new Smarty;


//$smarty->assign("Assign_your_vars","with something");
//..

$smarty->setTemplateDir(get_theme_file_path().'/templates/');
$smarty->setCompileDir(get_theme_file_path().'/templates_c');
$smarty->setCacheDir(get_theme_file_path().'/cache');
$smarty->setConfigDir(get_theme_file_path().'/configs');
$your_template = get_theme_file_path().'/templates/your_template.tpl';
$smarty->display($your_template );
?>