如前所述,您不能使用get_template_part
在插件中,但有一个handy class 在Github上(由Gary Jones创建),模仿get_template_part
插件中的功能,将插件添加到回退(子主题>父主题>插件)。
通过这种方式,您可以在子主题或父主题中覆盖插件的“模板部分”。
用法(摘自Github repo说明):
复制class-gamajo-template-loader.php
插入插件。它可以放在插件根目录中的文件中,或者更好的是放在includes目录中创建新文件,例如class-your-plugin-template-loader.php
, 在同一目录中创建class
在扩展的文件中Gamajo_Template_Loader
. 重写类属性以适合您的插件。您还可以覆盖get_templates_dir()
方法,如果它不适合您现在可以实例化自定义模板加载器类,并使用它调用get_template_part()
方法这可以是在一个短代码回调中,也可以是您希望主题开发人员在其文件中包含的内容示例代码:
// Template loader instantiated elsewhere, such as the main plugin file.
$meal_planner_template_loader = new Meal_Planner_Template_Loader;
// Use it to call the get_template_part() method. This could be within
// a shortcode callback, or something you want theme developers
// to include in their files.
$meal_planner_template_loader->get_template_part( \'recipe\' );
// If you want to pass data to the template, call the set_template_data()
// method with an array before calling get_template_part().
// set_template_data() returns the loader object to allow for method chaining.
$data = array( \'foo\' => \'bar\', \'baz\' => \'boom\' );
$meal_planner_template_loader
->set_template_data( $data );
->get_template_part( \'recipe\' );
// The value of bar is now available inside the recipe template as $data->foo.
// If you wish to use a different variable name, add a second parameter
// to set_template_data():
$data = array( \'foo\' => \'bar\', \'baz\' => \'boom\' );
$meal_planner_template_loader
->set_template_data( $data, \'context\' )
->get_template_part( \'recipe\', \'ingredients\' );
// The value of bar is now available inside the recipe template as $context->foo.