it-swarm.com.de

SEO-freundliche URLs für meine Plugin-Kategorien

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

http: // localhost/mydomain/categories/123/

Das Problem ist, dass $_REQUEST['cat'] leer ist und daher niemals die Bedingung innerhalb von page-custom.php erfüllt.

2
HOY

Warum erstellen wir keine eigene Vorlagendatei und erledigen unsere Aufgaben dort? Folgendes werde ich tun:

  1. Erstellen Sie eine benutzerdefinierte Seitenvorlage
  2. Rufen Sie die gewünschten Plugin-Funktionen auf der Seite auf
  3. Leiten Sie die Plugin-URLs auf die Seite um
  4. Holen Sie sich die Abfrage var und verarbeiten Sie die Anfrage

- Die Seitenvorlage

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.

- Die Umschreiberegeln

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.

- Die Bedingung für die Vorlage

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.

2
Jack Johansson

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.

1
Morgan Estes