通过插件劫持get_template_part

时间:2014-03-27 12:18:32

标签: wordpress wordpress-plugin wordpress-theming

我试图做一个会改变主题行为的插件。

在主题文件中,我有一个get_template_part(' libs / templates / user_menu');

我想让我的插件“强迫”#34; get_template_part返回另一个slug文件(插件文件夹中文件的路径)。

到目前为止,这是我在插件中的代码:

function wpse21352_template_part_cb( $slug )
{
   if(slug == 'user_menu') {
     return WP_PLUGIN_URL.'/'.$slug;
   } else {
     return $slug;
   }
}

do_action( "get_template_part_user_menu", 'user_menu' );
add_action( 'wpse21352_template_part_cb', 'get_template_part_user_menu', 10, 1 );

1 个答案:

答案 0 :(得分:3)

首先,get_template_part不会返回任何内容。它根据您传递给它的参数从主题加载文件。该功能不支持过滤,这意味着您实际上无法覆盖get_template_part输出的内容。

动作get_template_part_[slug]允许您执行的唯一操作是在加载主题文件之前输出。例如,使用

function myplugin_before_login( $slug, $name ) {
    echo 'Example';
}

add_action( 'get_template_part_login', 'myplugin_before_login', 10, 2 );

将输出"示例"在调用get_template_part( 'login' );时加载主题文件之前。

操作和过滤器

但是,一般情况下,我相信您可能会误解操作和过滤器的工作原理。 WordPress Codex提供了有关其使用和使用的广泛信息。