web-dev-qa-db-fra.com

WP 3.1 obtenir que tax_query fonctionne dans query_posts ()

J'essaie de filtrer mes publications en utilisant plusieurs taxonomies personnalisées pour mes publications personnalisées avec le code suivant, mais je continue à obtenir des blancs avec mon nouveau code, c'est-à-dire qu'aucune publication n'apparaît dans la boucle.

Cela fonctionne comme ceci: l'utilisateur choisit un terme pour les taxonomies personnalisées 'fttype', 'ftperiod' et 'ftduration' à partir de trois listes déroulantes différentes dans un formulaire, et cela est transmis au code ci-dessous sous la forme:

  • $ ft_t_ns
  • $ ft_p_ns
  • $ ft_d_ns

J'avais à l'origine ce code (qui fonctionne, bien que sans pagination), mais le nouveau code que je tente d'implémenter pour pouvoir utiliser la fonctionnalité intégrée de WP 3.1 en matière de filtrage par plusieurs taxonomies personnalisées est isn ne fonctionne pas (voir mon nouveau code plus bas).

Quelqu'un peut-il voir ce que je fais mal ici? Je me suis battu avec ça pendant un moment ...

Merci

osu

ANCIEN CODE

// 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);

NOUVEAU CODE

$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 doit être un tableau de deux valeurs pour être BETWEEN lors de la comparaison.

Par exemple, si vous souhaitez utiliser une plage de dates allant d’aujourd’hui à une semaine, vous pouvez utiliser quelque chose comme:.

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

Ou si vous vouliez remonter dans le temps, alors peut-être ..

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

Suite aux commentaires: essayez ceci en tant que partie meta_query de votre code.

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

NOTE: Il est toujours possible d'utiliser l'ancien > (plus que), < (moins que) et d'autres méta-comparaisons avec les nouveaux arguments meta_query, ou du moins, cela ressemble de cette façon en regardant directement la source.

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

J'espère que cela pourra aider.

2
t31os