我认为这是一个常见的案例:我有三个类别:过去,现在,即将到来。
现在我写一篇关于下个月活动的帖子。我把这篇文章放在了即将开始的类别中。
我想要的是预定的类别更改。
即:
此活动将于12月1日至12月10日举行。从即日起至11月30日,此帖子属于即将到来的类别(我在创建此帖子时选择此类别)。
12月1日,这篇文章将自动成为当前类别,直到12月10日。
12月11日,这篇文章将自动处于“过去”类别。
我进行了搜索,但没有找到这样的插件。
基本上,我希望发布页面有两个额外的选项:
选项1:更改为类别 _ on _
选项2:更改为类别 _ on _
这听起来像是一个工作流程问题。我搜索了与工作流程相关的插件,但仍然没有运气。
有关如何实施此建议的任何建议?我可以写一个插件,但我是WP的新手。有人可以建议我使用哪些API /函数吗?
谢谢!
答案 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 );
}
}
?>
很少注意到:
$first_time
必须是UNIX timestamp