web-dev-qa-db-fra.com

Slug de page personnalisée sans créer de WP page

Je développe un plugin WP dans lequel j'ai une page WP appelée mon-compte, mais j'ai encore quelques pages enfants de son type account-edit, account-misc, etc. Je voudrais donc appeler ces pages de cette manière mydomain.com/my-account/account-edit et mydomain.com/my-account/account-misc je ne sais pas comment Pour ce faire sans créer WP pages, j’ai essayé quelques add_rewrite_rule mais cela ne fonctionne pas comme prévu.

Voici mon code mis à jour:

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'
    );
}

cela fonctionne parfaitement, j’ai appelé l’url mon-compte/compte-edit/le résultat du modèle de page: Array ([pagename] => mon-compte [account-edit] =>)

Encore une fois, j'ai ajouté une autre réécriture:

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'
    );
} 

Son ne fonctionne pas dans la page de modèle, j'ai appelé l'URL mon-compte/compte-divers/page chargée, mais le résultat est Array ([pagename] => mon-compte) ne retournant pas "compte-divers"

Je ne peux donc pas vérifier quelle page, etc.

1
Riyas Muhammed

Vous êtes proche, la requête var pour passer le slug de page est 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'
    );
}

Pour capturer la valeur dans votre règle, vous devez transmettre la valeur dans $matches[1]:

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