tax_query用于获取具有空值的字段的帖子?

时间:2015-09-29 09:44:38

标签: wordpress metadata wp-query

我定义了一个自定义字段,以便能够隐藏家中的帖子,如下所示:

/* Campo adicional que puede ocultar noticia de la home */
function mnd_get_custom_field( $value ) {
    global $post;
    $custom_field = get_post_meta( $post->ID, $value, true );
    if ( !empty( $custom_field ) )
        return is_array( $custom_field ) ? stripslashes_deep( $custom_field ) : stripslashes( wp_kses_decode_entities( $custom_field ) );
    return false;
}
function mnd_add_custom_meta_box() {
    add_meta_box( 'home-page', __( 'Home page', 'mnd' ), 'mnd_meta_box_output', 'post', 'normal', 'high' );
}
add_action( 'add_meta_boxes', 'mnd_add_custom_meta_box' );
function mnd_meta_box_output( $post ) {
     wp_nonce_field( 'my_mnd_meta_box_nonce', 'mnd_meta_box_nonce' ); ?>
    <p>
     <label for="mnd_hide_homepage"><?php _e( 'Hide from homepage', 'mnd' ); ?>:</label>
     <input type="checkbox" name="mnd_hide_homepage" id="mnd_hide_homepage" checked="<?php echo mnd_get_custom_field( 'mnd_hide_homepage' ) == 1 ? 'checked' : ''; ?>" value="1" size="50" />
    </p>
    <?php
}
function mnd_meta_box_save( $post_id ) {
     if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
     if( !isset( $_POST['mnd_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['mnd_meta_box_nonce'], 'my_mnd_meta_box_nonce' ) ) return;
     if( !current_user_can( 'edit_post', get_the_id() ) ) return;
     if( isset( $_POST['mnd_hide_homepage'] ) )
     update_post_meta( $post_id, 'mnd_hide_homepage', esc_attr( $_POST['mnd_hide_homepage'] ) );
}
add_action( 'save_post', 'mnd_meta_box_save' );

我正在尝试:

// The Query
$ppp = 12;
$page = $_GET['page'];
$args_count = array(
    'post_type' => 'post',
    'paged' => false,
    'status' => 'publish'
);
$posts_home_count = new WP_Query( $args_count );
$manyPosts = $posts_home_count->found_posts;
$paginas = $manyPosts / $ppp;
wp_reset_postdata(); 
$meta_params  = array(
    array(
        'key' => 'mnd_hide_homepage',
        'value' => 1,
        'compare' => '!=',
        'type' => 'NUMERIC'
    )
);
$args = array(
    'post_type' => 'post',
    'posts_per_page' => $ppp,
    'paged' => $page,
    'page' => $page,
    'status' => 'publish'/*,
    'meta_query' => $meta_params    */
);
//print_r ( $args );
$posts_home = new WP_Query( $args );

它不会返回任何帖子,

但如果我改为

'compare' => '=',

然后它返回所有已检查的帖子

知道我缺少什么吗?

2 个答案:

答案 0 :(得分:1)

有时Meta Query存在一些问题,并且问题并不总是可见 - 请尝试以下方法:

  1. var_dump WP_Query对象并手动检查SQL - 你看到了问题吗?

  2. 您是否尝试删除&#39;输入&#39; =&GT; &#39; NUMERIC&#39;

  3. &#34; hack&#34;溶液:

    全球$ wpdb;

    $ ids = $ wpdb-&gt; get_results(&#34; SELECT $ wpdb-&gt; posts.id FROM $ wpdb-&gt;发布WHERE post_status =发布INNER JOIN $ wpdb-&gt; post_meta ON $ wpdb-&gt ; post_meta.post_id = $ wpdb-&gt; posts.id WHERE $ wpdb-&gt; post_meta.key =&#39; mnd_hide_homepage&#39; AND $ wpdb-&gt; post_meta.value!=&#39; 1&#39; &#34);

    //将带有post__in的id放入WP_Query参数

  4. (未测试的)

    如果没有,这可能有助于找到它。

答案 1 :(得分:0)

试试这个 -

array( 'key' => 'mnd_hide_homepage', 'value' => '1', 'compare' => '!=', 'type' => 'NUMERIC' )

或者

array( 'key' => 'mnd_hide_homepage', 'value' => array('1'), 'compare' => 'NOT IN' )