simettric / wp-query-builder
WordPress WP_Query 的查询构建器,灵感来源于 Doctrine Query Builder
Requires
- php: >=5.5.9
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-14 20:14:53 UTC
README
WordPress WP_Query 的查询构建器,灵感来源于 Doctrine Query Builder
安装
composer require simettric/wp-query-builder
用法
元查询
检索所有帖子类型,其中帖子元数据颜色值等于蓝色 OR 大小元数据值等于 XL
$builder = new Builder();
$wp_query = $builder->createMainMetaQuery("OR")
->addMetaQuery(MetaQuery::create('color', 'blue'))
->addMetaQuery(MetaQuery::create('size', 'XL'))
->getWPQuery();
检索所有帖子类型,其中帖子元数据价格等于或大于 10 OR 大小元数据值等于 XL
$builder = new Builder();
$wp_query = $builder->createMainMetaQuery("AND")
->addMetaQuery(MetaQuery::create('price', 10, '>=', 'NUMERIC'))
->addMetaQuery(MetaQuery::create('size', 'XL'))
->getWPQuery();
检索所有帖子类型,其中帖子元数据价格等于或大于 10 AND (大小元数据值等于 XL OR 帖子元数据颜色值等于蓝色)
$builder = new Builder();
$builder->createMainMetaQuery("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->createMainTaxonomyQuery("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->createMainTaxonomyQuery("AND")
->addTaxonomyQuery(TaxonomyQuery::create('category', 'slug', array('pets', 'tools'), false))
->getWPQuery();
检索不属于 "category" 分类中 "pets" OR "tools" 值的内容
$builder = new Builder();
$wp_query = $builder->createMainTaxonomyQuery("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->createMainTaxonomyQuery("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();
限制和偏移量
只检索 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();