有没有办法用插件覆盖WordPress模板?

szn*_*cki 10 wordpress

我想制作一个目标网页.如果插件检测到一些GET或POST请求,它应该覆盖wordpress主题并显示它自己的主题.

它会以某种方式工作:

if (isset($_GET['action']) && $_GET['action'] == 'myPluginAction'){
    /* do something to maintain action */
    /* forbid template to display and show plugin's landing page*/
}
Run Code Online (Sandbox Code Playgroud)

我熟悉WP Codex,但我不记得是否有任何功能可以做到这一点.当然,我用谷歌搜索没有结果.

提前感谢任何想法.

bra*_*ilo 24

你需要钩子template_include.它似乎没有记录在Codex中,但您可以在SO或WordPress StackExchange中找到更多示例

插件文件

<?php
/**
 * Plugin Name: Landing Page Custom Template
 */
add_filter( 'template_include', 'so_13997743_custom_template' );

function so_13997743_custom_template( $template )
{
    if( isset( $_GET['mod']) && 'yes' == $_GET['mod'] )
        $template = plugin_dir_path( __FILE__ ) . 'my-custom-page.php';

    return $template;
}
Run Code Online (Sandbox Code Playgroud)

插件文件夹中的自定义模板

<?php
/**
 * Custom Plugin Template
 * File: my-custom-page.php
 *
 */

echo get_bloginfo('name');
Run Code Online (Sandbox Code Playgroud)

结果

访问网站的任何网址?mod=yes将呈现插件模板文件,例如:http://example.com/hello-world/?mod=yes.