2017-09-22 1 views
0

Je travaille actuellement sur un projet WordPress et suis un peu bloqué sur les règles de réécriture .htaccess.WordPress add_rewrite_rule pour une chaîne renvoyant 404

Code règle de réécriture WordPress Ma est la suivante:

if (!function_exists('check_string_id_rule')){ 
function check_string_id_rule(){ 
    add_rewrite_rule('id-check/([^/]+)','id-check/?id=$1','top'); 
} 
add_action('init', 'check_string_id_rule'); 

Avertissement: selon la documentation que je suis censé utiliser des allumettes $ [1] au lieu de 1 $. J'ai essayé cela mais, il va simplement mettre la valeur de id à "matches [1]". 1 $ semble faire l'affaire, dans une certaine mesure.

Quand je navigue à mywebsite.com/id-check/12 tout fonctionne bien et mon id a la valeur de 12.

Mes identifiants sont cependant construites sur un certain nombre de caractères contenant des lettres à partir de az, les chiffres de 0-9 et le trait d'union occasionnel '-'.

Si je navigue vers mywebsite.com/id-check/12a-5, je suis redirigé vers une page vide. WordPress semble me rediriger vers une page qui n'existe pas. Il essaie de me rediriger vers la page/12a-5. Aller à mywebsite.com/id-check/?id=12-a5 fonctionne comme prévu.

Pourquoi ma règle n'est-elle pas appliquée? J'ai vérifié le fichier .htaccess et il ne semble pas y avoir de règles concurrentes.

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteRule ^id-check/([^/]+) /id-check/?id=$1 [QSA,L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

Est-ce un peu bizarre WordPress, ou est-ce que je manque quelque chose ici?

Nous vous remercions à l'avance,

Stijn van der Pol

Répondre

0

J'ai réussi à résoudre mon problème. Il semble que mon problème résidait dans le second paramètre de ma logique add_rewrite_rule.

I partiellement suivi l'article suivant: http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/

Je sais hyperlinking est mal, mais les crédits à rlmseo.com. En bref, ils ont suggéré une approche différente de l'enregistrement des règles de réécriture. Avec quelques changements de mon propre qu'il conduisent à le code suivant ..

Dans mon functions.php:

if(!function_exists('add_rewrite_rules')){ 
    function add_rewrite_rules($aRules) { 
     $aNewRules = ['id-check/([^/]+)' => 'index.php?pagename=id-check&id=$matches[1]']; 
     $aRules = $aNewRules + $aRules; 
     return $aRules; 
    } 
} 
add_filter('rewrite_rules_array', 'add_rewrite_rules'); 

Et puis-je utiliser la logique de réécriture de balise suivante dans mon functions.php ainsi:

function id_rewrite_tag() { 
    add_rewrite_tag('%id%', '([^/]+)'); 
} 
add_action('init', 'id_rewrite_tag'); 

Puis, à mon avis, j'accéder à la variable en utilisant:

global $wp_query; 
$id = $wp_query->query_vars['id']; 

J'espère que cela est de l'aide à quelqu'un :-)