WordPress – wp_rewrite-Regeln

Lesezeit: 4 Minuten

Benutzeravatar von user1785684
Benutzer1785684

Ich versuche, ein Plugin für WordPress zu schreiben, aber ich habe einige Probleme in Bezug auf die wp_rewrite-Funktionalität.

Ich möchte eine Seite wie viele andere erscheinen lassen, indem ich Variablen über die URL übergebe (z. B.: www.mysite.com/WordPress?variable=helloall)

Ich möchte jedoch die Permalink-Struktur intakt halten, also möchte ich, dass die URL als solche angezeigt wird:

www.mysite.com/WordPress/helloall

Ich möchte dann in der Lage sein, die Schnecke zu nehmen und damit meine Datenbank zu durchsuchen. (wie Sie $_GET verwenden würden, wenn ich die allgemeine Methode verwenden würde, die ich zuerst erwähnt habe)


Ich habe ein paar Tutorials online gefunden und bin noch nicht in der Lage, dies zum Laufen zu bringen. Ich glaube, mein Problem liegt an einem Mangel an Verständnis dafür, WIE Sie die Regeln richtig schreiben.

Ich habe dieses Tutorial verwendet:

http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html

und ich habe versucht, größtenteils denselben Code zu verwenden. Ich bin in der Lage, die Regeln festzulegen, aber sie scheinen einfach nicht für mich arbeiten zu wollen

kann mir jemand das richtige Format sagen, um dies zu tun?

Bearbeiten

das ist meine aktuelle Funktion

function add_rewrite_rules( $wp_rewrite ) 
{
    $new_rules = array
    (
        '(.?.+?)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename=".
        $wp_rewrite->preg_index(1)."&varname=".
        $wp_rewrite->preg_index(2)."&page=".
        $wp_rewrite->preg_index(3),

        "(.?.+?)/(.*?)/?$' => 'index.php?pagename=".
        $wp_rewrite->preg_index(1)."&varname=".
        $wp_rewrite->preg_index(2)
    );
    // Always add your rules to the top, to make sure your rules have priority
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

add_action(“generate_rewrite_rules’, ‘add_rewrite_rules’);

Lösung

Ich habe es herausgefunden, ich wollte dies als Antwort posten, aber es scheint, dass ich meine eigenen Fragen zu diesem Zeitpunkt nicht beantworten kann, also bearbeite ich stattdessen den ursprünglichen Beitrag:

Zunächst einmal ist der Code, den ich oben poste, korrekt, aber der Grund, warum er nicht funktioniert hat, ist, dass ich die Regeln nicht geleert habe. Ich mache dies mit dem folgenden Code:

function ebi_flush_rewrite_rules()
{
global $wp_rewrite;

$wp_rewrite->flush_rules();
}

add_action( 'init', 'flush_rewrite_rules');

Mein neues Problem war, dass mein Code ein wenig zu gut funktionierte und ALLE Seiten umleitete, anstatt nur die, die ich wollte, dies bedeutete, dass keine untergeordneten Seiten angezeigt wurden, was ein kleines Problem ist, ich habe das Problem jedoch mit einer kleinen gelöst bearbeiten:

function add_rewrite_rules( $wp_rewrite ) 
{
  $new_rules = array
  (
    '(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename=".
    $wp_rewrite->preg_index(1)."&varname=".
    $wp_rewrite->preg_index(2)."&page=".
    $wp_rewrite->preg_index(3),

    "(testpage)/(.*?)/?$' => 'index.php?pagename=".
    $wp_rewrite->preg_index(1)."&varname=".
    $wp_rewrite->preg_index(2)
  );
  // Always add your rules to the top, to make sure your rules have priority
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

Mein endgültiger Code bezüglich der wp_rewrite-Funktionalität lautet also wie folgt:

function add_rewrite_rules( $wp_rewrite ) 
{
$new_rules = array
(
    "(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename=".
    $wp_rewrite->preg_index(1)."&varname=".
    $wp_rewrite->preg_index(2)."&page=".
    $wp_rewrite->preg_index(3),

    "(testpage)/(.*?)/?$' => 'index.php?pagename=".
    $wp_rewrite->preg_index(1)."&varname=".
    $wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

function query_vars($public_query_vars)
{
$public_query_vars[] = "varname";
return $public_query_vars;
}

function ebi_flush_rewrite_rules()
{
global $wp_rewrite;
$wp_rewrite->flush_rules();
}

add_action( "init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'add_rewrite_rules');
add_filter('query_vars', 'query_vars');

Ich hoffe, das spart jemand anderem in Zukunft Zeit.

Ich habe herausgefunden, wie ich es an einem bestimmten Seitennamen zum Laufen bringen kann. Dies ist für alle, die in Zukunft Probleme haben:

function add_rewrite_rules( $wp_rewrite ) 
{
    $new_rules = array
    (
        '(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename=".
        $wp_rewrite->preg_index(1)."&varname=".
        $wp_rewrite->preg_index(2)."&page=".
        $wp_rewrite->preg_index(3),

        "(testpage)/(.*?)/?$' => 'index.php?pagename=".
        $wp_rewrite->preg_index(1)."&varname=".
        $wp_rewrite->preg_index(2)
    );
    // Always add your rules to the top, to make sure your rules have priority
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

function query_vars($public_query_vars)
{
    $public_query_vars[] = "varname";

    return $public_query_vars;
}

function ebi_flush_rewrite_rules()
{
    global $wp_rewrite;

    $wp_rewrite->flush_rules();
}

add_action( "init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'add_rewrite_rules');
add_filter('query_vars', 'query_vars');

1397510cookie-checkWordPress – wp_rewrite-Regeln

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy