web-dev-qa-db-fra.com

Exportation de données à partir de WordPress dans une table plate

Je dois pouvoir exporter les données dans WordPress pour que chaque object soit contenu dans une seule ligne, comme un tableau plat.

Imaginez chaque type de publication comme sa propre table de base de données, contenant des colonnes représentant toutes les métadonnées.

À l'heure actuelle, j'ai le plus de difficulté à extraire toutes les métadonnées de la paire key / value.

J'ai essayé get_posts, puis une boucle sur chaque publication et l'extraction des métadonnées avec get_post_meta ... mais cela ne produit qu'un tas de données de tableau compliquées.

Quelle serait la façon recommandée de faire cela?

2
dcolumbus

Le problème est que les méta-valeurs ne sont pas uniques des données clé/valeur.

Par exemple. avec la clé 'OneKey', vous pouvez avoir beaucoup de valeurs pour le même message.

Ainsi, dans une table plate, pour la colonne 'OneKey', vous devez avoir plusieurs lignes dont l'identifiant est le même et qui me semble ne pas être ce que vous voulez.

Bien sûr, vous ne pouvez prendre qu'une valeur en considérant toutes les clés méta comme singulier , mais une seule méta-valeur peut contenir un tableau de données ... dans lequel Au cas où vous devriez enregistrer ce tableau en tant que sérialisé.

Enfin, notez que WP possède des méta-champs masqués utilisés pour la portée interne, par exemple. '_edit_lock' ou '_edit_last' et d'autres ..., vous voudrez probablement les ignorer.

$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 sera un tableau unidimensionnel d'objets (instances de la classe WP_POST).

3
gmazzap