WordPress и экспорт определённой категории.

3

Автор admin | Рубрики wordpress | 20-03-2010

Сегодня возникла необходимость экспортировать контент из одного блога, который работает на WordPress. Но проблема в том, что мне нужен был контент из определённой категории. Если вы хоть раз делали бекап блога, то наверное заметили, что экспорт делается только по авторам/пользователям, а возможности выбора категории нету. Нижеописанный способ найден не мною, но я его подогнал под версию 2.9.2, т.к. код частично изменился в сравнении с тем, который был год назад. Он помогает заменить выбор автора на выбор категории. Заменяет, а не добавляет!

До изменений видим следующее:

Вид до внесения изменений в экспорт xml

Открываем 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>

В результате получается следующее:

Вот так выглядит экспорт в xml после внесения изменений

Но это пока не всё, нужно ещё изменить 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 килобайт, если в нужной категории немногим больше сотни статей.

Комментарии (3)

очень полезная статейка.
Я сейчас ищу способ экспортировать только комментарии.
На основном блоге я их все случайно удалила, может есть какой-то способ сделать слияние баз по принципу, чтобы остались только последние изменения?

отличная краденая статья. молодцом, последний абзац написал. нужно хотя бы автора показывать

На счёт «краденая статья» мягко говоря неприятно было такое прочитать. Получается что у каждого блога на WordPress свой неповторимый код?! Вот специально по отрывку кода нашёл статью, которая, вполне возможно, мне тогда и помогла решить проблему http://pokrovskii.com/wordpress-kak-sdelat-eksport-odnoj-kategorii/ Скриншоты одинаковы? Нет, т.к. я их сделал сам для этой статьи. Коды абсолютно идентичны? Тоже нет, т.к. код немного изменился с момента написания той статьи, о чем я и написал в самом начале своего поста. И текст статьи полностью мною написан, а не только последний абзац, как вы написали!

Написать комментарий

Перед отправкой формы:
Human test by Not Captcha