web-dev-qa-db-fra.com

Comment changer les correspondances dans add_rewrite_rule

Un des exemples utilisant la fonction add_rewrite_rule dans wordpress est

add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?page_id=12&food=$matches[1]&variety=$matches[2]','top');

Je peux comprendre où sont les correspondances [1] et les correspondances [2], mais existe-t-il un moyen de modifier ces correspondances, quelque chose comme:

add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?page_id=12&food=' . f1($matches[1]) . '&variety=' . f2($matches[2]),'top');

f1 est une fonction de matches[1] et f2 est une fonction de matches[2]

Merci beaucoup.

Modifier 1:

C'est une question très générale dont l'objectif est de comprendre la règle wordpress add_rewrite. Un exemple de fonction f1 et f2 est

function f1($string) {
if (strpos($string, '/america/')) {$string .= '-1';}
esleif (strpos($string, '/england/')) {$string .= '-2';}
return $string;
}

f2 était une fonction similaire à f1.

2
aye

Les règles de réécriture n'appellent pas les fonctions comme vous le demandez. WordPress est beaucoup plus flexible que cela, car vous pouvez exécuter votre code à n’importe quel nombre illimité de points dans le traitement de la page et ne pas être limité à cela à un moment donné dans le code lors du traitement de la règle de réécriture.

En reprenant une étape, les règles de réécriture sont conçues pour fonctionner exactement comme le fait $_GET, où vous pouvez transmettre des données via l'URL, comme domain.com/?id=123. La différence est que le id= est déterminé par la règle de réécriture, de sorte que vous pouvez avoir une jolie URL telle que domain.com/123/. Souvent, nous conservons la id dans l'URL, par exemple. domain.com/id/123/ pour éviter les conflits avec d'autres structures d'URL, mais ce n'est pas important pour l'intérêt de cette réponse.

En utilisant votre exemple, supposons que vous ayez une règle de réécriture pour les pays et que vous souhaitiez que vos URL ressemblent à /nation/america/ ou /nation/england/. Voici un exemple de règle de réécriture pour ceci:

add_rewrite_rule( '^nation/([^/]*)/?', 'index.php?nation=$matches[1]' );

Pour utiliser cette information, vous pouvez vous connecter à n’importe quelle action ou filtre après parse_query. C'est la première action disponible après que les vars de requête sont définis. Il s'agit donc de la première action où vous pouvez utiliser get_query_var . Voici un exemple:

function wpse_99414_get_nation() {
    if ( $nation = get_query_var( 'nation' ) ) {
        # This is the equivalent to your f1 function
        # $nation will either be 'america', 'england', or whatever else
        # process it however you need!
    }
}
add_action( 'parse_query', 'wpse_99414_get_nation' );

Enfin, notez que pour utiliser une requête personnalisée comme la façon dont nous avons utilisé nation, vous devez l’inscrire. Voici un exemple de cela:

function wpse_99414_query_vars( $qv ) {
    $qv[] = 'nation';
    return $qv;
}
add_filter( 'query_vars', 'wpse_99414_query_vars' );
2
Matthew Boynes

Les arguments de la fonction sont calculés au moment de l'appel de la fonction. Ainsi, lorsque la règle de réécriture est en cours d'enregistrement plutôt que lorsqu'elle est mise en correspondance et utilisée.

Vous devrez effectuer un traitement sur les valeurs correspondantes à un point différent du code.

0
Rarst