I have the following code which gives be posts that are published in the last 100 days
function smbd_cats_by_days ($where = '') {
$where .= " AND post_date < '" . date('y-m-d', strtotime("-100 days")) . "'";
return $where;
}
add_filter('posts_where', 'smbd_cats_by_days');
It is working fine. But now I want to make this function generic. (ie) I want the number of days to be stored in a variable instead of hard coding it as 100.
How to do that?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
I was afraid you wanted that one. You can’t really do that. Follow the link for some workarounds. You could also set a variable or a constant in functions.php, or create a theme option for this. Then use that in your function.
function smbd_cats_by_days ($where = '') {
// global $days_limit; // if a variable
// $days_limit = DAYS_LIMIT; // if a constant
// $days_limit = get_option('days_limit',100);
// you have to uncomment one of the above,
// depending on your choice of mechanisms
$where .= " AND post_date < '" . date('y-m-d', strtotime("-{$days_limit} days")) . "'";
return $where;
}
add_filter('posts_where', 'smbd_cats_by_days');
http://codex.wordpress.org/Function_Reference/get_option
Method 2
You could use an anonymous function, as per this blog post, which utilises the creation of an on-the-fly function for the posts_where filter:
$options = array(
'max_post_age' => '30 days'
);
$age_filter = function ($where = '') use ( $options ) {
$where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-' . $options[ 'max_post_age' ] ) ) . "'";
return $where;
};
add_filter('posts_where', $age_filter);
$query = new WP_Query($args);
remove_filter('posts_where', $age_filter);
The author does go the extra step of implementing this in a single expression, but utilising the anonymous function should work perfectly for most circumstances.
It’s also worth noting that WordPress 3.7 will have a new set of very handy date parameters added to WP_Query.
EDIT: As I discovered myself last night, the Lambda function (i.e. function ($where = '') use ( $options )) is only available in PHP 5.3+.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0