2016-05-05 5 views
0

ich Wordpress in meinem lokalen Rechner installiert haben: Also meine HOME_URL ist http://localhost/wordpress (haben keine virtuellen Host-Eintrag erstellt)Wordpress Rewrite-API, add_rewrite_rule Ausgabe

ich eine Seite mit dem Namen Test mit page_id = 19. Jetzt erstellt haben ich brauche die Rewrite wie folgt zu verwenden:

wann wird es eine Anfrage wie http://localhost/wordpress/group/abc, Es sollte

Meine .htaccess http://localhost/wordpress/?page_id=19&group=abc umgewandelt werden:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase /wordpress/ 
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /wordpress/index.php [L] 
</IfModule> 

# END Wordpress

Was ich versucht:

add_action('init', function() { 
    global $wp_rewrite; 
    $wp_rewrite->flush_rules(); 
    add_rewrite_rule('^group/([^/]+)', 'index.php?page_id=19&group=abc', 'top'); 
    add_rewrite_tag('%group%', '[A-Za-z]+'); 
}); 

Aber immer, wenn ich versuche, http://localhost/wordpress/group/abc zugreifen erhalte ich 404-Fehler.

Bitte schlagen Sie vor, mache ich etwas falsch.

Vielen Dank im Voraus.

+0

haben Sie permalinks gespeichert rewite Regeln aktualisieren? – BenB

+0

@batz, ja ich hatte das schon probiert zu debuggen, die add_rewrite_rule zu ändern und den permlink zu speichern. Aber es hat nicht geklappt. –

+0

Seiten-ID sollte wahrscheinlich post_id sein? – David

Antwort

1

Nach vielen resaerch fand diese:

  • Es ist immer sichere Seitennamen zu verwenden, statt page_id.
  • Die benutzerdefinierte Abfrage vars (hier Gruppe) sollte registriert werden.
  • Auch gibt es einen Filter rewrite_rules_array namens

So der obige Code aussehen könnte (Seite hinzugefügt Name Test):

add_filter('query_vars', function($query_vars) { 
    $query_vars[] = 'group'; 
    return $query_vars; 
}); 

add_action('init', function() { 
    global $wp_rewrite; 
    $wp_rewrite->flush_rules(); 
    add_rewrite_rule('group/(.*)', 'index.php?pagename=test&group=$matches[1]', 'top'); 
}); 

Aber wir den Gruppenwert über $_GET['group'] nicht zugreifen können. wir brauchen sie für den Zugriff über get_query_var('group')

Eine andere Methode der Rewrite-Regel hinzufügen:

add_action('rewrite_rules_array', 'rewrite_rules'); 
function rewrite_rules($rules) { 
    $newrules = array(); 
    $newrules[ 'group/(.*)/?$' ] = 'index.php?pagename=test&group=$matches[1]'; 
    return $newrules + $rules; 
} 
Verwandte Themen