BOUNTY EDIT:
Ich habe ein Plugin, das Links hat, die denen unten ähneln:
mydomain.com/wp-content/plugins/myplugin/includes/categories.php?c=9
Ich möchte, dass diese Links SEO-freundlicher sind und so funktionieren:
mydomain.com/wp-content/plugins/myplugin/includes/categories/9/
LÖSUNGEN, DIE ICH VERSUCHT HABE UND NICHT ERFOLGT HABE:
Das Plugin verwendet Ajax. Ich habe versucht, add_rewrite_rule
wie folgt zu verwenden. Mein Plugin hat folgende Funktion:
add_action( 'init', 'add_alexes_rules' );
function add_alexes_rules() {
add_rewrite_rule('^categories/([0-9]+)/?$', 'categories.php?c=$1', 'top');
flush_rewrite_rules();
}
und erfuhr, dass es nach einer Antwort von @Milo nicht funktioniert:
Interne Regeln sollten auf index.php verweisen
und versuchte, .htaccess
direkt zu bearbeiten, blieb aber nach einer Antwort von @Deadooshka hängen:
WP verwendet PHP-Server-Variablen, um Anfragen über die index.php zu bearbeiten, daher muss die Regel diese Variable ändern.
Was ist der Weg, um dies zu erreichen?
BEARBEITEN: Jack Johanssons LÖSUNG
Erstellt eine PHP-Datei: page-custom.php
wie folgt:
<?php
/**
* Template Name: My Custom Template
*/
if (is_page_template( 'page-custom.php' ) && isset($_REQUEST['cat'])){
...
}
?>
Erstellt eine Seite mit ID: 281
, die die Vorlage page-custom.php
verwendet.
Mein 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);
Wenn ich jetzt zu einer Beispiel-URL wie der folgenden navigiere
Das Problem ist, dass $_REQUEST['cat']
leer ist und daher niemals die Bedingung innerhalb von page-custom.php
erfüllt.
Warum erstellen wir keine eigene Vorlagendatei und erledigen unsere Aufgaben dort? Folgendes werde ich tun:
Lassen Sie uns eine einfache benutzerdefinierte Seitenvorlage erstellen. Wir nennen es page-custom.php
. Wir werden diese Seite benutzen, um mit unserem Plugin zu interagieren.
<?php
/**
* Template Name: My Custom Template
*/
// Our function to get the data
if (function_exists('sample_function')) sample_function();
?>
Wir erstellen auch eine Seite im Backend, deren Slug /my-custom-page/
ist und deren ID 123
ist.
Lassen Sie uns nun überprüfen, ob wir uns auf dieser Seite befinden und die Daten dorthin umleiten.
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);
Was macht dieser Code? Es prüft, ob wir /categories/321/
besuchen und leitet es auf unsere Seite weiter. Jetzt haben wir die Daten, die wir brauchen. Lassen Sie uns die Vorlage überprüfen.
Wir prüfen, ob wir uns auf page-custom.php
befinden und senden unsere Daten an die Seite zurück.
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;
}
}
Dies dient als Beispiel, um eine eigene Vorlage zu erstellen und die Weiterleitungen so zu verwenden, dass sie wie gewünscht aussehen. Es kann und muss geändert werden, um Ihren Bedürfnissen zu entsprechen.
Rewrite-Regeln gehen davon aus, dass der neue Speicherort index.php
deaktiviert wird. Wenn Sie es in 'index.php?pagename=tisort-tasarla'
ändern, sollte es funktionieren, solange diese Seite (oder dieser Beitrag) existiert und veröffentlicht wird.