it-swarm.com.de

Kann ich benutzerdefinierte Metadaten über WP_Query abfragen?

Ok, meine Frage ist etwas komplex, deshalb werde ich versuchen, eine allgemeine Erklärung zu geben und anschließend auf Details eingehen.

Ich führe WordPress 3.4.2 aus und verwende WCK Post Type Creator und WCK Custom Fields Creator, um meinen benutzerdefinierten Post-Typ und benutzerdefinierte Felder zu erstellen.

Ich versuche, Posts vom benutzerdefinierten Post-Typ "Unternehmen" abzufragen, an die ein benutzerdefiniertes Feld "Spezial" angehängt ist. Mein Problem ist, dass ich spezifischer sein möchte und nur eine bestimmte Art von Spezial erhalten möchte (die im Plugin "Custom Fields Creator" festgelegt ist), aber ich weiß nicht, ob/wie ich dies mit dem Argument "meta_query" für WP_Query tun kann.

Was ich jetzt habe, wird Beiträge aus dem Beitragstyp ziehen, aber ich muss dann get_post_meta () verwenden, um die benutzerdefinierten Felder zu finden und sie durchlaufen, um Tests für das zu machen, was ich will. Folgendes habe ich gerade:

<?php   
$args = array(
    'post_type' => 'business',
    'meta_query'  => array(
                array(
                    'key' => 'specials'
                )
            )

    );
$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post(); 

$specials = get_post_meta( $post->ID, 'specials'); 

//Loop through array    of specials
foreach( $specials as $special){

    //Loop through each special
    foreach($special as $individual){

    //Check to see is there is a drink special
    if ($individual ['type-of-special'] == 'Drink' ) { 
        //Do stuff          

    }//indivdual
    }//special
} //specials

endwhile; ?>

Also, was ich hier mache, ist, die Posts zu ziehen und dann für jeden Post die 'Specials'-Metadaten abzurufen und die verschiedenen Arrays zu durchlaufen, um zu überprüfen, welche Art von Special es ist, und dann Dinge anzuzeigen, wenn es die richtige Art von Special ist. Gibt es eine Möglichkeit, in meiner WP_query spezifischer zu sein, sodass ich nur die Posts zurückgebe, die von einer bestimmten Art von Special sind?

Das Problem, auf das ich stoße, ist, dass ich nicht weit genug in die mehrdimensionalen Arrays eindringen kann, die das benutzerdefinierte Feld 'specials' mit dem Argument meta_query für WP_Query auf Werte prüfen muss.

Wenn ich in foreach $ special drucke ($ specials als $ special), erhalte ich Folgendes:

Array
(
    [0] => Array
        (
            [type-of-special] => Drink
            [name-of-special] => Pumpkin Latte
            [price] => 2.00
            [day-of-the-week] => Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
        )
)

Ich weiß also nicht, wie ich zum Schlüssel [type-of-special] komme, um seinen Wert über meta_query zu überprüfen.

Ich weiß, dass dies eine Menge Informationen sind, und ich schätze jedes Feedback und jede Hilfe, um dieses Problem zu lösen. Wenn Sie weitere Informationen oder Erläuterungen zu etwas benötigen, lassen Sie es mich bitte wissen. Danke noch einmal!

6
yoxalld

Normalerweise würden Sie nur einen meta_value angeben, z.

 $args = array(
     'post_type' => 'business',
     'meta_query'  => array(
            array(
                'key' => 'specials',
                'value' => 'these are not the specials you are looking for - Obi Wan Kenobi'
            )
        )

);

Da es sich bei Ihrem Post-Meta jedoch tatsächlich um eine Datenstruktur handelt, um ein serialisiertes PHP -Array Objekt, ist dies nicht möglich.

Sie können hier mehr lesen:

/ - http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

10
Tom J Nowell