web-dev-qa-db-ja.com

複数の分類法が存在する場合に、URLを%category%ではなく%taxonomy%を使用するように書き換えるにはどうすればよいですか。

「未分類」のようなカテゴリを持つだけではなく、URLに分類法を使用するという選択肢があります。私は複数の分類法(国、州など)を持っていることに注意してください。そのうちのいくつかは(たとえそれが問題であるとしても)何千もの用語を持っています。

編集:私はこれが別の質問の派生物であることを述べなかった: [カテゴリ名]の代わりに[分類名]を使うことの長所と短所?

目標は、domain.com/2011/taxonomy-term/post-nameのようなパーマリンクです。

国という分類とエジプトについての投稿があれば、そのURLにエジプトの用語を代入できるようにしたいと思います。

2
Adam

投稿のURL構造の変更は、常に2つの部分で構成されます。リンクに新しいURLを書き込むことと、新しい構造を処理することです。

新しい構造の処理

新しい構造の処理は簡単です。投稿を識別するには投稿名(スラッグ)で十分なので、URLで使用している分類法を無視できます。理論的には、任意の分類法を使用できるはずですが、実際には、いくつかの余分な調整なしではできません。

%category%を使用する場合、 redirect_canonical()関数 が起動し、URL内の別の分類からの用語を含むすべてのリクエストをカテゴリのあるものにリダイレクトしようとします(1つのみを使用するため)各投稿のURLは、同じコンテンツのページランクの拡散を防ぎます)。これは、すべてのURLが/uncategorized/[post-name]/に移動するように見えるときに表示されます。関数のフックを完全に解除するか、不要な場合はフックして、リダイレクトを防ぐことができます。

もう1つのオプションは、パーマリンク構造でカスタム分類法の1つを使用することです。これにより、redirect_canonical()は何もできなくなります(その機能がカスタム分類にも対応するように改善されるまで)が、 監視 のWP 3.0バージョンのカスタム分類法では、階層的な書き換えルールは生成されません(3.1で修正される予定です)。

私が代わりに試したのは、%anything%anythingであるが、貪欲ではない)に一致する.+?と呼ばれる「ダミー」書き換え構造を作成することです。 )。この場合、WordPressは何かが行われていることに気付かないため、詳細ページルールも再度有効にする必要があります。

add_action('init', 'wpse9346_init');
function wpse9346_init()
{
    $GLOBALS['wp_rewrite']->add_rewrite_tag( '%anything%', '(.+?)', 'wpse9346_dummy=' );
    $GLOBALS['wp_rewrite']->use_verbose_page_rules = true;
}

wpse9346_dummyパラメーターは無視されるため、これを使用する方が安全です。私の書き換え構造は/%anything%/%postname%/です。

新しい構造のURLを書く

これは、あなたがいくつかの考えをしなければならない部分です:投稿が異なる分類からの用語でタグ付けできる場合、その投稿へのリンクを作成するためにどの分類を使用すべきですか?国ごとに1つ、官公庁ごとに1つの分類法があるとします。 Mubarakに関する投稿には、ある分類ではEgypt、別の分類ではPresidentのタグが付けられます。投稿URLは/egypt/mubarak-steps-down/または/president/mubarak-steps-down/ですか?両方のURLが機能し、同じ投稿になりますが、上記の%anything%ソリューションを使用すると、パーマリンクに%anything%が含まれます。これはもちろん無効です。したがって、post_linkにフックし、必要に応じてURLを変更します。

1
Jan Fabry

私は似たようなことをしました。この記事は私に道を示しました:

http://shibashake.com/wordpress-theme/add-custom-taxonomy-tags-to-your-wordpress-permalinks

0
user3228