web-dev-qa-db-ja.com

カスタムページスラッグを作成せずに WP ページ

My-accountというWPページを持つWPプラグインを開発していますが、account-edit、account-miscなどの子ページがいくつかあります。だから私はこのようにこれらのページを呼び出したいと思います mydomain.com/my-account/account-edit および mydomain.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テンプレートの結果を呼び出しました: 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を呼び出しましたが、結果は Array([pagename] => my-account) は "account-misc"を返しません

だから私はどのページなどを確認することはできません...

1
Riyas Muhammed

ページスラッグを渡すためのクエリvarは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'
);
1
Milo