ユーザーが "/ forums"で始まるURIを参照するとき、WordPressは指定されたテンプレートを呼び出すべきです。たとえば、次のURLすべて
...次のテンプレートを呼び出す必要があります。mytheme/page-forums.php
これにはWP_Rewriteが含まれると思いますが、ここから何をすべきかわかりません。
何か案は?
私はWordpressの書き換え規則を追加する必要があるときはいつでも私が使ういくつかのコードを含めました。 URLに基づいて特定のテンプレートファイルにWordpressを指示できるように、通常のWordpressの書き換えロジックに追加の規則を挿入します。 create_rewrite_rules()関数にルールを追加し、add_query_vars()関数にquery_varsを追加することで、ニーズに合わせて変更できます。
<?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 );
}
}