I used wordpress to make a website with some custom types. The problem is that i need to implement a filter for these types and I have some questions about the plugins that i'm using for this project:
For to make custom types and views I'm using Types and Views plugins for wordpress.
I made a new custom type with some fields (title, price, some selectors, ...) and I need to filter all the information ordering the results following 2 criterias. I don't know if is it possible to do so using the Views/Types plugin.
I also need to filter the fields of the filter. For example, if i have 2 fields one called Countries and other called Cities, if i select Spain in countries I should see only spanish cities in the second field.
Any idea if i can do that using Types and Views plugins? is there any other plugin?
Thanks in advance!
Any good plugin will save the custom fields as post-meta. You need to find out what the key is for the field you are trying to use as a filter. Once you have that you can use a simple meta query to get the posts you need:
$args = array(
'post_type' => 'post', // The post type
'posts_per_page' => -1, // Get all posts
'orderby' => 'rand', // Random order, also can use 'post_date' or 'post_title'
'order' => 'ASC', // Direction of sort
'meta_key' => 'my_meta_key', // Whatever your key is
'meta_query' => array(
array(
'key' => 'my_meta_key', // Whatever your key is
'value' => 'foo' // What it should be
'compare' => 'IN', // How to compare the value to the stored value
)
)
);
$query = new WP_Query($args); // The query
Here is more on the Wordpress codex.
Related
I have two custom post types: venue and event.
Lets say that both post types have the _location meta key (custom field) and both of them also have music-genre taxonomy.
Event also has _association meta key which contains ID of the associated venue.
Now Querying events by mentioned taxonomy and meta field is very easily done like this:
$query = new WP_Query([
'post_type' => 'event',
'tax_query' => [
[
'taxonomy' => 'music-genre',
'field' => 'slug',
'terms' => ['house', 'jazz', 'rock']
]
],
'meta_query' => [
[
'key' => '_location',
'value' => ['Miami', 'Ibiza', 'Zrce'],
'compare' => 'IN'
]
]
]);
$posts = $query->posts;
But I want to also get events with empty '_location' field IF his parent/associated post (ID stored under _association meta key) has expected value. Same thing for taxonomies - Music Genre in this example. If event doesn't have associated "Jazz" music genre, but his associated post has it then it should be returned by WP_Query.
So basically I want to inherit meta values and taxonomies from associated post if they doesn't exists or are empty.
I hope you can understand what I want to achieve well... otherwise please ask for further explanation.
In case anyone is wondering im using Carbon Fields library for custom fields.
Also my project is much more complicated, but everything was simplified for this question, so performance matters a lot.
Trying to understand... are you looking for this 'hide_empty' => false?
Looking for a point in the right direction, i've been working on an events plugin for a site, quite a simple plugin, adds a custom post type called events, adds some custom taxonomies, used ACF to add the fields to the CPT.
But I need to add 'start date and time', and 'end date and time' fields to it in a way that I'll be able to sort by start date/time in the admin side, and be able to sort by them when I query the posts as well.
I thought I might be able to do this with the ACF date/time field, but it's just not playing ball. Any ideas?
If i'm understanding correctly, you want to sort your results by a meta value right? that meta value being the date/time field. In your loop, you may want to try out something along the lines of:
$your_custom_query = new WP_Query( array(
'meta_query' => array(
'relation' => 'AND',
'date_clause' => array(
'key' => 'date_time_meta_key_here',
'compare' => 'EXISTS',
)
),
'orderby' => 'date_clause'
));
See the original wordpress documentation here for more info: https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/
I am new to WordPress and learning by implementing. Today I have created a list of archives using wp_get_archives for a custom post type. The list comes up fine!
$args = array(
'type' => 'monthly',
'limit' => '15',
'format' => 'html',
'before' = '',
'after' => '',
'show_post_count' = true,
'echo' => true,
'order' => 'DESC',
'post_type' => 'travelog'
);
wp_get_archives($args);
Now I am stuck with two things and no idea how to solve them!
[ A ]
What I want to accomplish:
I want to achieve the functionality that when somebody clicks on an item from the list it would take him to another page with posts listed for that period only.
What is happening:
WordPress takes me back to site's home page.
How can I tell WordPress to go to a page and display the posts for that period. Posts can be custom post types as well.
[ B ]
What I want
With a Custom Post Type passed ('post_type' => 'travelog') link for each item be like http://local.tourplanner.com/2017/03/travelog
What I am getting
It is like http://local.tourplanner.com/2017/03/?post_type=ravelog
With 'post_type' => 'post', however, there is no query string added to and they look like http://local.tourplanner.com/2017/03
If possible I would love to achieve this without using any plugin.
Looking forward to your suggestions.
How can I retrieve all users registered in my WordPress blog having a particular meta data?
For example I have made an option to add a custom meta data for every registering users having meta key as parent_id. If I want to list all users having parent_id as 2 , then how can I do this?
Since WP v3.1 it's ridiculously easy to search for a user by his/her meta key.
Use the function
get_users($args)
(WP Documentation)
The function takes an array of parameters, in your case you need
get_users(array(
'meta_key' => 'parent_id',
'meta_value' => '42'
))
Simple way how to get one user by his metadata is:
$user = reset(
get_users(
array(
'meta_key' => $meta_key,
'meta_value' => $meta_value,
'number' => 1
)
)
);
Here is how you can get users based on a custom role and multiple metadata keys,
$available_drivers = get_users(
array(
'role' => 'driver',
'meta_query' => array(
array(
'key' => 'approved',
'value' => true,
'compare' => '=='
),
array(
'key' => 'available',
'value' => true,
'compare' => '=='
)
)
)
);
Explaining the above query, I want only those users who I assigned the role of driver, and they are approved and available. The approved and available are custom fields created using ACF as True/False fields.
If you have additional metadata to test, add another array element to the meta_query array.
Meanwhile checkout my open source at github.com/patrickingle
Here is the codex page from Wordpress detailing how to use the get_users($arg); function.
It contains examples how how to build custom functions to fetch various parts of user data. You'll have to naturally build and make some of your own changes to get it how you want.
Additionally here is a link to a function somebody built that will fetch user data based on roles within wordpress. You can configure it in many different ways with some tweeking, but this will allow you to filter your results in a more powerful manner.
I am working on a slider where I will show some contents(featured image and excerpt) pulled from both posts and pages. I want to filter the posts/pages by a custom field called 'slider'!
So if there are some pages and posts with 'slider' custom field only those will appear in the slider. Is it possible in wordpress? If it is then how?
Some guidance will be appreciated!
What you're looking for is the class called WP_Query, has got a detailed explanation in the Codex. Take a look at the post_type argument which accepts an array, thus you can give it a array( 'post', 'page' ) or any other post types that you want to fetch.
Now the meta fetch could be done in two ways, either via the new meta_query argument (from 3.1 onwards I believe) or meta_key and meta_value which are deprecated since 3.1.
Here's a rough example (haven't checked if this works):
$sider_posts = new WP_Query( array(
'post_type' => array( 'post', 'page' ),
'meta_query' => array(
array(
'key' => 'slider',
'value' => 'yes',
'compare' => '='
)
)
) );
while ( $slider_posts->have_posts() ) {
$slider_posts->the_posts();
// output the slide here
}
Hope that makes sense. Cheers!
~ K