web-dev-qa-db-fra.com

Comment récupérer la valeur de metabox dans la clé meta_query de wp_query

Comment pourrais-je modifier mon WP_Query afin d'obtenir une valeur de boîte de méta personnalisée au lieu d'un champ personnalisé comme je le fais actuellement?

Voici à quoi ressemble ma requête:

<?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();
?>

Mise à jour: (ce que j'utilise pour créer le metabox)

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; }
    }
}

J'ai meta_events.php au bon endroit, je vois et met à jour la metabox sur cette page, elle conserve sa valeur, je peux afficher le contenu de la méta-boîte sur n'importe quelle page, c'est ce que j'utilise pour saisir la valeur de ma metabox:

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

Maintenant, comment puis-je modifier ma clé meta_query pour utiliser cette valeur metabox pour filtrer les pages?

3
Chris

Les méta-boîtes personnalisées stockent les valeurs de la même manière que les champs personnalisés, elles ont simplement une interface utilisateur plus jolie.

Vous ne devriez pas avoir besoin de modifier votre requête autrement que de connaître la key sous laquelle la méta-boîte personnalisée stocke ses valeurs. Si vous utilisez un plugin pour générer la méta-boîte personnalisée, vous devrez creuser ses composants internes pour trouver la clé méta. La plupart des méta-boîtes personnalisées "cachent" les clés dans l'interface utilisateur des champs personnalisés en les commençant par un trait de soulignement (_).

<?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

essayez ceci si vous voulez rechercher plusieurs metabox. ça a fonctionné pour moi

$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