web-dev-qa-db-fra.com

Exporter des entrées et plusieurs méta de champs personnalisés au format .csv?

Première affiche. J'essaie d'exporter un ensemble de publications personnalisées dans un fichier CSV afin de pouvoir les importer facilement dans une nouvelle base de données. J'ai exécuté l'exportation native vers XML, mais ce n'est pas le bon format dont j'ai besoin. J'ai besoin d'un format basé sur les colonnes (c'est-à-dire nom, taille, poids, etc.).

J'ai un article personnalisé qui a plusieurs champs personnalisés. J'ai des problèmes pour les combiner en une seule ligne, plutôt qu'une nouvelle ligne pour chaque type de méta. Existe-t-il un moyen d'écrire une requête SQL comportant de nombreuses sélections pour chaque méta-type et les combinant sur une seule ligne avec plusieurs colonnes?

Voici ce que j'ai jusqu'à présent, qui me donne une colonne et une nouvelle ligne pour chaque méta-type pour le même nom

SELECT p.post_title AS Name
FROM wp_posts AS p
INNER JOIN wp_postmeta AS pm 
ON p.ID = pm.post_id
WHERE p.post_type = 'prospects'
ORDER BY p.post_date DESC

Maintenant, comment pourrais-je commencer à ajouter des colonnes (selects) pour chaque type de méta et les combiner sur une ligne:

AND (
  SELECT m1.meta_value AS Height
  WHERE m1.meta_key = '_height'
)
AND (
  SELECT m2.meta_value AS Weight
  WHERE m2.meta_key = '_weight'
)
1
Siebird

Avec l’aide de @toscho indiquant get_post();, j’ai pu cracher un fichier .csv avec un modèle vierge. Au début, j'avais des problèmes de mémoire liés à la quantité de données, alors j'ai déplacé le site localement et j'ai pu obtenir tout ce dont j'avais besoin avec la get_post();

C’est l’essentiel:

<ol>
<?php
global $post;
$args = array( 
    'numberposts' => -1,
    'orderby' => 'post_title',
    'order' => 'DESC',
    'post_type' => 'prospects',
    'post_status' => 'publish'
);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>
    <li><?php echo $post->ID ?>, <?php the_title(); ?>, <?php echo get_field('prospect_profile_image'); ?>, <?php echo get_field('height'); ?>, <?php echo get_field('weight'); ?>, <?php echo get_field('born'); ?>, , <?php echo get_field('email'); ?>, <?php echo get_field('phone'); ?>, <?php echo get_field('street_address'); ?>, <?php echo get_field('city'); ?>, <?php echo get_field('state'); ?>, <?php echo get_field('Zip_code'); ?>, <?php echo get_field('position_1'); ?>, <?php echo get_field('position_2'); ?>, <?php echo get_field('bats'); ?>, <?php echo get_field('throws'); ?>, <?php echo get_field('fathers_name'); ?>, <?php echo get_field('mothers_name'); ?></li>
<?php endforeach; ?>
</ol>

Au début, j'ai utilisé une liste de commande pour m'assurer d'obtenir tous les enregistrements.

2
Siebird

Utilisez get_posts() et parcourez le tableau de résultats. L'argument 'numberposts' => -1 produira une liste complète des publications.

Si vous regardez WP_Query::get_posts() dans wp-includes/query.php, vous aurez peut-être une idée de la complexité d'une telle requête (ce qui n'est pas une excuse pour le style du code dans cette fonction…).

Et bienvenue sur WordPress Stack Exchange!

1
fuxia