Дата мудрый (ежедневно) wordpress Post XML backup

Как создать резервную копию Export Daily XML,

Я пробовал инструменты -> export -> Post

Но проблема в том, что это только ежемесячная резервная копия, а не мудрая дата. Предположим, я хочу сделать резервную копию только 5 июля 2015 года.

Как это возможно?

Расширение собственного экспорта XML – с помощью одного выбора дня

Вот один из способов изменить собственный экспорт с помощью окна выбора со всеми доступными днями:

Однодневный экспорт

Здесь мы предполагаем, что для выбора не существует «огромного» количества дней 😉 В противном случае мы могли бы использовать другой вид пользовательского интерфейса.

Шаг 1

Сначала мы можем добавить HTML для нашего фильтра на один день , используя export_filters hook:

 /** * Add our extra HTML */ add_action( 'export_filters', function() { ?> <p><ul id="wpse-post-filters" class="wpse-export-filters"> <li> <label><?php _e( 'Single day:' ); ?></label> <select name="wpse_single_day"> <option value="0"><?php _e( 'Select a day' ); ?></option> <?php wpse_export_single_day_options(); ?> </select> </li> </ul></p> <?php }); 

Шаг 2

Затем нам нужно построить wpse_export_single_day_options() . Мы можем просто использовать модифицированную версию основной функции export_date_options() :

 /** * Modification of the core export_date_options() function */ function wpse_export_single_day_options( $post_type = 'post' ) { global $wpdb, $wp_locale; $months = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month, Day( post_date ) as day FROM {$wpdb->posts} WHERE post_type = %s AND post_status != 'auto-draft' ORDER BY post_date DESC", $post_type ) ); $month_count = count( $months ); if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) return; foreach ( $months as $date ) { if ( 0 == $date->year ) continue; $month = zeroise( $date->month, 2 ); printf( '<option value="%d-%d-%d">%d. %s %d</option>', $date->year, $month, $date->day, $date->day, $wp_locale->get_month( $month ), $date->year ); } } - /** * Modification of the core export_date_options() function */ function wpse_export_single_day_options( $post_type = 'post' ) { global $wpdb, $wp_locale; $months = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month, Day( post_date ) as day FROM {$wpdb->posts} WHERE post_type = %s AND post_status != 'auto-draft' ORDER BY post_date DESC", $post_type ) ); $month_count = count( $months ); if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) return; foreach ( $months as $date ) { if ( 0 == $date->year ) continue; $month = zeroise( $date->month, 2 ); printf( '<option value="%d-%d-%d">%d. %s %d</option>', $date->year, $month, $date->day, $date->day, $wp_locale->get_month( $month ), $date->year ); } } - /** * Modification of the core export_date_options() function */ function wpse_export_single_day_options( $post_type = 'post' ) { global $wpdb, $wp_locale; $months = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month, Day( post_date ) as day FROM {$wpdb->posts} WHERE post_type = %s AND post_status != 'auto-draft' ORDER BY post_date DESC", $post_type ) ); $month_count = count( $months ); if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) return; foreach ( $months as $date ) { if ( 0 == $date->year ) continue; $month = zeroise( $date->month, 2 ); printf( '<option value="%d-%d-%d">%d. %s %d</option>', $date->year, $month, $date->day, $date->day, $wp_locale->get_month( $month ), $date->year ); } } - /** * Modification of the core export_date_options() function */ function wpse_export_single_day_options( $post_type = 'post' ) { global $wpdb, $wp_locale; $months = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month, Day( post_date ) as day FROM {$wpdb->posts} WHERE post_type = %s AND post_status != 'auto-draft' ORDER BY post_date DESC", $post_type ) ); $month_count = count( $months ); if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) return; foreach ( $months as $date ) { if ( 0 == $date->year ) continue; $month = zeroise( $date->month, 2 ); printf( '<option value="%d-%d-%d">%d. %s %d</option>', $date->year, $month, $date->day, $date->day, $wp_locale->get_month( $month ), $date->year ); } } - /** * Modification of the core export_date_options() function */ function wpse_export_single_day_options( $post_type = 'post' ) { global $wpdb, $wp_locale; $months = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month, Day( post_date ) as day FROM {$wpdb->posts} WHERE post_type = %s AND post_status != 'auto-draft' ORDER BY post_date DESC", $post_type ) ); $month_count = count( $months ); if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) return; foreach ( $months as $date ) { if ( 0 == $date->year ) continue; $month = zeroise( $date->month, 2 ); printf( '<option value="%d-%d-%d">%d. %s %d</option>', $date->year, $month, $date->day, $date->day, $wp_locale->get_month( $month ), $date->year ); } } 

Шаг 3

Чтобы разместить наш HTML-код в разделе фильтра сообщений , мы должны использовать jQuery, чтобы переместить его в нужное место:

 /** * Append our HTML to the post filter section */ add_action( 'admin_head', function() {?> <script type="text/javascript"> jQuery(document).ready(function($){ $('#wpse-post-filters').appendTo( $('#post-filters') ); }); </script> <?php }); 

Шаг №4

Затем мы должны позаботиться о запросе базы данных. Для этого нет явного фильтра, но мы можем использовать фильтр export_args с небольшим трюком:

 /** * Modify the database queries, indirectly */ add_filter( 'export_args', function( $args ) { // User input $date = filter_input( INPUT_GET, 'wpse_single_day' ); // Let's use DateTime to validate the Ymd input, // See here http://stackoverflow.com/a/13194441/2078474 $dt = DateTime::createFromFormat( 'Ym-d', $date ); // Check if the user input is a valid date: if( method_exists( $dt, 'format' ) && $Ymd = $dt->format( 'Ymd' ) ) { // The from date for the db query: $args['start_date'] = $Ymd; // I think we can modify the end date, in the db query, with this little trick $args['end_date'] = date( 'Ym-d', strtotime( '-1 month', strtotime( '+1 day', strtotime( $Ymd ) ) ) ); } return $args; }); 

Демо-плагин

Я добавил весь плагин здесь, на GitHub .