it-swarm.com.de

WP 3.1 tax_query in query_posts () zum Laufen bringen

Ich versuche, meine Posts mit mehreren benutzerdefinierten Taxonomien für meine benutzerdefinierten Posts mit dem folgenden Code zu filtern, aber ich erhalte immer wieder Leerzeichen mit meinem neuen Code, d. H., Es werden keine Posts in der Schleife angezeigt.

Dies funktioniert folgendermaßen: Der Benutzer wählt einen Begriff für die benutzerdefinierten Taxonomien 'fttype', 'ftperiod' und 'ftduration' aus drei verschiedenen Dropdown-Listen in einem Formular aus. Dieser wird an den folgenden Code übergeben:

  • $ ft_t_ns
  • $ ft_p_ns
  • $ ft_d_ns

Ich hatte ursprünglich diesen Code (der funktioniert, wenn auch ohne Paginierung), aber den neuen Code, den ich zu implementieren versuche, damit ich die eingebaute Fähigkeit von WP 3.1 zum Filtern nach mehreren benutzerdefinierten Taxonomien verwenden kann, gibt es nicht funktioniert nicht (siehe meinen neuen Code weiter unten).

Kann jemand sehen, was ich hier falsch mache? Kämpfe schon eine Weile damit ...

Vielen Dank

osu

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

NEUER 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 muss ein Array mit zwei Werten sein, damit BETWEEN für den Vergleich verwendet werden kann.

Wenn Sie beispielsweise einen Datumsbereich von heute bis zu einer Woche in der Zukunft verwenden möchten, verwenden Sie möglicherweise Folgendes:.

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

Oder wenn Sie in der Zeit zurückgehen wollten, dann vielleicht ..

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

Folgen Sie den Kommentaren: versuchen Sie dies als meta_query Teil Ihres Codes.

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

HINWEIS: Es ist weiterhin möglich, den alten > (mehr als), < (weniger als) und andere Metavergleiche mit den neuen meta_query-Argumenten zu verwenden, oder zumindest sieht es so aus, wenn Sie direkt auf die Quelle schauen.

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

Hoffentlich hilft das.

2
t31os