Wordpress:预定类别更改(工作流程)。怎么做?

时间:2011-11-07 19:39:03

标签: php cron wordpress schedule

我认为这是一个常见的案例:我有三个类别:过去,现在,即将到来。

现在我写一篇关于下个月活动的帖子。我把这篇文章放在了即将开始的类别中。

我想要的是预定的类别更改。

即:

此活动将于12月1日至12月10日举行。从即日起至11月30日,此帖子属于即将到来的类别(我在创建此帖子时选择此类别)。

12月1日,这篇文章将自动成为当前类别,直到12月10日。

12月11日,这篇文章将自动处于“过去”类别。

我进行了搜索,但没有找到这样的插件。

基本上,我希望发布页面有两个额外的选项:

选项1:更改为类别 _ on _

选项2:更改为类别 _ on _

这听起来像是一个工作流程问题。我搜索了与工作流程相关的插件,但仍然没有运气。

有关如何实施此建议的任何建议?我可以写一个插件,但我是WP的新手。有人可以建议我使用哪些API /函数吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先关闭:可能有一个插件可以处理你想要实现的目标。如果您需要一个简单的事件日历,我几乎可以肯定这可以通过现有的插件来完成。在我的头顶,MyCalendar将是一个这样的插件。在您自己编写代码之前,您可能需要搜索wordpress plugin directory以获取更多选项。

话虽如此,如果你不能避免自己构建这个,因为你的情况是专业的,这应该让你开始:

使用custom fields添加开始日期和结束日期的额外元数据,或者将事件设为自己的custom post type。解释自定义帖子类型的使用细节超出了简洁的答案范围。

如果您选择更简单的方法来添加两个名为 start end (等)的自定义字段,则必须运行php脚本作为cronjob通过您的服务器或让我们WP-Cron Functions将当前时间与开始和结束日期进行比较,并相应地更改类别。

为了向您提供一些有用的代码(可以进入您自己编写的插件),以下php代码段应该指向正确的方向:

register_activation_hook(__FILE__, 'your_activation');
add_action('your_daily_event', 'change_categories');

function your_activation() {
    $first_time = time(); // you probably want this to be shortly after midnight
    $recurrence = 'daily';
    wp_schedule_event($first_time, $recurrence, 'your_daily_event');
}

function change_categories() {
    $old_name = 'Upcoming'; // category to delete
    $taxonomy = 'category';
    // fetch category ID (amongst other data) of 'Upcoming':
    $term = get_term_by('name',$old_name, $taxonomy);
    // fetch all posts in 'Upcoming' category:
    $objects = get_objects_in_term($term->term_id,$taxonomy);
    // the $objects array now contains the post IDs of all upcoming events

    // now, let's loop through them to manipulate:
    foreach($objects as $object) {
         // get start date:
         $key = 'start'; // the name of the custom field
         $start = get_post_meta($object, $key, true); // start date
         $todays_date = date('Y-m-d'); // get current date
         // Assuming, your dates in the custom fields are formatted YYYY-MM-DD:
         if ($start < $todays_date) {
             // change category:
             $new_name = 'Current';
             wp_set_post_terms( $object, $new_name, $taxonomy, false );
         }
    }

?>

很少注意到:

  • 显然,上述内容必须根据“当前”更改为“过去”。
  • 它也很容易适应包括时间。
  • cronjobs应在午夜后不久启动
  • $first_time必须是UNIX timestamp
  • 检查wordpress function reference以获取有关上面使用的wp功能的更多信息