web-dev-qa-db-ja.com

カスタムフィールド値に基づいてアーカイブページへのリンクを表示する

求人サイトへのリンクの一覧を表示する求人サイトがあります。求人の場所は既に各投稿のカスタムフィールドに入力されているので、クリックするとそのカスタム値のみが入力された投稿を表示するリンクのリストを表示したいだけです。

イギリスアイルランドアメリカなど.

上の国のリンクをクリックして、問題の国がカスタム項目値として追加されているすべての投稿を参照してください。

4
Leon Quinn

これにはカスタム分類法、notカスタムフィールドの使用をお勧めします。カスタムフィールドよりもはるかに簡単に、分類法に基づいてアーカイブをソートおよび一覧表示できます。

ただし、カスタムフィールドに基づいてリストを作成する場合は、検索対象のmeta_keymeta_valueを渡すように、アーカイブページのquery_posts()に送信される引数を変更する必要があります。

クエリ変数を追加するには

add_action('init', 'add_custom_meta_url');
function add_custom_meta_url() {
    global $wp,$wp_rewrite;
    $wp->add_query_var('location');
    $wp_rewrite->add_rule('location/([^/]+)','index.php?location=$matches[1]','top');
    $wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation
}

そうすると、アーカイブに対するあなたのパーマリンクは、http://mycoollocationsite.com/location/englandhttp://mycoollocationsite.com/location/irelandhttp://mycoollocationsite.com/location/usa ...などの行に沿ったものになるでしょう。

次に、自分の場所に渡された値を実際のクエリに追加する必要があります。

add_action('parse_query', 'apply_custom_meta_to_query');
function apply_custom_meta_to_query(&$query) {
    if (isset($query->query['location'])) {
        $query->query_vars['meta_key'] = 'location';
        $query->query_vars['meta_value'] = $query->query['location'];
        unset($query->query_vars['location']);            // You don't need this

    }
}

カスタムデータをlocationというフィールドに格納していると想定しています。

しかしこれにより、特定の場所に基づいてアーカイブをフィルタリングすることができます。これを使って日付ベースのアーカイブを有効にしたい場合は、最初のコードブロックで追加の規則が必要になります(今のところ、これはallpostsのリストを表示します。 location meta_keyを使って).

それでも、代わりにカスタム分類法を使用することをお勧めします。それはよりきれいで、より拡張可能で、そしてより少ないカスタムコーディングを必要とします。これはまさにカスタム分類法が作成された状況でもあります。

3
EAMann