Intereting Posts
Loop Разделить две колонки Текущее сообщение Родительская категория и ссылки на детские категории Пользовательские типы сообщений – используйте post_id в структуре permalink при использовании has_archive => true Добавление несвязанного пространства в пользовательскую функцию Как использовать SMTP-настройки «phpmailer_init» только для определенных действий «wp_mail»? Заголовок и название в теге img alt одинаковы? Редактировать сообщение meta с флажками на лицевой стороне Как заблокировать определенные сообщения (cpt) от редактирования кем угодно, кроме ADMINS Woocommerce 3.1 Добавить изображение товара для подтверждения заказа электронной почты не работает Как предотвратить выбор родителя в wp_dropdown_categories Импорт атрибутов в Woocommerce qtranslate arabic shortcode? Экран редактирования настраиваемого типа сообщений показывает все типы сообщений, независимо от типа сообщения по URL-адресу Я хочу добавить пользовательскую ссылку в корзину Показать название вкладки в качестве 'blog tagline | Название блога'

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

До сих пор мой клиент использовал сообщения 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");

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

Вам не нужно экспортировать и затем повторно импортировать, вы можете сделать все это через 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 для добавления категорий.