首页 > 解决方案 > 使用木材渲染插件页面

问题描述

我正在制作一个插件,它将一堆页面添加到 WP 的管理视图中。我真的很想使用 Timber,特别是 Twig 模板功能来呈现这些页面。

虽然我在 WP 和 PHP 方面的经验几乎为零,但这种方法吸引我的是我之前对 Django / Flask 模板的熟悉,它允许我扩展基本模板并为页眉、内容、页脚指定块。在使用 Timber 创建主题时,这似乎与 Timber 无关,但我终其一生都无法弄清楚如何使此设置在插件中工作。当然,我可以这样做:

    add_action( 'admin_menu', 'test_setup_menu' );
    function test_setup_menu() {
        add_menu_page(
            'Tables',
            'Tables',
            'manage_options',
            'test-tables',
            'admin_page_test'
        );
    }

    function admin_page_test() {
        Timber::Render( 'test.twig');
    }

但这当然会渲染 test.twig 已经从主题填充的页眉和页脚部分。具体问题是我希望能够向页眉或页脚块添加信息。我知道我可以这样做:

add_action('admin_head', 'add_to_head')
function add_to_head() {
    ...
}

但这正是我要避免的类型,我希望将这种类型的逻辑封装在 Twig 模板中。有什么办法可以使这项工作?

标签: wordpresstimber

解决方案


这是一个如何为插件添加自定义管理页面的示例。

<?php

/**
 * Plugin Name: Test Run
 */

  add_action('admin_menu', 'admin_menu_cb');

  function admin_menu_cb()
  {
    // Ref: https://developer.wordpress.org/reference/functions/add_menu_page/
    add_menu_page('Test Run Admin Page', 'Test Run', 'manage_options', 'test-run', 'render_menu_page_cb', 'dashicons-schedule', 3);
  }

  function render_menu_page_cb()
  {
    Timber::$locations = __DIR__.'/views';
    $data = [];
    Timber::render('main.twig', $data);
  }

有关更完整的示例,请参阅下面的 repo。我最近创建了它作为任何人在 wordpress 插件中使用 Timber 的指南。 https://github.com/chanakasan/a-wordpress-plugin-using-timber


推荐阅读