初めてのポスター。私は簡単に新しいデータベースにインポートできるように、カスタム投稿の束をcsvファイルにエクスポートしようとしています。私はxmlへのネイティブエクスポートを実行しましたが、それは私が必要とする正しいフォーマットではありません。列ベースのフォーマット(名前、身長、体重など)が必要です。
いくつかのカスタムフィールドを持つカスタム投稿があります。それぞれのメタタイプごとに新しい行を作成するのではなく、それらすべてを1行にまとめて問題を抱えています。各メタタイプに対して多数の選択を行い、それらを複数の列を持つ1つの行に結合するSQLクエリを作成する方法はありますか?
これは私がこれまでに持っているものです、それは私に同じ名前のそれぞれのメタタイプのために私に1列と新しい行を与えます
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
それでは、メタタイプごとに列(選択)を追加し、それらを1行に結合する方法を説明します。
AND (
SELECT m1.meta_value AS Height
WHERE m1.meta_key = '_height'
)
AND (
SELECT m2.meta_value AS Weight
WHERE m2.meta_key = '_weight'
)
get_post();
を指摘する@toschoの助けを借りて、私は空白のテンプレートで.csvを吐き出すことができました。最初は、データ量に関するメモリ制限の問題があったため、サイトをローカルに移動し、get_post();
を使用して必要なものすべてを取得できました
これがその要旨です。
<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>
私はすべてのレコードを確実に入手できるように、最初は注文リストを使用しました。
get_posts()
を使用して、結果の配列を反復処理します。引数'numberposts' => -1
は投稿の完全なリストを生成します。
wp-includes/query.php
のWP_Query::get_posts()
を見ると、そのようなクエリがどれほどひどい複雑なのかという考えを得るかもしれません(これはこの関数のコードスタイルの言い訳ではありません…)。
そして、WordPress Stack Exchangeへようこそ。