web-dev-qa-db-fra.com

Réécriture personnalisée avec les vars de requête

Cela fait des heures que je suis coincé là-dessus et j'ai essayé toutes ces méthodes, mais aucune ne semble fonctionner. J'ai vu d'autres discussions avec un problème similaire mais les solutions ne fonctionnent pas pour moi. J'espère que quelqu'un peut aider.

J'ai une page avec un modèle personnalisé utilisant le permalien

example.com/central

Cette page accepte les variables de requête, par exemple:

example.com/central/?information=people

J'essaie de faire fonctionner une règle de réécriture personnalisée afin que, lorsque les gens tapent

example.com/central/information/people

il affichera quoi

example.com/central/?information=people

est-ce que.

actuellement dans mon modèle functions.php j'ai

function add_query_vars_filter( $vars ){
  $vars[] = "information";
  return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );

function custom_rewrite_tag() {
  add_rewrite_tag('%information%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);

function custom_rewrite()
{
        add_rewrite_rule('^(.+)/information/(.+)/?$','index.php?p=64476&information=$matches[2]','top');
}
add_action('init', 'custom_rewrite');

Quand je visite

example.com/central/information/people 

Je suis seulement pris à

example.com/central/

Mon deuxième problème est que p = 64476 est codé en dur, comment puis-je obtenir l'id de $ matches [1]?

1
Ch3n

Essayez ceci, j'ai fait un test rapide et cela a fonctionné pour moi. J'ai créé une page appelée central.

N'oubliez pas de vider les règles de réécriture après avoir inséré ce code.

add_filter( 'query_vars', 'query_vars' );
function query_vars( $vars )
{
    array_Push($vars, 'information');
    return $vars;
}

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules )
{
    $newrules = array();
    $newrules[ 'central/information/people/?$' ] = 'index.php?pagename=central&information=people';

    return $newrules + $rules;
}
1
David Labbe

Ajouter un point de terminaison de réécriture au lieu d'une règle de réécriture et d'une requête var. Cette fonction API fera ces deux choses pour vous.

function wpd_add_my_endpoint(){
    add_rewrite_endpoint( 'information', EP_PAGES );
}
add_action( 'init', 'wpd_add_my_endpoint' );

Toute page peut maintenant avoir information ajouté à la fin, et la valeur sera disponible via get_query_var('information').

1
Milo