How to check efficiently if a given image of a Wordpress blog is already a post thumbnail (featured image) of any of the posts in the Wordpress blog.
Found a solution which seems to do:
function isPostThumbnail($imageId) {
$args = array(
'post_type' => 'post',
'posts_per_page' => 1,
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'compare' => '=',
'value' => $imageId
),
)
);
return sizeof(get_posts( $args )) >0;
}
Related
I'm trying to retrieve posts in Wordpress using the get_posts function, trying to filter by a custom field named cegep_region but the method is returning posts with any value in this field. My query below:
$cegep = get_posts(array(
'post_type' => 'cegep',
'orderby' => 'rand',
'posts_per_page' => -1,
'meta_query' => array(
'key' => 'cegep_region',
'value' => '386',
'compare' => '='
)
));
When I look into the database, 386 is not what there is in the meta_value.
select * from wp_postmeta where post_id=577 and meta_key='cegep_region'
What can I possibly be doing wrong?
Try without using compare and add one more array inside in meta_query
$args = array(
post_type' => 'cegep',
'meta_query' => array(
array(
'key' => 'cegep_region',
'value' => 386,
)
)
);
$postslist = get_posts( $args );
its work fine with me
I'm using the advanced custom fields plugin for wordpress to create a group of custom post types that have a date set within them.
I'm trying to show the previous post, and the next post, based on the date stored in the custom field. The links need to link to posts that have a date set in the future (so don't show links to posts with dates that have gone by)/
I can get a list of all the posts that are in the future, and out put these using the following code;
<?php
$rightnow = current_time('Ymd');
$args = array(
'post_type' => 'Courses',
'posts_per_page' => '25',
'meta_query' => array(
array(
'key' => 'date_of_the_course_single_day',
'compare' => '>=',
'value' => $rightnow,
)
),
'meta_key' => 'date_of_the_course_single_day',
'orderby' => 'meta_value',
'order' => 'ASC',
'post_status' => 'publish'
);
$posts = get_posts($args);
foreach ( $posts as $post ) {
?>
Output details of post here....
<?php
}
?>
What I thought I could do, is the get the current post's position in the array, to then get details of the posts one before and one after... but I haven't got a clue how to do this.
I've experimented with the wordpress next_post_link and previous_post_link functions, but these seem to work based on when the post was added to wordpress, rather than based on my custom date field.
Am I going about this the complete wrong way? Any tips or pointers would be much appreciated!
Use WP_Query plus paginate_links
$rightnow = current_time('Ymd');
// Query Args
$args = array(
'post_type' => 'Courses',
'posts_per_page' => '25',
'meta_query' => array( array(
'key' => 'date_of_the_course_single_day',
'compare' => '>=',
'value' => $rightnow,
) ),
'meta_key' => 'date_of_the_course_single_day',
'orderby' => 'meta_value',
'order' => 'ASC',
'post_status' => 'publish'
);
$query = new WP_QUery( $arg );
$posts = $query->get_posts();
// Paginate Args
$page_args = array(
'base' => 'your_custom_page_url'.'%_%', // Make sure you got this current depending on your setup
'format' => '/%#%', // requires pretty permalinks
'total' => $query->max_num_pages,
'current' => 0,
'prev_text' => __('«'),
'next_text' => __('»'),
);
foreach ( $posts as $post ) {
// Output
}
echo paginate_links( $page_args );
You have to verify that the base and format of paginate args are correct of it won't properly worked.
I know we can filter posts with a featured image by using
'meta_query' => array(
array( 'key' => '_thumbnail_id'),
)
in WP_Query()
But how do I get posts without featured image?
Try this?
$args = array(
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'value' => '?',
'compare' => 'NOT EXISTS'
)
),
);
$new_query = new WP_Query( $args );
I'm currently working on a query where I show only posts without empty featured image using this:
$args = array(
'meta_query' => array(
array( 'key' => '_thumbnail_id')
)
);
Everything is working great. But I have some video format posts without featured images that I would like to return with that query.
Is that even possible with WP_Query?
Any help would be great!
Got it to work with 2 WP_Query and a array_merge, not sure if it's the best way to go but does the work.
If that can help:
get posts with thumb
$args = array(
'meta_query' => array(
array( 'key' => '_thumbnail_id'), //Show only posts with featured images
)
);
$posts_with_thumb = new WP_Query($args);
get video posts format
$args = array(
'tax_query' => array(
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => array( 'post-format-video' ),
),
)
);
$posts_video_format = new WP_Query($args);
init new wp_query object and merge both results
$featured_query = new WP_Query();
$featured_query->posts = array_merge( $posts_with_thumb->posts, $posts_video_format->posts );
I'm trying to sort a page of posts by a custom field.
Here's what I have so far, I'm just not sure how or where to add the orderby
$args = array(
'post_type' => 'new',
'meta_query' => array(
array(
'key' => 'over-make',
'value' => 'Doral',
'compare' => 'LIKE'
)
)
);
$loop = new WP_Query( $args);
You would use orderby on the same level as post_type and meta_query in your example.
$args = array(
'orderby' => 'meta_value',
'post_type' => 'new',
'meta_query' => array(
array(
'key' => 'over-make',
'value' => 'Doral',
'compare' => 'LIKE'
)
)
);
$loop = new WP_Query( $args);
(WordPress Codex: WP_Query)
It is probably most suitable to use the get_posts() function:
get_posts('orderby=meta_value_num&meta_key=keyname');
Sources: Get Posts and Interacting with WP Query and Order By Parameters
ps. love the idea of ordering by a meta value, hadn't thought of it before, but it could make several different sorting system easier to build, including a popularity mechanism..