web-dev-qa-db-fra.com

Empêcher Wordpress de réécrire l'URL d'un modèle

Des variantes de cette question ont été posées, mais les scénarios ne correspondent pas aux miens et malgré mes efforts, je n'ai pas été en mesure d'adopter les réponses précédentes à une solution efficace dans mon cas d'utilisation.

J'ai un modèle de page qui a une application javascript intégrée. Cette application utilise le dernier paramètre d'une URL en tant que paramètre d'une requête ajax, pour lequel elle s'exécute et génère des résultats.

En raison de préoccupations en matière de référencement et des exigences du client, je ne peux ni modifier ni modifier le fonctionnement de la syntaxe de cette requête. Je dois donc le faire fonctionner dans Wordpress (la page est en cours de conversion à partir d'une application Ruby).

Lorsque le client demande à:

https://www.wordpresssite.com/service/testing-tool/domain.com

Je dois répondre avec la page construite à l'aide du modèle à l'adresse suivante:

https://www.wordpresssite.com/service/results

Cette partie que je travaille avec la règle de réécriture suivante dans .htaccess

RewriteRule ^service/testing-tool/([a-z0-9.]+)$ /index.php?pagename=service/results [NC,L]

La réécriture fonctionne, mais WordPress modifie l’URL dans le navigateur pour

https://www.wordpresssite.com/service/results

Cela entraîne l'échec de JS car le paramètre de domaine est manquant et ne répond pas non plus aux exigences mentionnées précédemment.

Après quelques recherches, le problème est l’action redirect_canonical (). J’ai donc essayé de la supprimer du modèle:

// Disable redirect_canonical()
add_action( 'init', 'results_tweaks' );
function results_tweaks()
{
    remove_action( 'template_redirect', 'redirect_canonical' );
}

Cependant, cela ne semble pas le faire. En lisant la documentation WP, je suppose que c'est parce que l'action est déjà traitée au moment du chargement de la page.

Existe-t-il un autre moyen de remplacer cette action spécifiquement pour ce modèle et pour aucun autre? Peut-être une autre façon en dehors de supprimer l'action?

1
Routhinator

Vous pouvez utiliser une réécriture interne au lieu de .htaccess:

function wpd_service_rewrite() {
    add_rewrite_rule(
        '^service/testing-tool/([a-z0-9.]+)$',
        'index.php?pagename=service/results',
        'top'
    );
}
add_action( 'init', 'wpd_service_rewrite' );

N'oubliez pas de vider les règles de réécriture après les avoir ajoutées/modifiées.

2
Milo

Vous pourrez peut-être résoudre votre problème simplement en modifiant votre règle de réécriture en:

RewriteRule ^service/testing-tool/([a-z0-9.]+)/?$ /index.php?pagename=service/results&domain=$1 [NC,L]

Maintenant, à partir de https://www.wordpresssite.com/service/results , vous pouvez obtenir le domaine via PHP.

Notez que j'ai ajouté '/?' à votre règle, sinon cela ne devrait pas fonctionner.

En utilisant php, vous obtiendrez le domaine (param manquant) en utilisant $_GET['domain'].

J'espère que cela t'aides.

0
filipecsweb