Экспорт данных из WordPress в плоскую таблицу


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

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

Прямо сейчас мне труднее всего извлечь все метаданные пары key / value.

Я пробовал get_posts, а затем просматривал каждый пост и извлекал метаданные с помощью get_post_meta... но это просто приводит к куча запутанных массивов данных.

Каков был бы рекомендуемый способ сделать это?

Author: dcolumbus, 2013-09-19

1 answers

Проблема в том, что мета-значения не являются уникальными данными ключа/значения.

Например, с ключом "OneKey" у вас может быть много значений для одного и того же сообщения.

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

Конечно, вы можете принять одно значение, рассматривающее весь мета-ключ как единственное, но также одно мета-значение может содержать массив данных... в этом случае вы следует сохранить этот массив как сериализованный.

Наконец, обратите внимание, что в WP есть некоторые скрытые мета-поля, которые используются для внутренней области, например, "_edit_lock" или "_edit_last" и другие..., вероятно, вы захотите пропустить их.

$posts = get_posts('nopaging=1');
$flatten = array();
$blacklist = array('_edit_lock', '_edit_last', '_wp_old_slug');
if ( ! empty($posts) ) { foreach ( $posts as $post ) {
  $metas = get_post_custom( $post->ID );
  $keys = array_keys($metas);
  if ( ! empty($keys) ) { foreach ( $keys as $_key ) {
     if ( in_array($_key, $blacklist) ) continue;
     // the first value for every meta key
    $post->$_key = maybe_serialize($metas[$_key][0]);
  } } 
  $flatten[$post->ID] = $post;
} }

// for debug
echo '<pre>';
print_r( $flatten );
echo( '</pre>');

$flatten будет представлять собой одномерный массив объектов (WP_POST экземпляров класса).

 3
Author: gmazzap, 2013-09-19 20:48:03