it-swarm.com.de

Fügen Sie im Plugin eine Umschreiberegel hinzu: mit .htaccess im Plugin-Ordner oder mit WordPress-Funktionen

Ich muss eine Umschreiberegel in mein Plugin einfügen und mit meinem Code verteilen. Alles funktioniert einwandfrei, wenn ich die Regel in die .htaccess-Datei im WordPress-Stammordner lege, aber das Plugin mit meiner Regel verteilen muss.

Ich versuche, eine .htaccess-Datei in den Plugin-Ordner zu legen und versuche, die Funktion add_rewrite_rule zu verwenden, aber das funktioniert auch nicht.

Hier der .htaccess-Code, der im WordPress-Stammordner korrekt funktioniert, in meinem Plugin-Ordner jedoch nicht:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteRule my-plugin/pages/tp(.*)\.php$ wp-content/plugins/my-plugin/pages/request.php?pid=$1

</IfModule>

Ich versuche den folgenden Code in meinem Plugin, aber er funktioniert auch nicht:

add_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $query_vars )
{
    $query_vars[] = 'pid';
    return $query_vars;
}
add_action( 'init', 'add_init' );
function add_init()
{
    $plugin_url = 'the-path-to-my-plugin-folder';
    add_rewrite_rule('my-plugin/pages/tp(.*)\.php'
                  , $plugin_url . 'pages/request.php?pid=$matches[1]','top');

    global $wp_rewrite;
    $wp_rewrite->flush_rewrite_rules(); // I know this should be called only one time, but I put it here just to keep simple the sample code
}

Aber ich bekomme immer den Fehler, dass die URL nicht gefunden wurde. Was mache ich falsch? Wie kann ich tun, was ich brauche? Ich habe nach ähnlichen Fragen gesucht, aber keine hat mein Problem gelöst.

3
leticia

HINWEIS: Die WordPress Rewrite-API ist nicht mit dem Apache Rewrite-Modul identisch. WP Die Rewrite-API leitet eine Anfrage nicht an eine andere URL um, sondern analysiert die aktuelle URL und füllt das query_vars-Array.

Das Problem liegt im zweiten Parameter Ihres add_rewrite_rule Funktionsaufrufs. Es muss mit index.php? beginnen und dann sollte es Ihre Argumente geben, wie zum Beispiel pid:

"index.php?pid=$matches[1]...."

Deine add_init Funktion sollte also so aussehen:

add_action( 'init', 'wpse8170_add_init' );
function wpse8170_add_init()
{
    add_rewrite_rule('my-plugin/pages/tp(.*)\.php', 'index.php?pid=$matches[1]', 'top');
}

Vergessen Sie nicht, die Umschreibregeln zu löschen, indem Sie die Seite Settings "Permalinks besuchen.

Weitere Lektüre:

1
Eugene Manuilov