it-swarm.com.de

So greifen Sie auf den Metabox-Wert im Schlüssel "wp_query meta_query" zu

Wie ändere ich meine WP_Query, um einen benutzerdefinierten Meta-Box-Wert anstelle eines benutzerdefinierten Felds zu erhalten, wie ich es derzeit tue?

So sieht meine Abfrage aus:

<?php $today = date("Y-m-d",mktime(0,0,0,date("m"),date("d"),date("Y")));

$the_query = new WP_Query(  array ('showposts' => 10,
                'post_type' => 'page',
                'meta_query'=> array(
                    array(
                      'key' => 'start_date',
                      'compare' => '<=',
                      'value' => $today,
                      'type' => 'DATE',
                    )),
                'meta_key' => 'start_date',
                'orderby' => 'meta_value',
                'order' => 'DESC'
                                )
                        );

while ( $the_query->have_posts() ) : $the_query->the_post();
?>

Update: (was ich benutze, um die Metabox zu erstellen)

function my_meta_init_events() {
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
    if ($post_id == '376') {
    foreach (array('post','page') as $type) {
        add_meta_box('my_all_meta_events', 'Start date', 'my_meta_setup_events', $type, 'normal', 'high'); }
    }
        add_action('save_post','my_meta_save_events'); }
function my_meta_setup_events() {
    global $post;
    $meta = get_post_meta($post->ID,'_my_meta_events',TRUE);
     include(MY_THEME_FOLDER . '/inc/meta_events.php');
    echo '<input type="hidden" name="my_meta_noncename_events" value="' . wp_create_nonce(__FILE__) . '" />'; }

function my_meta_save_events($post_id) {
    if (!wp_verify_nonce($_POST['my_meta_noncename_events'],__FILE__)) return $post_id;
    if ($_POST['post_type'] == 'page') {
        if (!current_user_can('edit_page', $post_id)) return $post_id; }
    $current_data = get_post_meta($post_id, '_my_meta_events', TRUE);  
    $new_data = $_POST['_my_meta_events'];
    my_meta_clean_events($new_data); 
    if ($current_data)  {
        if (is_null($new_data)) delete_post_meta($post_id,'_my_meta_events');
        else update_post_meta($post_id,'_my_meta_events',$new_data); }
    elseif (!is_null($new_data)) {
        add_post_meta($post_id,'_my_meta_events',$new_data,TRUE); }
    return $post_id;
}
function my_meta_clean_events(&$arr) {
    if (is_array($arr)) {
        foreach ($arr as $i => $v) {
            if (is_array($arr[$i])) {
                my_meta_clean_events($arr[$i]);

                if (!count($arr[$i])) {
                    unset($arr[$i]); }
            } else {
                if (trim($arr[$i]) == '') {
                    unset($arr[$i]); }
            }
        }
        if (!count($arr)) { 
            $arr = NULL; }
    }
}

Ich habe meta_events.php an der richtigen Stelle. Ich sehe und aktualisiere die Metabox auf dieser bestimmten Seite. Sie behält ihren Wert. Ich kann den Inhalt der Metabox auf jeder Seite anzeigen. Dies ist, was ich benutze, um zu greifen der wert meiner metabox:

global $wp_query;   $array = get_post_meta(376,'_my_meta_events',TRUE); ?><?php $my_date = $array['date'];

Wie kann ich nun meinen meta_query-Schlüssel ändern, um diesen Metabox-Wert zum Filtern der Seiten zu verwenden?

3
Chris

Benutzerdefinierte Meta-Boxen speichern Werte auf dieselbe Weise wie benutzerdefinierte Felder. Sie haben lediglich eine schönere Benutzeroberfläche.

Sie sollten Ihre Abfrage nur ändern müssen, wenn Sie die key kennen, unter der das benutzerdefinierte Meta-Feld seine Werte speichert. Wenn Sie ein Plug-in zum Generieren der benutzerdefinierten Meta-Box verwenden, müssen Sie die Interna durchsuchen, um den Meta-Schlüssel zu finden. Die meisten benutzerdefinierten Meta-Boxen "verbergen" die Schlüssel vor dem Anzeigen in der Benutzeroberfläche für benutzerdefinierte Felder, indem sie mit einem Unterstrich (_) gestartet werden.

<?php
$the_query = new WP_Query(  array (
    'showposts' => 10,
    'post_type' => 'page',
    'meta_query'=> array(
        array(
            'key' => 'start_date', // this key will change!
            'compare' => '<=',
            'value' => $today,
            'type' => 'DATE',
        )
    ),
    'meta_key' => 'start_date',
    'orderby' => 'meta_value',
    'order' => 'DESC'
) );
3
chrisguitarguy

versuchen Sie dies, wenn Sie mehrere Metaboxen durchsuchen möchten. es hat bei mir funktioniert

$args = array(
            'post_type' => 'teams',
            'meta_query'  => array(
            'relation' => 'OR',
            array(
                'key' => 'teamMember_skype',
                'value' => 'your search terms here'
            ),
            array(
                'key' => 'teamMember_pinterest',
                'value' => 'your search terms here'
            )
        )
        );
$teams = new WP_Query( $args );
0
Shuhad zaman