web-dev-qa-db-ja.com

WP 3.1 query_posts()でtax_queryを機能させる

次のコードを使用して、カスタム投稿に複数のカスタム分類法を使用して投稿をフィルタしようとしていますが、新しいコードで空白になっています。つまり、ループに投稿が表示されません。

これは次のように動作します。ユーザーがフォーム内の3つの異なるドロップダウンからカスタム分類法 'fttype'、 'ftperiod'、および 'ftduration'の用語を選択し、これが以下のコードに渡されます。

  • $ ft_t_ns
  • $ ft_p_ns
  • $ ft_d_ns

私はもともとこのコードを持っていました(それはページネーションなしでも動作します)、しかし私が実装しようとしている新しいコードはWP 3.1の複数のカスタム分類によるフィルタリングの組み込み機能を使うことができ動作していません(私の新しいコードをさらに見てください)。

誰かが私がここで間違っていることを見ることができますか?しばらくこれと戦っていた...

ありがとう

おす

旧コード

// Set todays date to check against the custom field StartEventDate
$todaysDate = date('Y/m/d');

// Convert spaces in taxonomies and terms into hyphens so that search works correctly (uses slug)
$ft_t_ns = osu_convert_spaces($ft_t);
$ft_p_ns = osu_convert_spaces($ft_p);
$ft_d_ns = osu_convert_spaces($ft_d);

// Build query
// NOTE: AS OF WP 3.1, SEE V2 FOR HOW TO PASS AN ARRAY TO query_posts(). YOU PROBABLY WON'T NEED
// QUERY MULTIPLE TAXONOMIES PLUGIN EITHER FOR V2'S APPROACH OF PASSING AN ARRAY TO WP_Query() TO WORK.
// READ MORE ON 'MULTIPLE TAXONOMY HANDLING' HERE:
// http://codex.wordpress.org/Function_Reference/query_posts#Taxonomy_Parameters
$ft_args = 'post_type=ftevent';
$ft_args .= '&fttype=' . $ft_t_ns;
$ft_args .= '&ftperiod=' .$ft_p_ns;
$ft_args .= '&ftduration=' . $ft_d_ns;
$ft_args .= '&posts_per_page=' . $ft_ppp;
$ft_args .= '&meta_key=StartEventDate&meta_compare=>=&meta_value=' . $todaysDate;
$ft_args .= '&orderby=meta_value&order=ASC&paged=' . $paged;

// Create query
query_posts($ft_args);

新しいコード

$ft_args = array(
    'post_type' => 'ftevent',
    'posts_per_page' => 5,
    'paged' => $paged,
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'StartEventDate',
            'value' => $todaysDate,
            // Custom field type. Possible values are 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 
            // 'SIGNED', 'TIME', 'UNSIGNED'. Default value is 'CHAR'.
            'type' => 'DATE',
            // Operator to test. Possible values are 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'.
            // We choose 'BETWEEN' because we need to know the date has not passed to show the event
            'compare' => 'BETWEEN'
        )
    ),
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'fttype',
            'field' => 'slug',
            'terms' => $ft_t_ns,
            // Operator to test. Possible values are 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'.
            // We choose 'IN' because we need to make sure the term is in the current array of posts
            'operator' => 'IN',
        ),
        array(
            'taxonomy' => 'ftperiod',
            'field' => 'slug',
            'terms' => $ft_p_ns,
            'operator' => 'IN',
        ),
        array(
            'taxonomy' => 'ftduration',
            'field' => 'slug',
            'terms' => $ft_d_ns,
            'operator' => 'IN',
        ),
    )
);

// Create query
query_posts($ft_args);
2
Osu

$todaysDateは、比較のためにBETWEENになるためには2つの値の配列である必要があります。

たとえば、今日から将来1週間までの日付範囲を使用したい場合は、次のようにします。

$todaysDate = array(
    date('Y/m/d'),
    date('Y/m/d', strtotime('+1 week') )
);

それともあなたが時間をさかのぼって戻りたいと思ったら、そして多分..

$todaysDate = array(
    date('Y/m/d'),
    date('Y/m/d', strtotime('-1 week') )
);

コメントの続き:これをあなたのコードのmeta_query部分として試してください。

'meta_query' => array(
    array(
        'key' => 'StartEventDate',
        'value' => date('Y/m/d'),
        'type' => 'DATE',
        'compare' => '>=' // more than or equals
    )
)

注:古い>(以上)、<(より小さい)、その他のmeta_query引数とのメタ比較を使用することも可能です。起源。

http://core.trac.wordpress.org/browser/trunk/wp-includes/meta.php#L355

それが役立つことを願っています。

2
t31os