Экспорт всех сообщений для импорта в качестве товаров

До сих пор мой клиент использовал сообщения WordPress как способ показать свои продукты. Теперь мне нужно экспортировать все эти сообщения в формат CSV, чтобы я мог форматировать файл CSV и импортировать его обратно в WP e-Commerce.

Я просмотрел количество опций, включая плагины, для экспорта сообщений, экспорт непосредственно из phpMyAdmin и использование опции экспорта XML в WP, но ни один из них не выглядит настолько чистым, насколько мне бы хотелось.

Я думаю, что мне в основном нужен SQL-запрос, который я могу запустить для экспорта только информации из таблицы POSTS, за исключением любого другого мусора, такого как идентификационные номера, статус ping, guid и т. Д.

Все что мне нужно это:

  • Заголовок поста
  • Сообщение
  • Настраиваемые поля
  • категории

Вот начало моего запроса

SELECT * FROM `wp_posts` WHERE `post_status` = 'publish' 

EDIT: Я открыт для лучших решений, если кто-то считает, что есть лучший способ сделать это?

РЕДАКТИРОВАТЬ

Вот решение, которое я нашел на SO, но я не уверен, где его использовать?

 <?php function array2xml($array, $name='array', $standalone=TRUE, $beginning=TRUE) { global $nested; if ($beginning) { if ($standalone) header("content-type:text/xml;charset=utf-8"); $output .= '<'.'?'.'xml version="1.0" encoding="UTF-8"'.'?'.'>' . PHP_EOL; $output .= '<' . $name . '>' . PHP_EOL; $nested = 0; } // This is required because XML standards do not allow a tag to start with a number or symbol, you can change this value to whatever you like: $ArrayNumberPrefix = 'ARRAY_NUMBER_'; foreach ($array as $root=>$child) { if (is_array($child)) { $output .= str_repeat(" ", (2 * $nested)) . ' <' . (is_string($root) ? $root : $ArrayNumberPrefix . $root) . '>' . PHP_EOL; $nested++; $output .= array2xml($child,NULL,NULL,FALSE); $nested--; $output .= str_repeat(" ", (2 * $nested)) . ' </' . (is_string($root) ? $root : $ArrayNumberPrefix . $root) . '>' . PHP_EOL; } else { $output .= str_repeat(" ", (2 * $nested)) . ' <' . (is_string($root) ? $root : $ArrayNumberPrefix . $root) . '><![CDATA[' . $child . ']]></' . (is_string($root) ? $root : $ArrayNumberPrefix . $root) . '>' . PHP_EOL; } } if ($beginning) $output .= '</' . $name . '>'; return $output; } //connect to database and select database (edit yourself) mysql_connect("localhost", "username", "password"); mysql_select_db("databasename"); //Get all posts whose status us published. $result = mysql_query("SELECT * FROM wp_posts WHERE post_status = 'publish'"); while($row = mysql_fetch_assoc($result)) $posts[] = $row; //convert to array and print it on screen: echo "<pre>"; echo htmlentities(array2xml($posts, 'posts', false)); echo "</pre>"; ?> 

РЕДАКТИРОВАТЬ:

Правильно, поэтому я создал php-файл с именем pull-posts.php и удалил вышеуказанный код в файл, а затем сохранил файл в корне моей установки localhost. Затем я изменил данные БД и запустил скрипт. Вот ошибка, которую я получаю:

Предупреждение: mysql_connect () [function.mysql-connect]: доступ запрещен для пользователя 'username' @ 'localhost' (с использованием пароля: YES) в C: \ inetpub \ wwwroot \ Xampp-1.7.7 \ htdocs \ project \ pull- posts.php в строке 40

Строка 40 имеет это на нем:

mysql_connect ("localhost", "root", ""); mysql_select_db ( "DBName");

Есть предположения? Благодарю.

Solutions Collecting From Web of "Экспорт всех сообщений для импорта в качестве товаров"

Вам не нужно экспортировать и затем повторно импортировать, вы можете сделать все это через API за один раз, не требуется XML. вот пример плагина:

 <?php /* Plugin Name: WPA_convert_types */ function wpa_convert_types_page() { add_management_page( 'WPA convert types', 'WPA convert types', 'manage_options', 'wpa_convert_types', 'wpa_convert_types_render_page' ); } add_action('admin_menu', 'wpa_convert_types_page'); function wpa_convert_types_render_page() { if( isset( $_POST['wpa_do_convert'] ) ): $args = array( 'posts_per_page' => -1 ); $posts_query = new WP_Query( $args ); if( $posts_query->have_posts() ): global $post; while( $posts_query->have_posts() ): $posts_query->the_post(); $new_product = array( 'post_type' => 'product', 'post_status' => 'publish', 'post_title' => $post->post_title, 'post_content' => $post->post_content, ); $product_id = wp_insert_post( $new_product ); // use get_post_meta, wp_get_object_terms // to get meta and categories, // use $product_id to associate with new product // via wp_set_object_terms, add_post_meta endwhile; echo 'done'; endif; else: ?> <form method="post"> <input type="submit" name="wpa_do_convert" value="go"> </form> <?php endif; } 

Вам нужно будет добавить обработку мета и категорий, см. Комментарии ниже строки wp_insert_post , но это должно вас начать.

EDIT. Я забываю, что wp_insert_post позволяет вам устанавливать термины таксономии внутри функции, см. Запись codex для добавления категорий.