可能なアプローチの1つは、WPDBクラスのヘルパーメソッドの1つを使用して、より洗練されたメタベースのクエリを実行することです。ただし、これらの関数の一部を使用する場合の注意点は、1つの列または行だけを呼び出す場合でも、通常は単純なデータ配列を取得せず、通常はオブジェクトプロパティへの不要な参照を作成する必要があることです。
もちろん、すべての機能が同じというわけではありません。また、WPDBメソッドに意図的な言及がget_col
あります。WPDBメソッドは、照会されたデータの単純なフラット配列を返します。 。
WordPress-WPDBデータ列の選択
$ wpdb-> get_col()
以下に、選択した投稿タイプ、投稿ステータス、および特定のメタキー(または技術的にあまり気にしないカスタムフィールド)のすべての投稿をデータベースにクエリする関数の例を示します。
function get_meta_values( $key = '', $type = 'post', $status = 'publish' ) {
global $wpdb;
if( empty( $key ) )
return;
$r = $wpdb->get_col( $wpdb->prepare( "
SELECT pm.meta_value FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = %s
AND p.post_status = %s
AND p.post_type = %s
", $key, $status, $type ) );
return $r;
}
たとえば、投稿タイプの映画について、どの投稿が評価のメタキーを持っているかを知りたい場合、その情報を変数に保存したい場合、そのような呼び出しの例は次のようになります。
$movie_ratings = get_meta_values( 'rating', 'movies' );
そのデータを画面に出力するだけでよい場合は、PHPのimplode関数を使用して、その単純な配列をデータの行にすばやくスプライスできます。
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
たとえば、返されたデータを単純なループで処理し、カウントの配列を作成することで、返されたデータを使用して、これらのメタ値を持つ投稿の数を計算することもできます。
$movie_ratings = get_meta_values( 'rating', 'movies' );
if( !empty( $movie_ratings ) ) {
$num_of_ratings = array();
foreach( $movie_ratings as $meta_value )
$num_of_ratings[$meta_value] = ( isset( $num_of_ratings[$meta_value] ) ) ? $num_of_ratings[$meta_value] + 1 : 1;
}
/*
Result:
Array(
[5] => 10
[9] => 2
)
// ie. there are 10 movie posts with a rating of 5 and 2 movie posts with a rating of 9.
*/
このロジックは、さまざまな種類のデータに適用でき、さまざまな方法で機能するように拡張できます。だから、私の例が参考になり、従うのに十分簡単であることを願っています。