Today while working over a premium WordPress theme I had to solve two problems. First of all I needed to build a custom WordPress query through which I could display posts from a particular term while excluding other particular terms. Secondly, I wanted to provide end-user with a select-2 based drop down menu to select from the present terms of a custom taxonomy.
Context#
Think of a theme which displays three different blocks of posts on the homepage. Basically, I am building a theme for Easy Digital Downloads plugin. Now think again, at the homepage you need to add three different blocks of posts from three different terms of EDD’s Categories. Where EDD’s categories are based upon a custom taxonomy called download_category.
Data Set#
- Block #1: It will display posts from the term Featured from EDD categories while any post in terms Recent and Deals would be excluded
- Block #2: It will display posts from the term Recent from EDD categories while any post in terms Featured and Deals would be excluded
- Block #3: It will display posts from the term Deals from EDD categories while any post in terms Featured and Recent would be excluded
Building a custom WPQuery#
First of all I needed to build a custom query. While building custom WPQuery for taxonomy you need to realize that it is pretty different from simple queries of custom post types. Here one needs to build an array for tax_query argument. Inside this array we define the relation of two more arrays of posts where former is responsible for selecting the posts from a term and later array is responsible for excluding posts from defined terms. Here is how I did it.
Where term ID 7 is the Featured term ID and 5,6 are for Recent and Deals terms respectively.
Adding a terms to Redux field type: select#
I use Redux Framework to provide my theme users with a set of options in form of a Theme Settings page. Luckily Redux offers a select-2 based field type called select. I wanted to provide theme users with a drop down panel from where they could select a particular category for a particular block i.e. term from a custom taxonomy.
All I had to do was build a custom arguments array to define which particular custom taxonomy should be used to populate the select-2 based drop-down menu. So, I went ahead and started reading the docs for select field. I must say Dovy Paukstys (@SimpleRain) has done a pretty good job with Redux framework and its documentation. Though at first, I was not able to make much sense out of it. Then after several iterations I finally found a solution which I intend to document today.
Look at line #14, I have added an array where I defined the custom taxonomy which should be used to populate terms in the select drop down. This is how it looks inside theme options.
Finally here is what WPQuery for Block #1 looks like
That’s about it. If you have any questions, let me know.
Isu
What if I want get posts from Taxonomy and there are must be from different post type?
Eg.
‘type’ => ‘select’,
‘data’ => ‘posts’,
‘args’ => array(‘taxonomy’ => array(‘download_category’)),
But this not work, it show posts from default posts.
Ahmad Awais
I didn’t really get your question. Posts from taxonomies are already available at their archive pages.