wenprise/wp-query-builder

WordPress WP_Query 的查询构建器,灵感来自 Doctrine Query Builder

0.1 2018-10-29 07:45 UTC

This package is auto-updated.

Last update: 2024-09-29 05:08:36 UTC


README

WordPress WP_Query 的查询构建器,灵感来自 Doctrine Query Builder

Build Status

SensioLabsInsight

安装

composer require simettric/wp-query-builder

使用方法

元数据查询

获取元数据 "color" 为 "blue" 或者 "size" 为 "XL" 的所有文章类型中的文章

       $builder = new Builder();
       $wp_query = $builder->createMetaQuery("OR")
                            ->addMetaQuery(MetaQuery::create('color', 'blue'))
                            ->addMetaQuery(MetaQuery::create('size', 'XL'))
                            ->getWPQuery();

获取元数据 "price" 大于等于 "10" 并且 "size" 为 "XL" 的所有文章类型中的文章

       $builder = new Builder();
       $wp_query = $builder->createMetaQuery("AND")
                            ->addMetaQuery(MetaQuery::create('price', 10, '>=', 'NUMERIC'))
                            ->addMetaQuery(MetaQuery::create('size', 'XL'))
                            ->getWPQuery();  

检索任何文章类型,其中文章元数据 price 等于或大于 10 且 (size 元数据值等于 XL 或文章元数据 color 值等于 blue)

       $builder = new Builder();
       $builder->createMetaQuery("AND")
               ->addMetaQuery(MetaQuery::create('price', 10, '>=', 'NUMERIC'));
                    
       $condition = new MetaQueryCollection('OR');
       $condition->add(MetaQuery::create('color', 'blue'))
                 ->add(MetaQuery::create('size', 'XL'));
                 
                 
       $wp_query = $builder->addMetaQueryCollection($condition)
                           ->getWPQuery();  

自定义分类法查询

检索在 "category" 分类法中值为 ("pets" OR "tools") 且在 "custom" 分类法中为 'sweet' 的内容

       $builder = new Builder();
       $wp_query = $builder->createTaxonomyQuery("AND")
                            ->addTaxonomyQuery(TaxonomyQuery::create('category', 'slug', array('pets', 'tools')))
                            ->addTaxonomyQuery(TaxonomyQuery::create('custom', 'slug', array('sweet')))
                            ->getWPQuery();

检索在 "category" 分类法中值为 ("pets" OR "tools") 但排除其子内容的内容

       $builder = new Builder();
       $wp_query = $builder->createTaxonomyQuery("AND")
                            ->addTaxonomyQuery(TaxonomyQuery::create('category', 'slug', array('pets', 'tools'), false))
                            ->getWPQuery();

检索不在 "category" 分类法中值为 ("pets" OR "tools") 的内容

       $builder = new Builder();
       $wp_query = $builder->createTaxonomyQuery("AND")
                            ->addTaxonomyQuery(TaxonomyQuery::create('category', 'slug', array('pets', 'tools'), true, 'NOT IN'))
                            ->getWPQuery();

您还可以有嵌套关系

      $builder = new Builder();
      
      $collection = new TaxonomyQueryCollection('OR');
      $collection->add(TaxonomyQuery::create('tag', 'slug', array('cats')));
      $collection->add(TaxonomyQuery::create('custom', 'slug', array('sweet')));
      
      $wp_query = $builder->createTaxonomyQuery("AND")
                           ->addTaxonomyQuery(TaxonomyQuery::create('category', 'slug', array('pets', 'tools')))
                           ->addTaxonomyQueryCollection($collection)
                           ->getWPQuery();     

文章类型

检索所有页面

       $builder = new Builder();
       $wp_query = $builder->addPostType(Builder::POST_TYPE_PAGE)
                           ->getWPQuery();

检索所有自定义文章类型

       $builder = new Builder();
       $wp_query = $builder->addPostType('your_custom')
                           ->getWPQuery();

检索所有自定义文章类型和页面

       $builder = new Builder();
       $wp_query = $builder->addPostType('your_custom')
                           ->addPostType(Builder::POST_TYPE_PAGE)
                           ->getWPQuery();

搜索

搜索内容

        $builder = new Builder();

        $wp_query = $builder->search("search query")
                            ->getWPQuery();

IN 和 NOT IN

检索 ID 在 ID 数组中的内容

        $builder = new Builder();

        $wp_query = $builder->inPostIDs(array(1,2,3))
                            ->getWPQuery();

检索 ID 不在 ID 数组中的内容

        $builder = new Builder();

        $wp_query = $builder->notInPostIDs(array(1,2,3))
                            ->getWPQuery();

ORDERBY

按标题降序排序内容

        $builder = new Builder();

        $wp_query = $builder->setOrderBy("title")
                            ->getWPQuery();

按日期升序排序内容

        $builder = new Builder();

        $wp_query = $builder->setOrderBy("date")
                            ->setOrderDirection("ASC")
                            ->getWPQuery();

按标题降序和日期升序排序内容

        $builder = new Builder();

        $wp_query = $builder->addOrderBy("title", "DESC")
                            ->addOrderBy("date", "ASC")
                            ->getWPQuery();

按自定义元数据排序内容

        $builder = new Builder();

        $wp_query = $builder->setOrderByMeta("color", "DESC")
                            ->getWPQuery();

按自定义数值元数据排序内容

        $builder = new Builder();

        $wp_query = $builder->setOrderByMeta("price", "ASC", true)
                            ->getWPQuery();

LIMITS AND OFFSETS

仅检索 10 条内容

        $builder = new Builder();

        $wp_query = $builder->setLimit(10)
                            ->getWPQuery();

从第 10 位开始检索 20 条内容

        $builder = new Builder();

        $wp_query = $builder->setLimit(20)
                            ->setOffset(10)
                            ->getWPQuery();

检索

获取 WPQuery 对象

        $builder = new Builder();

        $wp_query = $builder->getWPQuery();

获取文章数组

        $builder = new Builder();

        $posts = $builder->getPosts();

获取 WPQuery 参数数组

        $builder = new Builder();

        $params = $builder->getParameters();
        
        $query = new WP_Query($params);

获取仅包含文章 ID 的数组。这在您想从大型记录集中返回所有记录而不分页以避免内存问题时非常有用。

        $builder = new Builder();

        $ids = $builder->getPostIDsOnly();
        
        $builder = new Builder();
        
        $wp_query = $builder->inPostIDs($ids)
                            ->getWPQuery();