Автор admin | Рубрики wordpress | 20-03-2010
Сегодня возникла необходимость экспортировать контент из одного блога, который работает на WordPress. Но проблема в том, что мне нужен был контент из определённой категории. Если вы хоть раз делали бекап блога, то наверное заметили, что экспорт делается только по авторам/пользователям, а возможности выбора категории нету. Нижеописанный способ найден не мною, но я его подогнал под версию 2.9.2, т.к. код частично изменился в сравнении с тем, который был год назад. Он помогает заменить выбор автора на выбор категории. Заменяет, а не добавляет!
До изменений видим следующее:
Открываем wp-admin/export.php, находим код:
if ( isset( $_GET['download'] ) ) {
$author = isset($_GET['author']) ? $_GET['author'] : 'all';
export_wp( $author );
die();
}
и заменяем его на следующий:
if ( isset( $_GET['download'] ) ) {
$category = isset($_GET['category']) ? $_GET['category'] : 'all';
export_wp( $category );
die();
}
Теперь ищем:
<table>
<tr>
<th><label for="author"><?php _e('Restrict Author'); ?></label></th>
<td>
<select name="author" id="author">
<option value="all" selected="selected"><?php _e('All Authors'); ?></option>
<?php
$authors = $wpdb->get_col( "SELECT post_author FROM $wpdb->posts GROUP BY post_author" );
foreach ( $authors as $id ) {
$o = get_userdata( $id );
echo "<option value='" . esc_attr($o->ID) . "'>$o->display_name</option>";
}
?>
</select>
</td>
</tr>
</table>
и заменяем на:
<table>
<tr>
<th><label for="category"><?php _e('Выберите категорию'); ?></label></th>
<td>
<select name="category" id="category">
<option value="all" selected="selected"><?php _e('All Categories'); ?></option>
<?php
$categories = (array) get_categories('get=all');
foreach ( $categories as $c ) {
$o = get_userdata( $id );
echo "<option value='" . esc_attr($c->term_taxonomy_id) . "'>$c->cat_name</option>";
}
?>
</select>
</td>
</tr>
</table>
В результате получается следующее:
Но это пока не всё, нужно ещё изменить wp-admin/includes/export.php, иначе ничего нужного вы не экспортируете.
Переходим к wp-admin/includes/export.php, ищем код:
function export_wp($author='') {
Заменяем на:
function export_wp($cat='') {
Ищем:
$where = '';
if ( $author and $author != 'all' ) {
$author_id = (int) $author;
$where = $wpdb->prepare(" WHERE post_author = %d ", $author_id);
}
Меняем на:
$where = '';
if ( $cat and $cat != 'all' ) {
$cat_id = (int) $cat;
$ids = $wpdb->get_col("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id=$cat");
$where = $wpdb->prepare(" WHERE ID IN(".join(',',$ids).")");
}
Вот теперь можно экспортировать контент из определённых категорий, правда при импорте в TextKit видны пустые папки категорий, которые я не экспортировал, но они были на том блоге. Но всё же это не разовая потребность, в моём случае, и теперь нет необходимости качать xml-файлы весом в многие десятки Мегабайт при необходимых максимум двух/трёх, а иногда меньше 500 килобайт, если в нужной категории немногим больше сотни статей.


