1

我正在构建一个 WordPress 插件来显示与项目相关的文档。视图中需要大量的 HTML,内容来自 markdown 文件。

我想知道是否可以将Timber Plugin用于管理屏幕,以帮助保持一切清洁?我在文档中找不到任何内容。

我有一个渲染视图(由 调用add_menu_page())的函数,它工作正常。如果我echo有一些文本或 HTML,甚至回显文件的内容,我会看到我所期望的。

尝试以与我在主题中相同的方式使用 Timber,如下所示:

$context = Timber::get_context();
Timber::render(plugin_dir_url( __DIR__ ) . 'views/docs.twig', $context);

这只是给了我一个空页面,根本没有抛出任何错误。

我需要先以某种方式初始化 Timber 吗?

这是我制作的第一个插件,我的 PHP 并不出色,如果这个问题不容易理解或理解,我深表歉意。

4

2 回答 2

2

根据模板位置文档,默认情况下,Timber 在views/当前主题的目录中查找模板文件。您可以通过这种方式添加其他路径:

Timber\Timber::$locations = array(
    plugin_dir_path( __FILE__ ) . 'views/'
);

Timber 将首先查看该位置,因此插件中的模板将覆盖主题中的任何模板,如果它们共享相同的名称。

于 2017-10-17T18:39:28.287 回答
0

是的!刚刚想通了。

因此,在您functions.php的 admin 端执行添加页面的常规程序

准备函数:

function documents_menu() {
  add_menu_page('Docs', 'Docs', 'manage_options', '', 'myplguin_admin_page', 'dashicons-heart', 6);
}

然后是钩子:

add_action( 'admin_menu', 'documents_menu' );

然后是渲染器功能:

function myplguin_admin_page(){
    if ( ! class_exists( 'Timber' ) ) {
        // if you want to show some error message, this is the right place
        echo "Timber doesn't exist!";
        return;`enter code here`
}

这是关键部分:

Timber::render( 'docs.html.twig', array(
    'args' => $args,
    'instance' => $instance,
    /* any other arguments */
    ));
}

然后在你的[theme]/views,创建docs.html.twig并创建你的树枝文件!

于 2018-11-12T10:04:45.133 回答