无需创建WP页面即可自定义页面插件

时间:2017-05-04 作者:Riyas Muhammed

我正在开发一个可湿性粉剂插件,其中我有一个名为我的帐户的可湿性粉剂页面,但我还有一些类似帐户编辑、帐户杂项等的子页面。。。所以我想这样称呼这些页面mydomain.com/my-account/account-editmydomain.com/my-account/account-misc 我不知道如何在不创建WP页面的情况下做到这一点,我已经尝试了一些add_rewrite_rule 但这并没有达到我的预期。

以下是我的更新代码:

add_filter(\'query_vars\', \'add_account_edit_var\', 0, 1);
function add_account_edit_var($vars){
    $vars[] = \'account-edit\';
    return $vars;
}

add_action( \'init\', \'add_account_edit_rule\' );
function add_account_edit_rule() {
    add_rewrite_rule(
        \'^my-account/account-edit([^/]*)/?\',
        \'index.php?pagename=my-account&account-edit\',
        \'top\'
    );
}
工作完全正常,我调用了url my account/account edit/Page template结果:Array ( [pagename] => my-account [account-edit] => )

我再次添加了一个重写:

add_filter(\'query_vars\', \'add_account_misc_var\', 0, 1);
function add_account_misc_var($vars){
    $vars[] = \'account-misc\';
    return $vars;
}

add_action( \'init\', \'add_account_misc_rule\' );
function add_account_misc_rule() {
    add_rewrite_rule(
        \'^my-account/account-misc([^/]*)/?\',
        \'index.php?pagename=my-account&account-misc\',
        \'top\'
    );
} 
它在模板页面中不起作用,我调用了url my account/account misc/page loaded,但结果是Array ( [pagename] => my-account ) 不返回“帐户杂项”

所以我无法检查哪一页等。。。

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

很接近了,传递页面slug的查询变量是pagename:

add_filter(\'query_vars\', \'add_account_edit_var\', 0, 1);
function add_account_edit_var($vars){
    $vars[] = \'account-edit\';
    return $vars;
}

add_action( \'init\', \'add_account_edit_rule\' );
function add_account_edit_rule() {
    add_rewrite_rule(
        \'^my-account/([^/]*)/?\',
        \'index.php?pagename=my-account&account-edit\',
        \'top\'
    );
}
要捕获规则中的值,需要将值传入$matches[1]:

add_rewrite_rule(
    \'^my-account/([^/]*)/?\',
    \'index.php?pagename=my-account&account-edit=$matches[1]\',
    \'top\'
);

相关推荐

如何将Page-{slug}.php这样的页面模板文件移到子目录中?

我想移动页面模板文件,如page-{slug}.php 到我的主题中的子目录,WordPress将自动识别它们。如果所述表单的页面模板在子目录中不存在,那么WordPress应该回到默认的模板加载规则。我如何才能做到这一点?Note-1: This 对于页面模板和this 链接提及template-parts/page, 这不是一回事。Note-2: 我有多个page-{slug}.php 像页面模板文件一样,我想将它们移动到子目录中,以获得更整洁的文件组织。