web-dev-qa-db-fra.com

Permaliens, Réécrit, Obtenir des Variables, Oh Mon!

Ok, donc je sais que c'est un titre ridicule, mais c'est exactement ce que je ressens en ce moment ..

J'ai créé des réécritures personnalisées pour WordPress et elles fonctionnent très bien. Le seul problème est que je dois maintenant ajouter de la pagination. Mes règles jouent avec la pagination et vice versa. L'URL de la page sera mis à jour lorsque je clique sur un lien de pagination, mais la requête reste la même.

Voici ce que j'ai dans mon functions.php

// ADD REWRITE FOR VIDEOS -> GROUP
add_rewrite_tag('%group%','([^&]+)');

// ADD REWRITE FOR VIDEOS -> VALUE
add_rewrite_tag('%value%','([^&]+)');

// ADD REWRITE FOR VIDEOS TO ACCEPT GROUP & VALUE
add_rewrite_rule('^car-videos/group/([^/]*)/value/([^/]*)/?','index.php?page_id=40&group=$matches[1]&value=$matches[2]','top');

Voici mon code de pagination

<div class="pagination">
                            <?php $total_pages = $loop->max_num_pages;  

                                    if ($total_pages > 1){  
                                    $current_page = max(1, get_query_var('paged'));  

                                    echo paginate_links(array(  
                                            'base' => get_pagenum_link(1) . '%_%',  
                                            'format' => 'page/%#%',  
                                            'current' => $current_page,  
                                            'total' => $total_pages, 
                                            'prev_text'    => __('Previous'),
                                            'next_text'    => __('Next')
                                        ));  
                                    }   
                            ?>
                        </div>

Voici comment j'obtiens les variables de groupe et de valeur

$urlGroup = $wp_query->query_vars['group'];
$urlValue = $wp_query->query_vars['value'];

J'utilise ceci dans mon WP_Query

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Comment pourrais-je réécrire la règle pour permettre la pagination? Y a-t-il quelque chose que je fais mal?

2
Austin Biggs

Je ne suis pas sûr, mais je pense qu'il suffit d'ajouter deux vars de requête, "groupe" et "valeur", et non deux balises de réécriture. Pouvez-vous essayer ceci:

add_filter('query_vars', 'cyb_add_query_vars');
function cyb_add_query_vars( $vars) {
    $vars[] = "group"; // name of the var as seen in the query string and URL
    $vars[] = "value";
    return $vars;
}
add_action('init','cyb_add_rewrite_rules');
function cyb_add_rewrite_rules() {
    add_rewrite_rule( '^car-videos/group/([^/]*)/value/([^/]*)/?$','index.php?page_id=40&group=$matches[1]&value=$matches[2]','top');
    //Rule for pagination
    add_rewrite_rule( '^car-videos/group/([^/]*)/value/([^/]*)/page/([0-9]{1,})/?$', 'index.php?page_id=40&group=$matches[1]&value=$matches[2]&paged=$matches[3]', 'top' );
}

Cela devrait alors fonctionner pour la pagination:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Et vous pouvez obtenir les valeurs de "groupe" et "valeur" avec ceci:

$group = get_query_var('group');
$value = get_query_var('value');
//OR
global $wp_query;
$group = $wp_query->get( 'group' );
$value = $wp_query->get('value');
4
cybmeta