2016-01-22 2 views
0

Я пытаюсь, чтобы должности автоматически истекали в зависимости от роли автора сообщения. Несмотря на то, что там есть много плагинов для истечения срока действия Wordpress, большинство из них являются гранулярными в том смысле, что они позволяют вам устанавливать истечение на почте по почте. Мне удалось найти один плагин (старше 2 лет), который предположительно работал с ролью пользователя и пользовательским типом сообщения, но он больше не работал правильно. В идеале, что мне нужно выполнить это:WordPress Expire Должности, основанные на роли пользователя

  • У меня есть CPT называют животных (это потерянная/найдено доска для локального управления животных)
  • Пользователи могут отправлять сообщения (через внешний интерфейс), и у них собственные роли, назначенные (абоненты)
  • животных сотрудники службы также могут размещать (с зарегистрированными в счетах) , которые все имеют роли редактора, возложенные на них

офицеров только размещение «найдено» домашние животные, и эти должности должны истечь через 5 дней (потому что они затем отправляйтесь на усыновление). Сообщения всех остальных пользователей истекают через 30 дней.

Мысли? Я застрял.

+0

, что должно произойти с истекшим сроком сообщений? Удалить? –

+0

Опубликовать статус должен измениться на черновик (клиент хочет, чтобы все они были сохранены в архивных целях) – user3412330

ответ

0

1) Создание Rol https://gist.github.com/loorlab/0a0ef9a9768cef098761

2) Вставьте в functions.php

 function auto_expire_posts(){ 
     global $wpdb, $wp_roles; 
      //get all post ids of published posts. 
     $post_ids = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_status ='publish' "); 

foreach($post_ids as $id){ 
    $postid = $id->ID; 

    //get the post publish date 
    $origpostdate = get_the_date($d, $the_post->post_parent); 

    if ($_GET['role'] == "officers") //I don't if I do it right here.. 
     { 

    $expiration_value = strtotime ('+1 day' , strtotime ($origpostdate));// adding 30 days from the publish date for role = author 

     if($expiration_value){ 

     $todays_date = date("Y-m-d"); 

     $today = strtotime($todays_date); 

     $expiration_date = $expiration_value; 

     if ($expiration_date > $today) { 

       //do not do anything 

       } else { 

     // it is expired, we set post status to trash, without changing anything 

      $my_post = array(); 

      $my_post['ID'] = $postid; 

      $my_post['post_status'] = 'trash'; 

      // Update the post into the database 

      wp_update_post($my_post); 

      } 

     }//end if(expiration_value); 

    } 
    elseif ($_GET['role'] == "officers"){ 

     $expiration_value = strtotime ('+1 day' , strtotime ($origpostdate)); //adding 30 days from the publish date for role = contributor 

     if($expiration_value){ 

     $todays_date = date("Y-m-d"); 

     $today = strtotime($todays_date); 

     $expiration_date = $expiration_value; 

     if ($expiration_date > $today) { 

       //do not do anything 

       } else { 

       // it is expired, we set post status to draft, without changing anything 

      $my_post = array(); 

      $my_post['ID'] = $postid; 

      $my_post['post_status'] = 'trash'; 

      // Update the post into the database 

      wp_update_post($my_post); 

      } 

     }//end if(expiration_value); 

    } 
    else {}//do nothing here 

} 
} 

//verify event has not been scheduled 

if (!wp_next_scheduled('auto_expire_posts_cron_hook')) { 

    //schedule the event to run daily 

    wp_schedule_event(time(), 'hourly', 'auto_expire_posts_cron_hook'); 
} 

add_action('auto_expire_posts_cron_hook','auto_expire_posts'); 
+0

Это выглядит великолепно. Я считаю, что мой cron, возможно, не работает, поскольку я назначил несколько сообщений автору с ролью офицера, и они не перешли к черновику (изменилось состояние мусора на черновик в функции) – user3412330