Showreelのタイトルと動画のIDをURLに変換して、そのページにアクセスできるようにしています。
私は同じURLに2つを持っていて、それがうまくいかないか、どちらか一方だけが入ってくるのです。現在、ページは見つかりませんか? (私は常にパーマリンクをフラッシュしています)
変数を取得したいURLは、director/test-director/showreel / showreel-name / video / 111 /のようになります。
このサイトは現在independent_02という名前のテスト用フォルダに置かれていますが、それが何かに影響を与えるかどうかはわかりませんか?
これがコードです。
function wpse13483_init() {
add_rewrite_rule( 'directors/(.+?)/showreels/([^/]+)?/?$', 'index.php?category_name=$matches[1]&showreel=a', 'top' );
add_rewrite_rule( 'directors/(.+?)/showreels/([^/]+)/video/([^/]+)?/?$', 'index.php?category_name=$matches[1]&showreel=c1&video=c2', 'top' );
// directors is a custom post_type and should go to single-directors.php
add_rewrite_rule( 'showreels/(.+?)/video/([^/]+)?/?$', 'index.php?category_name=$matches[1]&video=b', 'top' );
// showreels is a custom post_type and should go to single-showreels.php
}
add_action( 'init', 'wpse13483_init' );
どんな助けにも感謝します!
_ updates _ - このルールは、ほとんどがうまく機能し、変数を捕らえています。しかし、それはarchive.phpで、directors-single.phpではなくです。
add_rewrite_rule( 'directors/(.+?)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&showreel=$matches[2]&video=$matches[3]', 'top' );
// directors is a custom post_type and should go to single-directors.php
私は '?post_type = directors'と関係があると思いますが、single.phpをロードするためにこれがどうなるべきかについての参照を見つけることができません。
UPDATE 2 Rewrite analyseriを見ると、post_type変数がないと思いますか。
これはうまくいくようです!
? post_type = director& name = $ matches [1]がキーと思われる
add_rewrite_rule( 'directors/([^/]*)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&name=$matches[1]&showreel=$matches[2]&video=$matches[3]', 'top' );
だから今最終コード。
function wpse13483_init() {
add_rewrite_rule( 'directors/([^/]*)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&name=$matches[1]&showreel=$matches[2]&video=$matches[3]', 'top' );
}
add_action( 'init', 'wpse13483_init' );
function wpa52794_query_vars( $vars) {
$vars[] = 'video';
$vars[] = 'showreel';
return $vars;
}
add_filter( 'query_vars', 'wpa52794_query_vars' );
WordPressは、デフォルトでは理解できないクエリ変数を取り除きます。そのため、カスタム書き換えルールを登録することに加えて、alsoカスタムクエリ変数を登録する必要があります。
add_filter( 'query_vars', 'wpa52794_query_vars' );
function wpa52794_query_vars( $vars ) {
$vars[] = 'video';
$vars[] = 'showreel';
return $vars;
}
答えをさらに完成させるために、通常のクエリ変数WordPressが期待しているものも指定する必要があります。あなたの元の例は、あなた自身のコメントですでにメモしたように、post_type
または投稿を識別するもの(ID、名前、スラッグなど)を渡していません。これがないと、WordPressはリクエストを内部的にルーティングする方法を理解しません。
書き換えアナライザーでこれを発見したことに対する称賛。それは確かに行方不明の部分でした。
@EAMannの回答に加えて、私はあなたが書き換えルールをフラッシュする必要があると言うことができます。
@EAMannの回答 :
add_filter( 'query_vars', 'wpa52794_query_vars' );
function wpa52794_query_vars( $vars) {
$vars[] = 'video';
$vars[] = 'showreel';
return $vars;
}
書き換えルールをフラッシュします :
function myplugin_activation() {
flush_rewrite_rules();
}
register_activation_hook ( __FILE__, 'myplugin_activation' );
function myplugin_deactivation() {
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'myplugin_deactivation' );