it-swarm.com.de

Exportieren von Einträgen und mehreren benutzerdefinierten Feldmetas nach CSV?

Erstmals Poster. Ich versuche, eine Reihe von benutzerdefinierten Posts in eine CSV-Datei zu exportieren, damit ich sie problemlos in eine neue Datenbank importieren kann. Ich habe den nativen Export nach XML ausgeführt, aber es ist nicht das richtige Format, das ich benötige. Ich benötige ein spaltenbasiertes Format (z. B. Name, Größe, Gewicht usw.).

Ich habe einen benutzerdefinierten Post mit mehreren benutzerdefinierten Feldern. Ich habe Probleme, die sie alle zu einer einzigen Zeile zusammenfassen und nicht zu einer neuen Zeile für jeden Metatyp. Gibt es eine Möglichkeit, eine SQL-Abfrage zu schreiben, die zahlreiche Auswahlen für jeden Metatyp enthält und diese in einer Zeile mit mehreren Spalten kombiniert?

Hier ist, was ich bisher habe, was mir eine Spalte und eine neue Zeile für jeden Metatyp für den gleichen Namen gibt

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

Wie füge ich nun Spalten (Selects) für jeden Metatyp hinzu und füge sie in einer Zeile zusammen:

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

Mithilfe von @toscho, der auf get_post(); hinwies, konnte ich eine CSV-Datei mit einer leeren Vorlage ausspucken. Zuerst hatte ich Probleme mit der Speicherbegrenzung der Datenmenge, daher habe ich die Site lokal verschoben und konnte mit der Funktion get_post(); alles bekommen, was ich brauche.

Das ist der Kern davon:

<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>

Zuerst habe ich eine Bestellliste verwendet, um sicherzugehen, dass ich alle Unterlagen erhalten habe.

2
Siebird

Verwenden Sie get_posts() und iterieren Sie über das Ergebnisarray. Das Argument 'numberposts' => -1 erzeugt eine vollständige Liste der Beiträge.

Wenn Sie sich WP_Query::get_posts() in wp-includes/query.php ansehen, bekommen Sie möglicherweise eine Vorstellung davon, wie schrecklich komplex eine solche Abfrage ist (was keine Entschuldigung für den Codestil in dieser Funktion ist…).

Und willkommen bei WordPress Stack Exchange!

1
fuxia