barnythorpe / wp-fluent-queries
A fluent interface for constructing Wordpress queries in a safe, readable and clean manner.
0.1.0
2025-05-11 12:10 UTC
Requires (Dev)
- barnythorpe/clarify: ^0.1.0
- laravel/pint: ^1.22
- lucleroy/php-regex: ^0.5.1
- nette/php-generator: ^4.1
- pestphp/pest: ^3.8
- phpdocumentor/reflection-docblock: ^5.6
- phpdocumentor/type-resolver: ^1.10
- roots/wordpress: ^6.7
- ryangjchandler/lexical: ^0.2.1
- symfony/console: ^7.2
- symfony/property-access: ^7.2
- symfony/string: ^7.2
- symfony/var-dumper: ^7.2
This package is auto-updated.
Last update: 2025-05-11 12:32:08 UTC
README
This package aims to create a fluent interface for constructing Wordpress queries in a safe, readable and clean manner.
🔧 Installation
composer require barnythorpe/wp-fluent-queries
🛠Usage
Main Query Builders
The package provides query builders for the following:
- WP_Query - https://developer.wordpress.org/reference/classes/wp_query/
- WP_Term_Query - https://developer.wordpress.org/reference/classes/wp_term_query/
- WP_User_Query - https://developer.wordpress.org/reference/classes/wp_user_query/
The queries are constructed like so:
$builder = new PostQueryBuilder(); $builder ->postType('custom_post_type') ->postsPerPage(12) ->fields('ids');
or to make life simpler using the factory class:
$query = Query::post() ->postType('custom_post_type') ->postsPerPage(12) ->fields('ids');
Nesting Conditions
The package also provides a solution for the complex nested queries within the main wordpress queries:
- WP_Meta_Query - https://developer.wordpress.org/reference/classes/wp_meta_query/
- WP_Tax_Query - https://developer.wordpress.org/reference/classes/wp_tax_query/
- WP_Date_Query - https://developer.wordpress.org/reference/classes/wp_date_query/
These can be constructed using the group and condition classes and added to the main query like so:
$wp_query = Query::post() ->postType('custom_post_type') ->taxQuery(QueryGroups::tax( QueryConditions::tax()->taxonomy('example_tax')->terms([1, 2, 3])->field('term_id'), QueryConditions::tax()->taxonomy('another_tax')->terms([4, 5, 6])->field('term_id'), )) ->metaQuery(QueryGroups::meta( QueryConditions::meta()->compare('=')->type('CHAR')->key('foo')->value('bar'), QueryConditions::meta()->compare('!=')->type('CHAR')->key('baz')->value('qux'), ));
Please go to the Groups and Conditions tests for more examples: