wordpress自定义字段如何支持区间查询

关于这个问题,其实在《几招搞定wordpress自由获取指定分类中的日志》一节中讲解过有关函数的使用方法;同时,Daniel Pataki在Smashing Magazine已经发布一篇关于《Using WP_Query In WordPress》的文章,其中进一步讲解了关于WP_Query的诸多进阶使用方法;感兴趣的朋友可以至内容下方,点击链接前去看看。

言归正传,来看看在wordpress里,如何实现自定义字段的区间查询功能?

在百度知道,有一道这样的提问:

有一个自定义字段为price ,想做一个根据这几个值0-99 100-199 200-499来分类查询并获得文章。
http://zhidao.baidu.com/question/871353190867198172.html

看到这个问题,想想能不能通过提供一定的参数,就可以实现这样的功能?答案是肯定的,有关详细的查询参数列表,可以至官网 in the Codex进一步了解;

这里仅列出代码,如下:


    $min_price = 0;
    $max_price = 99;
    //The args
    $args = array(
        'post_type'         => 'post',
        'post_status'       => 'publish',
        'posts_per_page'    => -1,
        'meta_query' => array(
            array(
                'key'       => 'price',
                'value'     => array($min_price, $max_price),
                'compare'   => 'BETWEEN',
                'type'      => 'NUMERIC'
            )
        )
    );
  
    // The Result
    $naruco = new WP_Query( $args );
    
    var_dump($naruco);
    

    if ( $naruco -> have_posts() ) {
 
        // The Loop
        while ( $naruco ->have_posts() ) : $naruco ->the_post();

        ....内容输出部分略
 
        endwhile; 
 
    }
 

参考资料:
Using WP_Query In WordPress

6 thoughts on “wordpress自定义字段如何支持区间查询”

  1. 嗨,您好。。我是在百度知道请教您有关wordpress问题的那个“MoMo小盆友”。。我由于IP不是国内,所以无法再在百度给您回复,继续请教我的问题。。所以找到了您这个链接(很高兴看到您也是用的twenty twelve)。。我想在贵宝地继续向您请教WP的问题。。我就直接粘贴我的内容了。。

    “您好。。谢谢您对我的回答,我觉得我找对人了!!哈哈。。先谢谢啦。
    您说的那篇文档,我还没有看过,我现在正在看。但是您说‘如果能确保WP可访问到您新建的TEMPLATE文件,那要想使用wpdb其实是很方便的。’这句话,我在新建page的时候,是可以选用我创建的模板的,所以我觉得WP应该是可以访问的吧。
    然后接下来的数据库访问过程中,我一旦添加连接数据库的代码,整个页面反而显示异常,比如菜单栏会出现所有现有页面的名字(我就是复制了page.php文件,然后在里面定义了function来连接数据库)。我也不知道怎么回事。。我想如果不麻烦的话,可以把我的模板文件发给您看看吗?我基本没有改动,但是我想问题还是源于这里(这个网络的问题让我很头疼,所以不介意,咱们可以邮件联系吗:really2clever(at)163(dot)com)。。template那篇文档,我现在正在看,看完如果还有什么疑问,还请您不吝赐教。。非常感谢~”

    再次感谢您的宝贵时间与答复。。谢谢~祝好~

    1. 针对你这个问题,我有两点建议:
      1、如果你当前页面模板可以被正常加载的情况下,需要访问另外一个数据库,可以参考require_wp_db()函数的方法,新增一个独立的全局数据库对象变量,比如:
      if ( class_exists('wpdb') ){
      global $mydb;
      $mydb = new wpdb( '数据库用户名', '密码', '您的数据库', 'db host' );
      var_dump( $mydb ); //查看输出的结果是否正常
      }

      我花了点时间测试了一下,这样是可以使用的,一旦$mydb创建成功,你即可以使用里面的get_results等函数实现数据库的相关操作了。进一步测试还需要你自己来完成

      2、或许将你原有的数据库,整合到现在的WP数据库中,可能更方便些;
      比如你原数据库中有TABLE1,TABLE2….将这些表拷贝到WP表中,并将表前缀改成一至,如wp_table1, wp_table2…
      这样$wpdb也就能正常访问这些表了吧?!

      1. 老师,您好。。谢谢您的回复。可是很抱歉我还是没有解决,我的基础实在太弱了。所以只有再次求教。。非常抱歉给您添麻烦了。

        对于您的第一个方法,我在/includes下的load.php加了您给我的这句话,可以显示数据库的一些信息,但是是在所有的页面都显示了。。然后对于我想显示数据的页面,我不知道是应该在template里面写sql语句,还是特定的那个页面写sql,但是试来试去都没有任何动静。。我看了一下网上的视频,很多是在dashboard里面显示sql的查询结果,而不是在页面。。也有的是在plugin里面写sql语句。。我更加迷惑了。。再次骚扰,请您多多包涵,不吝赐教。。

        另外有个不情之请,请问,我可以加你的QQ什么的吗?因为我不在国内,这边实在没有什么人可以请教,和您们又经常有时差。

        我把我在load.php的代码贴上来了,希望能找到问题。。非常感谢您的时间和答复,祝好!

        function require_wp_db() {
        global $wpdb;

        require_once( ABSPATH . WPINC . ‘/wp-db.php’ );
        if ( file_exists( WP_CONTENT_DIR . ‘/db.php’ ) )
        require_once( WP_CONTENT_DIR . ‘/db.php’ );

        if ( isset( $wpdb ) )
        return;

        $wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST );

        if ( class_exists(‘wpdb’) ){
        global $mydb;

        $mydb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST );

        }
        }

          1. 问题已经解决了,sql语句我在template里面写错位置了。。终于解决了,还是谢谢您!祝您新春愉快!

Irene进行回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注