web-dev-qa-db-fra.com

Ajouter une règle de réécriture pour une page personnalisée

J'essayais de créer une page spécifique à l'auteur avec une URL spécifique à l'auteur et cela fonctionnait bien, mais lorsque j'ai créé cette URL, elle n'a pas été prise en compte, à la suite de 2 facteurs

  1. Conflit de noms d'auteurs (nom similaire).
  2. Option de pagination à ajouter à la page de l'auteur (pour ses publications)

voici ma règle initiale

function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('args');   
    add_rewrite_rule('writer\/(.*)','index.php?pagename=writer&args=$matches[1]','top'); 
    /*global $wp_rewrite;
    $wp_rewrite->flush_rules();*/
}
add_action('init', 'add_my_rule'); 

Ce fichier fonctionnait pour une URL, par exemple

www.myblog.com/writer/umesh-awasthi ,

mais il peut y avoir plus d’auteurs avec le même nom, ce qui créera un problème.Alors j’avais l’intention d’avoir une URL d’auteur de blog comme SO avoir

www.myblog.com/writer/001/umesh-awasthi001 est l'identifiant de l'utilisateur, qui sera toujours unique.

le deuxième problème concerne la pagination, car je suis capable de créer une pagination sur la page de l'auteur, mais lorsque l'utilisateur clique sur la deuxième page, l'URL est le suivant.

http://localhost/blog/wordpress/writer/umesh-awasthi/page/2/ donc, conformément à ma règle de réécriture d'URL, les données suivantes sont générées sous le paramètre umesh-awasthi/page/2, ce qui signifie que ma requête ne fonctionnera plus car elle attendra le nom de l'auteur sous la forme umesh-awasthi et le recevra sous la forme umesh-awasthi/page/2

Ma question est puis-je réécrire la règle afin que je devrais obtenir des données de la manière suivante dans trois variables différentes

  1. identifiant d'utilisateur
  2. nom de l'auteur
  3. le numéro de page (s'il existe) étant nouveau dans le WP et réécrit, je ne sais pas comment je peux y parvenir grâce à l'avance
4
Umesh Awasthi
function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('args');   
    $wp->add_query_var('arg_username');
    add_rewrite_rule('writer/([0-9]+)/([^/]*)/page/([0-9]+)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]&paged=$matches[3]','top');
    add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top');
    /*global $wp_rewrite;
    $wp_rewrite->flush_rules();*/
}
add_action('init', 'add_my_rule');

Cela devrait faire l'affaire. Une rewriterule pour writer/user_id/username (nom d'utilisateur n'est pas utilisé dans la rewriterule mais doit nécessairement le faire fonctionner. La deuxième rewriterule est la même, sauf qu'elle ajoute une pagination.


EDIT: ajouté arg_username dans le code ci-dessus.

7
Rob Vermeer