私は現在作者ページ(author.php)でカスタムクエリを実行しようとしています。照会したい投稿のカスタムフィールドが2つあります(post_photographerとpost_videographer)。
私が作者のプロフィールのためにやろうとしているのは、ユーザーがいる現在のユーザープロフィールのすべての投稿を取得することです。
そのため、各人物のプロフィールMAYには投稿しなかった投稿があります(代わりに写真家またはビデオグラファーでした)。
次のコードは私が欲しいものに近いですが、問題はそれが現在のユーザーが作者である投稿を取得するということですそしてはどちらかの投稿写真家ですまたは投稿ビデオグラファー。現在のユーザーが作者またはポストカメラマンまたはポストビデオグラファーである必要があります。
$args = array(
'author' => $posts[0]->post_author,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'post_photographer',
'value' => $posts[0]->post_author,
'type' => 'numeric'
),
array(
'key' => 'post_videographer',
'value' => $posts[0]->post_author,
'type' => 'numeric'
)
)
);
query_posts( $args );
これはWordPressクエリ(query_postsまたはWP_Query)で可能ですか、それともカスタムSQLを書く必要がありますか?任意の助けは大歓迎です!説明が必要な場合は質問してください。
同様のニーズがあるかもしれない人のために、私はこれを次のように解決しました(authors.php):
まず著者IDを取得します。
$author = get_user_by( 'slug', get_query_var( 'author_name' ) );
// ID is accessed this way:
$author_id = $author->ID;
それから私はカスタムクエリを作成しました:
$query = "
SELECT p.*
FROM $wpdb->postmeta m
JOIN $wpdb->posts p
ON p.id = m.post_id
WHERE ( m.meta_key = 'medium_post_photographers'
AND m.meta_value = '$author->ID' )
OR ( m.meta_key = 'medium_post_videographers'
AND m.meta_value = '$author->ID' )
AND p.post_status = 'publish'
UNION DISTINCT
SELECT *
FROM $wpdb->posts p
WHERE post_author = $author->ID
AND p.post_status = 'publish'
GROUP BY p.id
ORDER BY post_date DESC
";
そして最後に以下を使用して結果を取得します。
$author_posts = $wpdb->get_results($query, OBJECT);
これは、結果を表示するための私のループの簡略版です。
<?php if ( $author_posts ) : ?>
<?php global $post; ?>
<?php foreach ( $author_posts as $post ) : setup_postdata($post); ?>
<h6><?php echo the_title(); ?></h6>
...
<?php endforeach; ?>
<?php else: ?>
<div class="alert">There are no posts in this category.</div>
<?php endif; ?>
これが誰かに役立つことを願っています!