/ Сайтостроение / Wordpress / Записи и время

Записи и время

15.09.2017

446


Deprecated: Function create_function() is deprecated in /home/htvtwmhs/public_html/wp-content/plugins/wp-spamshield/wp-spamshield.php on line 2033

Любая запись в WP имеет дату начала публикации, причем если поставить будущее время — то запись будет запланирована. Также у записи есть дата изменения (modified). В данной статье будет накапливаться материал связанный с манипуляциями записей с помощью времени.

Записи будущего

Записям с датой публикации в будущем временем wordpress присваивает статус future. Данные записи можно вывести в цикле по параметру ‘post_status’ => ‘future’. Но записи со статусом future не доступны во фронтенде посетителям, их могут видеть лишь зарегистрированные пользователи.

Чтобы записи будущего публиковались и были доступны всем, необходимо применить функцию

function publikacia_zapisi_v_buduchem($aidishka, $zapis) {
    global $wpdb;
    if ( $zapis->post_status == 'future' ) :
        $wpdb->update($wpdb->posts, array( 'post_status' => 'publish' ), array( 'ID' => $aidishka ));
        wp_clear_scheduled_hook('publish_future_post', $aidishka);
    endif;
}
 
add_action('save_post', 'publikacia_zapisi_v_buduchem', 10, 2);

Но чтобы она применилась к уже существующим записям их нужно обновлять.

Но как теперь вывести отдельно записи будущего? Ведь вышеописанная функция меняет им статус на published. Выводить подобные записи нужно запросом:

<ul>
<?php $args = array(
	'posts_per_page' => 3,
	'date_query' => array(
		array(
			'after'     => 'now',
			'before'    => array(
				'year'  => 2020,
				'month' => 12,
				'day'   => 31,
			),
			'inclusive' => true,
		),
	),
);
$lastposts = get_posts( $args );
foreach( $lastposts as $post ){ setup_postdata($post);
	?>
	<li class="<?php echo get_post_class(); ?>"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
	<?php
}
wp_reset_postdata(); ?>
</ul>

Дата отмены публикации

Для того чтобы дате можно было задать дату и время окончания публикации необходимо воспользоваться плагином Post Expirator (70 000 загрузок). После установки, у всех записей (в т.ч. у записей пользовательских типов) добавится блок настроек окончания публикации (дата и время).

В настройках можно задать какой статус присваивать записям после окончания публикации (по-умолчанию они переводятся в черновики).

Массовое изменение даты публикации

При массовом редактировании записей отсутствует параметр изменения даты публикации. Изменим это, добавив данный параметр в панель массового редактирования.

Необходимо создать скрипт admin-script.js

jQuery(document).ready(function($){
    $('.inline-edit-col-right .inline-edit-col')
        .append(
            '<label style="margin-top: 3em;"><span class="title">Date</span>'
            + '<div class="timestamp-wrap"><select name="mm">'
            + '<option value="00">Month</option>'
            + '<option value="01">01-January</option>'
            + '<option value="02">02-February</option>'
            + '<option value="03">03-March</option>'
            + '<option value="04">04-April</option>'
            + '<option value="05">05-May</option>'
            + '<option value="06">06-June</option>'
            + '<option value="07">07-July</option>'
            + '<option value="08">08-August</option>'
            + '<option value="09">09-September</option>'
            + '<option value="10">10-October</option>'
            + '<option value="11">11-November</option>'
            + '<option value="12">12-December</option>'
            + '</select>'
            + '<input type="text" autocomplete="off" name="jj" maxlength="2" size="2" value="d" placeholder="d">'
            + ', <input type="text" autocomplete="off" name="aa" maxlength="4" size="4" value="Y" placeholder="Y">'
            + '@ <input type="text" autocomplete="off" name="hh" maxlength="2" size="2" value="H" placeholder="H">'
            + ' : <input type="text" autocomplete="off" name="mn" maxlength="2" size="2" value="i" placeholder="i"></div></label>'
    );
});

Далее подключаем созданный скрипт и создаем функцию

function my_enqueue() {
wp_enqueue_script('my_admin_script', get_bloginfo('template_url') . '/js/admin-script.js', array('jquery'), false, true);
}
add_action('admin_init', 'my_enqueue');

function my_bulk_edit($action, $result){
    if ('bulk-posts' == $action && $_GET['mm']!='00' && isset($_GET['jj']) && isset($_GET['aa']) && isset($_GET['hh']) && isset($_GET['mn']) ) {
        $date = $_GET['aa'].'-'.$_GET['mm'].'-'.$_GET['jj'].' '.$_GET['hh'].':'.$_GET['mn'].':00';
        $post_date = date("Y-m-d H:i:s", strtotime($date));
        $post_date_gmt = gmdate("Y-m-d H:i:s",strtotime($date));
        $post_status = (strtotime($post_date) > strtotime(date("Y-m-d H:i:s")))? 'future' : 'publish';

        $post_IDs = array_map('intval', (array) $_GET['post']);
        foreach ($post_IDs as $post_ID) {
            $post_data = array( 'ID' => $post_ID, 'post_date' => $post_date, 'post_date_gmt' => $post_date_gmt, 'post_status' => $post_status, 'edit_date' => true );
            //wp_insert_post( $post_data );
            wp_update_post( $post_data );
        }

    }
}
add_action('check_admin_referer', 'my_bulk_edit', 10, 2);

add_action(‘admin_init’, ‘my_enqueue’); — подключение скриптов для админки

При массовой корректировке необходимо прописывать полностью дату и время. Иначе дата будет устанавливаться некорректно — 01.01.1970

Есть один существенный недостаток данного решения — меняется статус записи. Запись, если она была черновиком или на утверждении публикуется.

Поделится информацией с друзьями

  • Комментарии
  • Вложения

Добавить комментарий

Пока нет комментариев. Будь первым!

Записи и время
Доменные имена
Рекомендации для васДоменные именаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.