web-dev-qa-db-fra.com

Variable statique et add_rewrite_rule?

Je construis un site Web mineur et je veux que chaque fois qu'une personne utilise un certain lien, elle est redirigée vers la page d'accueil - et un formulaire s'ouvre.

fx: www.homepage.com/example/ -----> www.homepage.com

Dans le passé, j'ai utilisé add_rewrite_rule pour rediriger des personnes avec une variable personnalisée - et je peux facilement les rediriger en utilisant simplement:

add_rewrite_rule('^example/?','index.php','top');

Mais mon "problème" est que j'ai besoin d'une variable statique, donc je me suis dit que je pouvais faire comme suit:

 add_rewrite_rule('^example/?','index.php?key1=123','top');

Malheureusement, il semble que je ne parvienne pas à faire fonctionner cela, et lorsque j'essaie simplement de query_var ('key1'), je ne reçois rien. Qu'est-ce que je fais de mal ici?

Mise à jour 1 Tentative de liste blanche d'une variable de requête, comme indiqué dans les commentaires.

add_action('init', 'test_rewrite_rule', 10, 0);
function test_rewrite_rule() 
{
    add_rewrite_rule('^example/?','index.php?p=1&my-api=test','top');
}

//add_action('init', 'test_rewrite_tag', 10, 0);
//function test_rewrite_tag() 
//{
    //add_rewrite_tag('%my-api%', '([^&]+)');
//}

add_filter( 'query_vars', 'wpd_query_vars' );
function wpd_query_vars( $query_vars )
{
    $query_vars[] = 'my-api';
    return $query_vars;
}

et pour obtenir la variable

  $wp_query->query_vars['my-api'] 

Mise à jour 2

Pour que ce soit parfaitement clair, je ne me soucie pas vraiment de la variable qu'il a transmise avec mon itinéraire de réécriture, tant que je suis capable de voir qu'il a été redirigé :)

1
Mac

Vous ne pouvez pas ajouter de variables de requête arbitraires aux règles de réécriture, il existe une liste blanche de variables autorisées.

Pour ajouter une variable de requête, utilisez le filtre query_vars, par exemple. ce filtre ajoute my-api en tant que variable de requête valide:

function wpd_query_vars( $query_vars ){
    $query_vars[] = 'my-api';
    return $query_vars;
}
add_filter( 'query_vars', 'wpd_query_vars' );

Mais cela vous donne juste la variable de requête, vous devez toujours faire quelque chose avec elle . Les règles de réécriture mappent les jolies URL sur les variables de requête, rien de plus. C'est pourquoi une règle de réécriture qui ne mappe pas sur index.php ne fonctionnera pas.

Au lieu de cela, vous devez ensuite écrire un crochet qui recherche le moment où votre nouvelle variable de requête est définie et, le cas échéant, effectuez ce que vous souhaitez que cette page fasse.

La plupart des gens utilisent le hook template_redirect et chargent un modèle personnalisé, par exemple.

add_action( 'template_redirect', 'custom_page_template_redirect' );
function custom_page_template_redirect() {
    global $wp_query;
    $custom_page = $wp_query->query_vars['my-api'];
    if ( $custom_page == 'key' ) {
        // we've found our page, call render_page and exit
        echo "hooray! it works!";
        exit;
    }
}

Au lieu de sortir Hourra ou de charger un modèle, vous appelez wp_safe_redirect() pour rediriger l'utilisateur vers une destination de votre choix (ou wp_redirect s'il est hors site).

1
Tom J Nowell