使用插件加载包含自定义内容的页面模板

时间:2013-09-14 作者:A.Jesin

我想加载page.php 如果请求包含特定的查询字符串,则使用我指定的内容(使用变量而不是来自数据库)创建模板。

假设用户请求example.com/?var1=str1 页面模板应该显示我使用变量指定的标题和内容。

这是我试图实现的伪代码

<?php
function my_page_function() {
if($_REQUEST[\'var1\'] == "str1")
{
$title="This will be the title of the default page template";
$content="This content will be displayed on the default page template.";
//Load the page.php here with the title and content specified in the variables above
}
}
add_action("template_redirect","my_page_function");
?>
我希望在插件中使用此代码,因此它应该可以用于任何主题的页面。php。

2 个回复
SO网友:Milo

您可以通过打开过滤器来实现这一点the_contentthe_title:

function wpa_content_filter( $content ) {
    if( isset( $_REQUEST[\'var1\'] ) && $_REQUEST[\'var1\'] == "str1" ) {
        return \'This content will be displayed on the default page template.\';
    }
    return $content;
}
add_filter( \'the_content\', \'wpa_content_filter\', 999 );

SO网友:Chip Bennett

在插件中创建模板文件,例如。template-pluginname.php, 然后钩住template_include 并告诉WordPress使用它:

function wpse114181_template_include( $template ) {
    return ( \'\' != get_query_var( \'plugin_key\' ) ? plugin_dir_path( __FILE__ ) . \'template-plugin.php\' : $template );
}
add_filter( \'template_include\', \'wpse114181_template_include\' );
注意:这要求您使用add_query_arg(), 但比依赖$_REQUEST 直接地

根据此注释编辑:

这段代码唯一的问题是,正如我前面所说的,我想通过插件来正确处理任何主题。因此,如果我自己设计一个模板文件,它看起来不像当前激活的主题页面。php

如果您完全打算覆盖帖子标题和帖子内容,那么您可以使用the_titlethe_content 过滤器:

function wpse114181_filter_the_title( $title ) {
    if ( is_page() && \'\' != get_query_var( \'plugin_key\' ) ) {
        return \'Your Post Title Here\';
    } else {
        return $title;
    }
}
add_filter( \'the_title\', \'wpse114181_filter_the_title\' );

function wpse114181_filter_the_content( $content ) {
    if ( is_page() && \'\' != get_query_var( \'plugin_key\' ) ) {
        return \'Your Post Content Here\';
    } else {
        return $content;
    }
}
add_filter( \'the_content\', \'wpse114181_filter_the_content\' );

结束

相关推荐