Прежде всего: там может быть плагин, который может обрабатывать то, что вы хотите достичь.Если вам нужен простой календарь событий, я почти уверен, что это можно сделать с помощью существующих плагинов.Наверху, MyCalendar будет одним из таких плагинов.Возможно, вы захотите поискать в каталоге плагинов wordpress дополнительные опции, прежде чем погрузиться в кодирование этого самостоятельно.
При этом, если вы не можете избежать создания этого самостоятельно, потому чтоесли вы специализирующийся, это должно помочь вам начать:
Либо используйте настраиваемые поля , чтобы добавить дополнительные метаданные даты начала и окончания, либо сделать события Пользовательские сообщения типа свои.Объяснение использования пользовательских типов записей в деталях выходит за рамки краткого SO-ответа.
Если вы выберете более простой способ добавления двух настраиваемых полей с именами start и end (или тому подобное), вам нужно будет либо запустить скрипт php как cronjob через ваш сервер, либо настроить нас на Функции WP-Cron , чтобы сравнить текущее время с датой начала и окончанияи соответственно измените категорию.
Чтобы предоставить вам некоторый полезный код (который будет использоваться в вашем плагине), следующий фрагмент 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 для получения дополнительной информацииn на функциях wp, используемых выше