使用插件中的重写URL在模板中加载新页面

时间:2019-07-28 作者:Dexter

我正在开发一个插件,需要加载一些自定义代码。但是,我希望它能够加载到模板中,同时仍然能够更改页面标题、元描述等。

我有一个重写规则设置,如下所示:

function cc_rewrite_rules()
{
  add_rewrite_rule(\'^page/form/([^/]*)-([^/]*)?$\',
       \'/wp-content/plugins/cc-plugin/pages/form.php?sign1=$matches[1]&sign2=$matches[2]\',
       \'top\'
  );
}
我添加到表单中的任何内容。php加载,但它似乎加载了基础URL中存在的任何其他内容。如何构造此页面,使其作为独立文件加载,但使用活动的WordPress主题?

此外,如何在表单中设置页面标题和元描述。php?

1 个回复
最合适的回答,由SO网友:nmr 整理而成

add\\u rewrite\\u rule($regex,$redirect,$after);

<小时>

Rewrite rules to scripts other than index.php

这个$redirect 重定向到自定义PHP脚本时,参数的工作方式略有不同,因为WordPress将这些重定向委托给.htaccess 而不是自己处理它们。因此,querystring变量的编写方式应该如下$1 而不是$matches[1].

就个人而言,我会使用重写规则指向index.php. 这样,该规则也将在Apache之外工作。

add_action( \'init\', \'se343855_rewrite_rules\' );
add_filter( \'query_vars\', \'se343855_query_vars\' );

function se343855_rewrite_rules()
{
    add_rewrite_rule(
        \'^page/form/([^/-]*)-([^/]*)?$\',
        //  Or maybe:
        // \'^page/form/([^/-]*)(?:-([^/]*))?$\',
        //
        \'index.php?sign1=$matches[1]&sign2=$matches[2]\',
       \'top\'
    );
}

function se343855_query_vars( $vars )
{
    array_push( $vars, \'sign1\', \'sign2\' );
    return $vars;
}
如果设置了查询变量,则加载自定义模板(sign1sign2):

add_filter( \'template_include\', \'se343855_template_include\', 50 );

function se343855_template_include( $template )
{
    $sign1 = get_query_var(\'sign1\', false);
    $sign2 = get_query_var(\'sign2\', false);

    if ( $sign1 !== false || $sign2 !== false ) {
        // if this code is located in plugin file
        $template =  plugin_dir_path(__FILE__) . \'/pages/form.php\';
    }
    return $template;
}
使用get_query_var() 获取的值sign1sign2.

在里面form.php 您可以使用的文件get_header()get_footer().

相关推荐