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.