Wordpressについて教えてください。

ル-プの中で、補足のコ-ドを使い、取得するpostを条件づけて表示しています。
カスタムフィ-ルド(hogehoge)で設定した値を使って、絞り込みをやっています。
(カスタムフィ-ルドhogehogeに値があれば表示)。

ふと、postのカスタムフィ-ルドで絞り込むのではなく、投稿者の情報で絞り込めないものかと思い、質問させていただいています。

現在、投稿者(author)にカスタムフィ-ルドを設定しているのですが、そのフィ-ルドに値を保持している投稿者のpostだけを表示する、ということをしたいのです。
色々やってみるもののうまくいきません。
レアなケ-スなのか、ググってもよくわかりませんでした。
補足のコ-ドでは、postのカスタムフィ-ルド「hogehoge」で絞り込んでいるのですが、それの代わりに投稿者(author)のカスタムフィ-ルド(testes)の値あるなしで絞り込むためのコ-ドを教えてください(AND)。
よろしくお願いいたします。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2017/05/31 05:04:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:ykhpno1

$args = Array(
'post_type' => 'post',
'posts_per_page' => -1,
'meta_query' => array(array(
'key' => 'address',
'value' => $place,
'compare' => 'LIKE'
),

array(
'key' => hogehoge",
'value' => 'null',
'compare' => '!='
),
)
);

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント500pt

ちょっと調べてみたのですけれど、WP_Query に渡す検索条件だけでは、希望している動作はできないと思います。

# SQL を書けばできるかもしれませんが

WP_Query では、今まで通りに住所とカテゴリーを絞り込んで、そのループの中で投稿者のカスタムフィールドを取得して、値が設定されているかどうかを確認するような感じでいけると思います。

<?php

    ...

    // address と、指定されていれば category で検索する
    $the_query = new WP_Query($args);

    if ($the_query->have_posts()):
?>
<div id="map" style="width: 99%; height: 650px;"></div>
<script type="text/javascript">
(function() {   // ★ こんなので、くるんでみる

    var posts = [];
<?php while ($the_query->have_posts()) :
    $the_query->the_post();

    // 記事の投稿者を取得して、そのカスタムフィールドの値を取得する
    $author_id = $post->post_author;
    $author_testes = get_user_meta($author_id, "testes", true);

    // 投稿者のカスタムフィールド testes に値が設定されていたら...
    if ($author_testes != "") {

        $googlemap = get_field('lat');
        if (! $googlemap) {   // マップ住所が登録されていないこともある
            continue;
        }
        $category = get_the_category();
?>
    posts.push({
        lat: '<?php echo post_custom("lat")?>',
        lng: '<?php echo post_custom("lon")?>',
        name: '<?php echo post_custom("Name")?>',
        link: '<?php the_permalink();?>',
        title: '<?php the_title(); ?>',
        cat_id: '<?php echo $category[0]->category_nicename; ?>'
    });
<?php } // End of $author_hoge ?>
<?php endwhile; // End the loop. Whew. ?>

ちょっと、ごちゃごちゃしているので、骨子になるところだけ分離すると、こんな感じ。

<?php

    ...

    // address と、指定されていれば category で検索する
    $the_query = new WP_Query($args);

    if ($the_query->have_posts()):

        while ($the_query->have_posts()) :
            $the_query->the_post();

            // 記事の投稿者を取得して、そのカスタムフィールドの値を取得する
            $author_id = $post->post_author;
            $author_testes = get_user_meta($author_id, "testes", true);

            // 投稿者のカスタムフィールド testes に値が設定されていたら...
            if ($author_testes != "") {
?>
                ...     // 記事のデータを javascript の配列に取り込み
<?php
            }
        endwhile;
    else:
        ...
    endif;
?>
id:ykhpno1

なるほど、勉強になります。
ありがとうございます。
やはり一発でベストアンサ-をいただけましたね。
いつもお世話さまです!

2017/05/31 05:04:41

その他の回答0件)

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント500pt

ちょっと調べてみたのですけれど、WP_Query に渡す検索条件だけでは、希望している動作はできないと思います。

# SQL を書けばできるかもしれませんが

WP_Query では、今まで通りに住所とカテゴリーを絞り込んで、そのループの中で投稿者のカスタムフィールドを取得して、値が設定されているかどうかを確認するような感じでいけると思います。

<?php

    ...

    // address と、指定されていれば category で検索する
    $the_query = new WP_Query($args);

    if ($the_query->have_posts()):
?>
<div id="map" style="width: 99%; height: 650px;"></div>
<script type="text/javascript">
(function() {   // ★ こんなので、くるんでみる

    var posts = [];
<?php while ($the_query->have_posts()) :
    $the_query->the_post();

    // 記事の投稿者を取得して、そのカスタムフィールドの値を取得する
    $author_id = $post->post_author;
    $author_testes = get_user_meta($author_id, "testes", true);

    // 投稿者のカスタムフィールド testes に値が設定されていたら...
    if ($author_testes != "") {

        $googlemap = get_field('lat');
        if (! $googlemap) {   // マップ住所が登録されていないこともある
            continue;
        }
        $category = get_the_category();
?>
    posts.push({
        lat: '<?php echo post_custom("lat")?>',
        lng: '<?php echo post_custom("lon")?>',
        name: '<?php echo post_custom("Name")?>',
        link: '<?php the_permalink();?>',
        title: '<?php the_title(); ?>',
        cat_id: '<?php echo $category[0]->category_nicename; ?>'
    });
<?php } // End of $author_hoge ?>
<?php endwhile; // End the loop. Whew. ?>

ちょっと、ごちゃごちゃしているので、骨子になるところだけ分離すると、こんな感じ。

<?php

    ...

    // address と、指定されていれば category で検索する
    $the_query = new WP_Query($args);

    if ($the_query->have_posts()):

        while ($the_query->have_posts()) :
            $the_query->the_post();

            // 記事の投稿者を取得して、そのカスタムフィールドの値を取得する
            $author_id = $post->post_author;
            $author_testes = get_user_meta($author_id, "testes", true);

            // 投稿者のカスタムフィールド testes に値が設定されていたら...
            if ($author_testes != "") {
?>
                ...     // 記事のデータを javascript の配列に取り込み
<?php
            }
        endwhile;
    else:
        ...
    endif;
?>
id:ykhpno1

なるほど、勉強になります。
ありがとうございます。
やはり一発でベストアンサ-をいただけましたね。
いつもお世話さまです!

2017/05/31 05:04:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません