サポート » 使い方全般 » arrayに動的変数を反映したい

  • カスタムポスト「DM」と「Creator」「テナント」で構成されているページを、
    訳あってpost_idを使えず別に新規IDを割り当てて、その絞り込みにカスタムタクソノミーを使用しているのですが、
    カスタムポストの「DM」で選択したタクソノミーのcreator_idの数字をカスタムポスト「Creator」のカスタムフィールドcreator_idを参照して、
    リストを書き出すことを目指しています。

    query_postsを使用しているのですが、meta_valueの配列の中身が動的に変わってくるので、
    arrayに変数を代入したいのですが、
    根本的にarray()の仕様と違っているのか動きません。

    下記コード内容になるのですが、お手上げで色々終日探しましたがよくわかりません。。
    御指南いただければ嬉しいです。
    ————————-
    <?php
    //dmのcreator2からidの抽出(複数選択)
    $terms = get_the_terms( $post->ID, ‘creator2’ );
    if ( $terms && ! is_wp_error( $terms ) ) :
    $creator_slug = array();
    foreach ( $terms as $term ) {
    $creator_slug[] = $term->slug;
    }
    $on_slug = join( “, “, $creator_slug );
    ?>
    <?php endif; ?>
    //$on_slugで吐き出された内容は「1058, 1059, 390, 6, 1057」

    <?php
    query_posts( array(
    ‘post_status’ => ‘publish, draft’,
    ‘post_type’ => ‘creators’, //カスタム投稿名
    ‘taxonomy’ => ‘creator_id’,//カスタムポストのcreatorsのcreator_id参照
    ‘meta_value’ => array($on_slug),

    //↑この部分を動的に上記書き出した$on_slugの配列を入れたい。
    //直接配列を打ち込んだ下記
    //’meta_value’ => array(1058, 1059, 390, 6, 1057),
    //だと思った通りに表示される

    ‘posts_per_page’ => -1 //表示件数( -1 = 全件 )
    )); ?>

    <?php if(have_posts()): ?>
    <?php while(have_posts()):the_post(); ?>

    <?php /*展示作家*/
    if( get_field(‘field_560200e9610e1’) ): ?>
    <?php $cid=get_the_ID(); //←Creatorsのpost_id参照 ?>
    “>
    <?php the_field(‘field_560200e9610e1’,$cid);?>
    <?php the_field(‘field_56020108610e2’,$cid);?>

    <?php endif; ?> 
    <?php endwhile; else: ?>

    <div class=”dmplace1″>情報が見当たりません</div>

    <?php endif; ?>
    <?php wp_reset_query(); ?>

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • $on_slug = join(“,”, $creator_slug );

    が配列ではないのが問題のように思います。
    $on_slug = array();
    で初期化しておいて、

    $on_slug[] = $creator_slug;
    として数値を配列にいれていくか

    $on_slug = explode(“,”, $on_slug );

    として
    “1058,1059,390,6,1057” という文字列を 配列に変換してしまうという手もあります。

    トピック投稿者 hanazou3

    (@hanazou3)

    >>kimipoohさん

    ありがとうございます。
    私も一度そう思って配列にしてみましたが、どうにもうまくいかず、
    array()内の形式が問題なのか?と思っているのですが…涙
    以下教えていただいた配列形式で代入した方法でやってみました。
    ————————
    $terms = get_the_terms( $post->ID, ‘creator2’ );
    if ( $terms && ! is_wp_error( $terms ) ) :
    $creator_slug = array();
    foreach ( $terms as $term ) {
    $creator_slug[] = $term->slug;
    }
    $on_slug = array();
    $on_slug[] = $creator_slug;
    //吐き出し値 Array ( [0] => Array ( [0] => 1058 [1] => 1059 [2] => 390 [3] => 6 [4] => 1057 ) )
    ?>
    <?php endif; ?>

    <?php
    query_posts( array(
    ‘post_status’ => ‘publish, draft’,
    ‘post_type’ => ‘creators’, //カスタム投稿名
    ‘taxonomy’ => ‘creator_id’,
    ‘meta_value’ => array($on_slug),//←配列形式を代入すると
    //どうも、array()の中に入れる形式に問題があるようで、
    //表示される部分から上は表示されるのですが、それ以下の部分が表示されないのです
    ‘posts_per_page’ => -1 //表示件数( -1 = 全件 )
    )); ?>

    関数リファレンス/WP Query
    投稿と固定ページのパラメータ > 複数の投稿/ページを操作 あたり参照ですか。
    それとWP_Query使ったほうがいいのかも。
    それとmeta_valueの対になるkeyがなくても動くもんなのでしょうか。
    あと拡張拡張の結果かもしれないですが、カスタム投稿や分類の使い方を見なおしたほうが良いということはないのでしょうか。

    トピック投稿者 hanazou3

    (@hanazou3)

    >>oisitさん

    なにぶんarrayに直接数字をいれ込めると機能するので、配列を渡せればと…。
    ’meta_value’ => array(1058, 1059, 390, 6, 1057),
    array内の数字でpostのcreator_idを参照してpostのpermalinkや情報をリンク一覧にしようとしております。
    (ということでカッコ内増減あり)

    構成は、外部i-phoneアプリとの連携の関係でwpとシステム上でpost_idの共有ができないためです。
    こちらで仕様を強制的に変えるしかなく。。
    あと、ここだけ修正できれば問題ないもので。。。

    // これはだめです
    $exclude_ids = '1,2,3';
    $query = new WP_Query( array( 'post__not_in' => array( $exclude_ids ) ) );
    
    // これは大丈夫
    $exclude_ids = array( 1, 2, 3 );
    $query = new WP_Query( array( 'post__not_in' => $exclude_ids ) );

    の部分
    meta_value’ => array($on_slug),
    は動かんかもということを示唆してるのでは

    • この返信は6年、 1ヶ月前にoisitが編集しました。
    トピック投稿者 hanazou3

    (@hanazou3)

    >>oisit様

    データ入力等でバタバタしておりますので、追って
    WP_Query
    を紐解いてみます。

    データ入力業務と並行しての作業で、あまり時間が取れずもがいておりますが、とりあえず頑張ってみますが、
    こいう作業を行った方で御指南いただければ嬉しい限りです…。

    ヒントじゃなくて、具体例が欲しかった…。
    ありがとうございました。

    ‘meta_value’ => array($on_slug),//←配列形式を代入すると
    は間違いで、

    ‘meta_value’ => $on_slug,

    じゃないでしょうか。すでに $on_slugは array配列に変更されてますしね。

    'meta_value' => array($creator_slug),

    こうじゃないでしょうか。

    せっかく吐き出し値を確認されているのですから、直接数字を入れ込んだ場合と比較すればいいかと思います。

    • この返信は6年、 1ヶ月前にx743が編集しました。

    すみません、間違えました…。

    'meta_value' => $creator_slug,

    正しくはこうですね。

    //吐き出し値 Array ( [0] => Array ( [0] => 1058 [1] => 1059 [2] => 390 [3] => 6 [4] => 1057 ) )

    とあるので、

    'meta_value' => array(1058, 1059, 390, 6, 1057),

    この上手くいく場合と同じ形式で値を渡すには$creator_slugを直接渡せばいいかと思います。

    トピック投稿者 hanazou3

    (@hanazou3)

    >>kimipooさん
    ‘meta_value’ => $on_slug,
    実はこれやらあれやらやっていたので、多分このパターンもやっていたかと思います。
    今はちょっとパニックに陥っているので冷静になるためにしばし、コードから離れております。
    多分変数内には正しい情報が渡されているので、状況を整理しつつ今一度トライしてみようと思います。
    急ぎではあるものの、他のやることがありまして、今一度ゆっくり向き合えるのは今週末ぐらいになるかと。。

    >>x743さん
    何がなにやらな状況になってきました。
    もしかしたら?とまだチャレンジしておりませんが、
    $creator_slug
    後日やってみます。
    今はちょっとパニックの頭を冷やしたいと思います。
    ありがとうございました。

    x743のご指摘にあるように
    $on_slug[] = $creator_slug;
    //吐き出し値 Array ( [0] => Array ( [0] => 1058 [1] => 1059 [2] => 390 [3] => 6 [4] => 1057 ) )

    となっており、これを見る限り
    $on_slug[0] と $creator_slug は同一となり、

    ‘meta_value’ => $creator_slug,

    が正しそうです。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「arrayに動的変数を反映したい」には新たに返信することはできません。