BOUNTY EDIT:
J'ai un plugin qui a des liens similaires à ceux ci-dessous:
mydomain.com/wp-content/plugins/myplugin/includes/categories.php?c=9
Je souhaite que ces liens soient plus conviviaux pour le référencement et fonctionnent comme suit:
mydomain.com/wp-content/plugins/myplugin/includes/categories/9/
SOLUTIONS J'AI ESSAYÉ ET ÉCHOUÉ:
Le plugin utilise ajax. J'ai essayé d'utiliser add_rewrite_rule
comme ci-dessous Mon plugin a la fonction suivante:
add_action( 'init', 'add_alexes_rules' );
function add_alexes_rules() {
add_rewrite_rule('^categories/([0-9]+)/?$', 'categories.php?c=$1', 'top');
flush_rewrite_rules();
}
et appris que cela ne fonctionnerait pas après une réponse de @Milo :
Les règles internes doivent pointer sur index.php
et essayé de modifier .htaccess
directement mais bloqué après une réponse de @Deadooshka :
WP utilise php-server-variables pour gérer les requêtes via index.php. La règle doit donc modifier cette variable.
Alors, quel est le moyen d'y parvenir?
EDIT: SOLUTION de Jack Johansson
Créé un fichier php: page-custom.php
comme ci-dessous:
<?php
/**
* Template Name: My Custom Template
*/
if (is_page_template( 'page-custom.php' ) && isset($_REQUEST['cat'])){
...
}
?>
Création d'une page avec ID: 281
qui utilise le modèle page-custom.php
.
Mon functions.php
:
function my_rewrite_tag() {
add_rewrite_tag('%cat%', '([^&]+)');
}
function my_rewrite_rule() {
add_rewrite_rule('^categories/([^/]*)/?','index.php?page_id=281&cat=$matches[1]','top');
}
add_action('init', 'my_rewrite_tag', 10, 0);
add_action('init', 'my_rewrite_rule', 10, 0);
Maintenant, quand je navigue vers un exemple d'URL comme celui ci-dessous
Le problème est que $_REQUEST['cat']
est vide, il n’entre donc jamais dans la condition à l'intérieur de page-custom.php
Pourquoi ne créons-nous pas notre propre fichier de modèle et faisons-nous notre travail là-bas? Voici ce que je vais faire:
Créons un modèle de page personnalisé simple. Nous l'appelons page-custom.php
. Nous allons utiliser cette page pour interagir avec notre plugin.
<?php
/**
* Template Name: My Custom Template
*/
// Our function to get the data
if (function_exists('sample_function')) sample_function();
?>
Nous créons également une page dans le back-end, son slug est /my-custom-page/
et son identifiant est 123
.
Maintenant vérifions si nous sommes sur cette page et y redirigeons les données.
function my_rewrite_tag() {
add_rewrite_tag('%cat%', '([^&]+)');
}
function wallpaperinho_subcat_rewrite_rule() {
add_rewrite_rule('^categories/([^/]*)/?','index.php?page_id=123&cat=$matches[1]','top');
}
add_action('init', 'my_rewrite_tag', 10, 0);
add_action('init', 'my_rewrite_rule', 10, 0);
Que fait ce morceau de code? Il vérifie si nous visitons /categories/321/
et le redirige vers notre page. Nous avons maintenant les données dont nous avons besoin. Vérifions le modèle.
Nous vérifions si nous sommes sur page-custom.php
et retournons nos données à la page.
if (is_page_template( 'templates/about.php' ) && isset($_REQUEST['cat'])){
function sample_function() {
$c = $_REQUEST['cat'];
// We have the c value, call the internal plugin's functions and return its value to the page
return $data;
}
}
Cela sert d’exemple pour créer notre propre modèle et utiliser les redirections pour qu’il ressemble à ce que nous voulons. Il peut et doit être modifié pour répondre à vos besoins.
Les règles de réécriture s’attendent à ce que le nouvel emplacement disparaisse de index.php
. Si vous le changez en 'index.php?pagename=tisort-tasarla'
, cela devrait fonctionner tant que cette page (ou post) existe et est publiée.