web-dev-qa-db-ja.com

WordPressからフラットテーブルへのデータのエクスポート

objectがフラットテーブルのように単一行に含まれるように、WordPress内でデータをエクスポートできる必要があります。

各投稿タイプを、すべてのメタデータを表す列を含む独自のデータベーステーブルとして想像してください。

今のところ、私はkey / valueペアのメタデータすべてを抽出しようとしているのが最も困難です。

私はget_postsを試してから各投稿をループしてget_post_metaでメタデータを抽出しています...しかしこれは複雑な配列データの束を生成するだけです。

これを行うための推奨される方法は何でしょうか。

2
dcolumbus

問題は、メタ値がユニークなキー/値データではないことです。

例えば。キー 'OneKey'を使えば、同じ投稿に対してたくさんの値を持つことができます

そのため、フラットテーブルでは、 'OneKey'列には投稿IDが同じで複数の行があるはずです。

確かに、すべてのメタキーを単数形として扱う1つの値を取ることができますが、単一のメタ値にデータの配列を含めることもできますその場合は、その配列を直列化されたものとして保存してください。

最後に、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は、オブジェクトの1次元配列になります(WP_POSTクラスのインスタンス)。

3
gmazzap