web-dev-qa-db-ja.com

mySQLカスタムwp_query

このコードは、ワードプレスクエリで選択されたメタ値を持つ投稿を選択するように設計されています

<?php $values = $wpdb->get_results("SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key  = 'wpcf-scr'",ARRAY_A);?>
<select name="wpcf-scr">
<option value="">default</option>
<?php foreach ($values as $value):?>
<?php if($value['meta_value']):?>
    <option value="<?php echo $value['meta_value']?>"><?php echo $value['meta_value']?></option>
<?php endif;?>
<?php endforeach;?>
</select>

コードを再使用する必要がありますが、メタ値ではなくタグ(手動で割り当てられたもの)を使用して投稿を選択する必要があります。

説明のためだけに以下のようなものがあります(それは間違っています)。

<?php $values = $wpdb->get_results("SELECT DISTINCT post_tags FROM $wpdb->tags ",ARRAY_A);?>
<select name="tags">
<option value="">default</option>
<option value="tag1">tag1</option>
<option value="tag1">tag2</option>
<option value="tag1">tag3</option>
<option value="tag1">tag4</option>
</select>

2番目の例を正しく作るには?

ありがとう

3
johnmido

wp_dropdown_categories() 関数を使用してtaxonomyパラメーターとしてpost_tagを渡すことができます。

<?php wp_dropdown_categories( array( 'taxonomy' => 'post_tag' ) ); ?>
1
RRikesh

デフォルトのWPデータベースにはtagsテーブルがありません(そのため、post_tagsカラムもない)ので、これは決してうまくいきません。そのクエリが機能するためには、term_relationshipsterm_taxonomytermsの各テーブルを調べて結合する必要があります。複雑なもの。

MySQLのクエリやWPのデータベース構造に慣れていない場合は、代わりに get_tags 関数を使用してください。引数を指定する必要すらありません。既存のすべてのpostタグをオブジェクトの配列として返します。質問のコードに基づいた例です。

<?php
$values = get_tags();
if(sizeof($values) > 0) : ?>
    <select name="tags">
        <option value="">default</option>
    <?php
        // I've used value=id instead of name / slug, which is always better, but just change the index if desired
        foreach ($values as $value) : ?>
        <option value="<?php echo($value->term_id); ?>"><?php echo($value->name); ?></option>
    <?php endforeach; ?>
    </select>
<?php endif; ?>

がんばろう!

1
Tomas Buteler