web-dev-qa-db-ja.com

Wp_query meta_queryキーのメタボックス値を取得する方法

現在行っているようなカスタムフィールドの代わりにカスタムメタボックスの値を取得するために、WP_Queryをどのように変更すればよいでしょうか。

これは私のクエリがどのように見えるかです:

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

更新日:(私はメタボックスを作成するために使用しているもの)

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

私はmeta_events.phpを正しい場所に持っています、その特定のページのメタボックスを見て更新します、それはその価値を保持します、私はどんなページのメタボックスのコンテンツも表示することができます、これは私がつかむのに使っているものです私のメタボックスの価値:

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

では、meta_queryキーを変更してこのメ​​タボックス値を使用してページをフィルタ処理する方法を教えてください。

3
Chris

カスタムメタボックスはカスタムフィールドと同じ方法で値を格納します。それらはきれいなUIを持っています。

カスタムメタボックスがその値を格納しているkeyを知る以外には、クエリを変更する必要はありません。カスタムメタボックスを生成するためにプラグインを使用している場合は、メタキーを見つけるためにその内部を掘り下げる必要があります。ほとんどのカスタムメタボックスは、キーをアンダースコア(_)で始めることで、カスタムフィールドUIに表示されないようにキーを隠します。

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

複数のメタボックスを検索したい場合はこれを試してください。それは私のために働いた

$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