Guest

jgbustos

By: a guest on Jun 7th, 2009  |  syntax: PHP  |  size: 1.96 KB  |  hits: 668  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. <?php
  2. /*
  3. Plugin Name: Post Repeater
  4. Plugin URI: http://blog.vishalon.net/Post/90.aspx
  5. Description: This plugin repeats a particular post every year/month/week. Set the custom field Key=REPEATON, Value=MM/DD for the yearly repeat, Value=01/02...12 for monthly repeat, Value=Sun/Mon/Tue/Wed/Thu/Fri/Sat for weekly repeat.
  6. Author: Vishal Monpara
  7. Version: 1.1
  8. Author URI: http://www.vishalon.net/
  9. */
  10. add_filter('query','PostRepeater');
  11. function PostRepeater($query)
  12. {
  13.         global $wpdb;
  14.  
  15.         if (strpos($query,'SELECT SQL_CALC') && ! strpos($query, ' LIKE ')) {
  16. //      if (preg_match('/SELECT SQL_CALC/', $query) && ! preg_match('/ LIKE /', $query)) {
  17.                 $uri = $_SERVER['REQUEST_URI'];
  18.                 if ((strlen($uri)==1) || (strlen($uri)<=11 && strpos($uri,'index.php')))
  19.                 {
  20.                         $time = time()+(get_settings('gmt_offset') * 3600);
  21.                         $split = explode('ORDER BY', $query);
  22.                         $current_plugins = get_option('active_plugins');
  23.                         if (!in_array('wp-sticky/wp-sticky.php', $current_plugins)) {
  24.                                 $orderby = 'ORDER BY N,'. $split[1];
  25.                                 $query = str_replace(' FROM ',', 2 AS N FROM ',$split[0]);
  26.                                 $extra_column = "1 AS N";
  27.                         } else {
  28.                                 $orderby = 'ORDER BY '. $split[1];
  29.                                 $orderby = str_ireplace("{$wpdb->prefix}sticky.", '', $orderby);
  30.                                 $query = $split[0];
  31.                                 $extra_column = "2 as sticky_status";
  32.                         }
  33.                         $orderby = str_ireplace("{$wpdb->posts}.", '', $orderby);
  34.                         $query = "(" .$query. ") UNION ALL ";
  35.                         $query = $query.
  36.                         "( SELECT $wpdb->posts.*, $extra_column FROM $wpdb->posts
  37.                                 INNER JOIN $wpdb->postmeta
  38.                                 ON $wpdb->posts.ID = $wpdb->postmeta.post_id
  39.                                 WHERE $wpdb->posts.post_status = 'publish'
  40.                                 AND $wpdb->posts.post_type = 'post'
  41.                                 AND $wpdb->postmeta.meta_key = 'REPEATON' AND
  42.                                 ($wpdb->postmeta.meta_value = '". gmdate('m/d',$time) . "'
  43.                                 OR $wpdb->postmeta.meta_value = '". gmdate('d',$time) . "'
  44.                                 OR $wpdb->postmeta.meta_value = '". gmdate('D',$time) . "')
  45.                                 ORDER BY post_date_gmt DESC) ".
  46.                         $orderby;
  47.                 }
  48.         }
  49.         return $query;
  50. }
  51. ?>