Erzwingen Sie eine bestimmte Vorlage basierend auf der URL

Wenn ein Benutzer einen URI aufruft, der mit “/ forums” beginnt, sollte WordPress eine bestimmte Vorlage aufrufen. Zum Beispiel alle diese URLs:

  • mysite.com/forums
  • mysite.com/forums/fragen
  • mysite.com/forums/questions/1/my-question
  • mysite.com/forums/questions/ask
  • mysite.com/forums/users

… sollte folgende Vorlage aufrufen : mytheme / page-forums.php

Ich glaube, das beinhaltet WP_Rewrite , aber ich habe keine Ahnung, was ich von hier aus tun soll.

Irgendwelche Ideen?

Solutions Collecting From Web of "Erzwingen Sie eine bestimmte Vorlage basierend auf der URL"

Ich habe etwas Code hinzugefügt, den ich benutze, wenn ich Ergänzungen zu den WordPress Rewrite-Regeln machen muss. Es fügt der normalen WordPress-Rewrite-Logik zusätzliche Regeln hinzu, so dass Sie WordPress basierend auf der URL auf bestimmte Vorlagendateien verweisen können. Sie können sie an Ihre Bedürfnisse anpassen, indem Sie der function create_rewrite_rules () weitere Regeln und der function add_query_vars () zusätzliche query_vars hinzufügen.

< ?php // Forums Class // $ForumsCode = new Forums(); register_activation_hook( __file__, array($ForumsCode, 'activate') ); add_filter('rewrite_rules_array', array($ForumsCode, 'create_rewrite_rules')); add_filter('query_vars',array($ForumsCode, 'add_query_vars')); add_filter('admin_init', array($ForumsCode, 'flush_rewrite_rules')); add_filter('template_include', array($ForumsCode, 'template_redirect_intercept')); class Forums { function activate() { global $wp_rewrite; $this->flush_rewrite_rules(); } function create_rewrite_rules($rules) { global $wp_rewrite; $newRule = array('forums/(.+)' => 'index.php?forumdata='.$wp_rewrite->preg_index(1)); $newRule2 = array('forums/questions/(.+)' => 'index.php?questions=true&forumdata='.$wp_rewrite->preg_index(1)); $newRules = $newRule + $newRule2 + $rules; return $newRules; } function add_query_vars($qvars) { $qvars[] = 'forumdata'; return $qvars; } function flush_rewrite_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } function template_redirect_intercept($template) { global $wp_query; if ($wp_query->get('forumdata')) { $template = get_bloginfo('template_url') . '/page-forums.php'; } return $template; } function pushoutput($message) { $this->output($message); } function output( $output ) { header( 'Cache-Control: no-cache, must-revalidate' ); header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' ); echo json_encode( $output ); } }