web-dev-qa-db-fra.com

Besoin d'aide avec rewrite_rules_array

J'ai une page à laquelle j'accède à/category/tasks et le fichier se trouve à wp-content/themes/my-theme/tasks.php. Je voudrais le faire afin que je puisse ajouter un indicateur après les tâches et ramasser la requête forte dans tasks.php. Cela fonctionne bien lorsque j'accède à la page avec/catégorie/tâches /? Quand = à venir.

Quelqu'un peut-il me dire comment utiliser rewrite_rules_array afin qu'il envoie la variable via la chaîne de requête en utilisant la structure d'URL/catégorie/tâches/à venir?

3
user1462

Essaye ça:

function when_rewrite_rules( $wp_rewrite ) {
  $new_rules = array();
  $new_rules['category/tasks/(\d*)$'] = 'index.php?when=$matches[1]';
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules','when_rewrite_rules');
4
Bainternet

Ce n'est pas très difficile Vous ajoutez une nouvelle règle de réécriture qui accepte votre format d'URL et définit les vars de requête corrects (vous pouvez choisir le nom de votre choix, tant qu'il est unique). Il existe de nombreuses façons d’ajouter des règles de réécriture. Je préfère add_rewrite_rule(). Assurez-vous de vider les règles une fois que vous avez fait cela (à partir de votre code ou en visitant la page Permaliens .).

add_action( 'init', 'wpse8764_init' );
function wpse8764_init()
{
    add_rewrite_rule( 'category/tasks/upcoming/?$', 'index.php?pagename=category/tasks&wpse8764_var=upcoming', 'top' );
}

Cette variable de requête ne sera pas transmise à $wp_query sauf si vous l'ajoutez au public query vars . Après cela, vous pouvez y accéder avec get_query_var( 'wpse8764_var' ).

add_filter( 'query_vars', 'wpse8764_query_vars' );
function wpse8764_query_vars( $query_vars )
{
    $query_vars[] = 'wpse8764_var';
    return $query_vars;
}
1
Jan Fabry

Il existe une fonctionnalité de point final permalien, mais elle est très défaillante lorsqu'elle est utilisée sans paramètre de fin.

D'une part, il y a ce problème, qui n'est résolu que dans la mesure où ils ont modifié la documentation:

http://core.trac.wordpress.org/ticket/9476

Mais le plus important est que le moteur de réécriture utilise empty () à un moment donné, détecte le noeud final comme étant vide en conséquence et le marque comme étant défini n'importe où. Il existe trois solutions de contournement.

L’une est ce que vous êtes apparemment en train de faire en ce moment, c’est-à-dire passer un paramètre GET.

Une autre consiste à accrocher init, puis à ajuster un global et à modifier le REQUEST_URI en conséquence lorsque vous détectez votre point final.

La dernière consiste à utiliser réellement un paramètre, c’est-à-dire non:

/ catégorie/tâches/à venir

mais plutôt:

/ catégorie/tâches/filtre/à venir

1
Denis de Bernardy