PHPackages                             wenprise/wp-query-builder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. wenprise/wp-query-builder

ActiveLibrary[Database &amp; ORM](/categories/database)

wenprise/wp-query-builder
=========================

A query builder for WordPress WP\_Query, inspired by Doctrine Query Builder

0.1(7y ago)014MITPHPPHP &gt;=5.5.9

Since Oct 29Pushed 7y ago1 watchersCompare

[ Source](https://github.com/iwillhappy1314/WPQueryBuilder)[ Packagist](https://packagist.org/packages/wenprise/wp-query-builder)[ Docs](https://www.wpzhiku.com)[ RSS](/packages/wenprise-wp-query-builder/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

WPQueryBuilder
==============

[](#wpquerybuilder)

A query builder for WordPress WP\_Query, inspired by the Doctrine Query Builder

[![Build Status](https://camo.githubusercontent.com/cc2dd57bd074d57e1d9db03d9146088bd6d7b03b9643e4ec45614e32f8e27175/68747470733a2f2f7472617669732d63692e6f72672f53696d6574747269632f575051756572794275696c6465722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/Simettric/WPQueryBuilder)

[![SensioLabsInsight](https://camo.githubusercontent.com/d3d7202bd6e65ec83259515814c128b3618ce57a7a79af38f6568a7e12e26449/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f36333438303134322d653164642d343063382d616337632d3234646438323433343239372f6269672e706e67)](https://insight.sensiolabs.com/projects/63480142-e1dd-40c8-ac7c-24dd82434297)

INSTALLATION
============

[](#installation)

```
composer require simettric/wp-query-builder

```

USAGE
=====

[](#usage)

### 元数据查询

[](#元数据查询)

获取元数据 "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();

```

Retrieve any post type where post meta price is equal or greater than 10 AND (size meta value equals to XL OR post meta color value equals to 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();

```

### 自定义分类法查询

[](#自定义分类法查询)

Retrieve the contents under ("pets" OR "tools") values in the "category" taxonomy AND in under 'sweet' in "custom" taxonomy

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

```

Retrieve the contents under ("pets" OR "tools") values in the "category" taxonomy BUT exclude contents in their children

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

```

Retrieve the contents those are NOT under ("pets" OR "tools") values in the "category" taxonomy

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

```

You can have nested relations too

```
      $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();

```

### 文章类型

[](#文章类型)

Retrieve all PAGES

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

```

Retrieve all CUSTOM POST TYPE

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

```

Retrieve all CUSTOM POST TYPE and PAGES

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

```

### 搜索

[](#搜索)

Search contents

```
        $builder = new Builder();

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

```

### IN and NOT IN

[](#in-and-not-in)

Retrieve contents with ID in array of IDS

```
        $builder = new Builder();

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

```

Retrieve contents with ID not in array of IDS

```
        $builder = new Builder();

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

```

### ORDERBY

[](#orderby)

Order contents by title descending

```
        $builder = new Builder();

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

```

Order contents by date, ascending

```
        $builder = new Builder();

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

```

Order contents by title descending and date, ascending

```
        $builder = new Builder();

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

```

Order contents by custom meta

```
        $builder = new Builder();

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

```

Order contents by custom numeric meta

```
        $builder = new Builder();

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

```

### LIMITS AND OFFSETS

[](#limits-and-offsets)

Retrieve only 10 contents

```
        $builder = new Builder();

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

```

Retrieve 20 contents starting from the 10th position

```
        $builder = new Builder();

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

```

### RETRIEVING

[](#retrieving)

Get the WPQuery object

```
        $builder = new Builder();

        $wp_query = $builder->getWPQuery();

```

Get the Posts array

```
        $builder = new Builder();

        $posts = $builder->getPosts();

```

Get the WPQuery parameters array

```
        $builder = new Builder();

        $params = $builder->getParameters();

        $query = new WP_Query($params);

```

Get an array containing only the post IDs. This is useful when you want to return all records without pagination from a large recordset in order to avoid memory issues.

```
        $builder = new Builder();

        $ids = $builder->getPostIDsOnly();

        $builder = new Builder();

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

```

###  Health Score

22

—

LowBetter than 22% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 75% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2755d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a0fa49958b7c45c0b373b185feb5debe5bdd35be3b3536bc44477d3bd3a2d435?d=identicon)[iwillhappy1314](/maintainers/iwillhappy1314)

---

Top Contributors

[![asiermarques](https://avatars.githubusercontent.com/u/149459?v=4)](https://github.com/asiermarques "asiermarques (33 commits)")[![iwillhappy1314](https://avatars.githubusercontent.com/u/1455683?v=4)](https://github.com/iwillhappy1314 "iwillhappy1314 (6 commits)")[![jeslopcru](https://avatars.githubusercontent.com/u/2398253?v=4)](https://github.com/jeslopcru "jeslopcru (5 commits)")

---

Tags

wordpress

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/wenprise-wp-query-builder/health.svg)

```
[![Health](https://phpackages.com/badges/wenprise-wp-query-builder/health.svg)](https://phpackages.com/packages/wenprise-wp-query-builder)
```

###  Alternatives

[dbout/wp-orm

WordPress ORM with Eloquent.

1279.6k1](/packages/dbout-wp-orm)[williarin/wordpress-interop

Interoperability library to work with WordPress database in third party apps

6610.9k2](/packages/williarin-wordpress-interop)[tiny-pixel/acorn-db

Eloquent database support for Acorn projects

388.7k](/packages/tiny-pixel-acorn-db)[devgeniem/better-wp-db-error

Better WordPress database error handling.

1161.3k](/packages/devgeniem-better-wp-db-error)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
