カスタム投稿タイプの追加に成功しました。パーマリンク構造はとてもうまくいきます。それで、例えば、私はカスタム投稿タイプbooks
を持っています、そして本へのパーマリンクは/books/the-dictionary
です。
私のsingle-book.php
ページテンプレートは、ページに表示されるコンテンツをカスタマイズするためにletter
パラメータを受け入れます。 /book/the-dictionary/q
のようにこれにリンクできるようにしたいです。
私は私のテーマのfunctions.phpファイルに以下を追加しました:
function my_init() {
add_books_rewrite();
function add_books_rewrite() {
add_rewrite_rule("books/([^/]+)/([^/])/?$", 'index.php?pagename=$matches[1]&letter=$matches[2]', "top");
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
function add_books_query_vars($query_vars) {
$query_vars[] = "letter";
return $query_vars;
}
add_filter("init", "my_init");
add_filter("query_vars", "add_books_query_vars");
上記のフラッシュコードを使って手動でパーマリンク設定ページに行き保存すること、そして正規表現の中の愚かなエラーを修正することを何度か試しましたが、結局私は Jan Fabry's 素晴らしい アナライザプラグインを書き換えます 。
だから、ここから私はそれが滑らかな航海だと思いますね。ええ...正確には違います。
自分のサイトをロードしてbooks/the-dictionary/q
に移動すると、the-dictionary
のコンテンツは正しくロードされますが、パラメータが失われます。私が面白いと思うことは、index.php?pagename=the-dictionary&letter=q
をロードすれば、すべてうまくいくことです。
パラメータを取得するには、次のコードがあります。
global $letter;
echo $letter. " - global";
echo "<br>";
$current_letter = (isset($wp_query->query_vars["letter"]) ? $wp_query->query_vars["letter"] : "all");
echo $current_letter . " - query_vars";
echo "<br><br>";
私は$_SERVER["QUERY_STRING"]
も見ています。これらはindex.php?pagename...&letter...
を使用したときに入力されますが、/books/pagename/letter
を使用したときには入力されません。
だから、ここでいくつかのことが起こっているようです。適切なクエリ文字列変数を使ってindex.phpを指定すればうまくいくので、WordPressは完全にパラメータを削除するわけではありません。これは書き換えルールが正しく機能していないことを示しているようです。しかし、Rewrite Analyzerプラグインは、私がやろうとしていることのために物事が適切に設定されていると言っているようです。
私は切断を解決するために私がここで見るべきであることに少し混乱しています。明らかなものが足りない場合は申し訳ありません。 ):
問題はフロントエンドのコードでしょう。
これを試して:
<?php
if( $letter = get_query_var( 'letter' ) )
{
echo 'Current Letter: ' . $letter;
}
else
{
echo 'Current Letter: All';
}