web-dev-qa-db-fra.com

Wordpress URL rewrite regex

Je ne parviens pas à apprendre comment écrire cette URL dans un modèle d'expression régulière à ajouter en tant que réécriture. J'ai essayé plusieurs sandboxes regex pour le résoudre moi-même, mais ils ne permettent pas de '/', par exemple, lorsque je copie une expression à partir d'ici pour la tester:  enter image description here 

J'ai un type de publication personnalisé (publications) avec 2 taxonomies (magazine, numéro) pour lequel j'essaie de créer une URL de bonne qualité.

Donc, après de nombreuses heures, je suis venu ici pour savoir comment je peux convertir cette

index.php?post_type=publications&magazine=test-mag&issue=2016-aug

à une expression regex basée sur un modèle ( publication , magazine et issue sont constants) pouvant produire

http://example.com/test-mag/2016-aug/

et, espérons-le, avec de la place pour s’étendre si un article est suivi depuis cette page.

Merci d'avance.

3
4t0m1c

À partir des documentations wordpress - https://codex.wordpress.org/Using_Permalinks

Utilisation de% category% avec plusieurs catégories sur un message

Lorsque vous attribuez plusieurs catégories à une publication, une seule peut apparaître dans le lien permanent. Les catégories sont classées par ordre alphabétique. Dans chaque groupe de sous-catégories, l'ordre sera également alphabétique. (voir Gérer les catégories). Le poste sera toujours accessible dans toutes les catégories, comme d’habitude.

Vous pouvez cependant atteindre ce que vous voulez en créant une page avec le slug listpublications et en ajoutant le code suivant:

add_action('init', 'rewrite');
add_filter('query_vars', 'query_vars');

function rewrite(){
    add_rewrite_rule('listpublications/([^/]+)/([^/]+)/?$', 'index.php?pagename=listpublications&magazine=$matches[1]&issue=$matches[2]','top');
}

function query_vars($query_vars) {
    $query_vars[] = 'magazine';
    $query_vars[] = 'issue';
    return $query_vars;
}

Maintenant, allez dans paramètres -> permaliens et cliquez sur enregistrer. Cela va ajouter les nouvelles règles de réécriture, donc ceci est très important .

Créez maintenant un fichier de modèle dans votre dossier de thème nommé page-listpublications.php et ajoutez le code suivant entre le pied de page et l'en-tête.

 global $wp_query;

    $query_args = array(
    // show all posts matching this query
        'posts_per_page'    =>   -1,
    // show the 'publications' custom post type
        'post_type'         =>   'publications',
        // query for you custom taxonomy stuff
        'taq_query' => array(
            array(
                'taxonomy'  =>   'magazine',
                'field'     =>   'slug',
                'terms'     =>   $wp_query->query_vars['magazine']
                ),
            array(
                'taxonomy'  =>   'issue',
                'field'     =>   'slug',
                'terms'     =>   $wp_query->query_vars['issue']
                )
            )

        );

   //fetch results from DB
    $query = new WP_Query( $query_args );

    if ($query->have_posts()):  while ($query->have_posts()): $query->the_post(); 
     // do something sweet with the results
    the_content();

Le www.yourdomain.com/listpublications/test-mag/2016-aug en visite devrait vous donner toutes les publications dans le magazine test et dans le numéro 2016-août.

J'espère que cela t'aides :)

1
Florian