• 解決済 developer

    (@6flat)


    現在下記のコードを用いて記事ループ外の任意の箇所にカスタムフィールドを表示しています。
    これを、指定したポストにキーがmy_key1以外にも追加された時に、その追加で増えたキーの値も表示される様にしたいです。
    WP_Queryのカスタムフィールドパラメータを使えば良いのかなとも思ったのですが、具体的にどうしたら良いのかまでには至らず、解決策が見えずにいます。

    <?php
    $limit = 5;
    $post_id = 10;
    $custom_field_key = 'my_key1';
    $posts = get_post_custom($post_id);
    $posts_array = $posts[$custom_field_key];
    if ($posts_array) :
        $n = 0;
        shuffle($posts_array);
        echo "\n<ul>\n";
        foreach ($posts_array as $value) {
            if ($n == $limit) break;
            echo "<li>$value</li>\n";
            $n++;
        }
        echo "</ul>\n";
    endif;
    ?>

    また、出来ればキーの指定入力はカンマ区切りなどで一度の記入で済む形で実現させたいと思っています。

    何か良い方法がありましたらお教え頂きたく存じます。
    どうかよろしくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック投稿者 developer

    (@6flat)

    以下のコードで指定したポストのカスタムフィールドの値を全て表示する事が出来ました。
    尚、最初の書き込みにあるキーの指定という部分は自分で解決しようと思います。
    しかし、それとは別にどうしてもうまくいかない点が一つあります。

    <?php
    $post_id = 10;
    $limit = 5;
    $all_values = array();
    $custom_fields = get_post_custom($post_id);
    $custom_keys = get_post_custom_keys($post_id);
    foreach ($custom_keys as $key) {
        if ("_" != substr($key,0,1)) {
            $values = $custom_fields[$key];
            $all_values = array_merge($all_values,$values);
        }
        unset($key);
    }
    if ($all_values) {
        $n = 0;
        echo "\n" . '<ul>' . "\n";
        foreach ($all_values as $key => $value) {
            if ($n == $limit) break;
            echo '<li>' . $key . '<br />' . $value . '</li>' . "\n";
            $n++;
        unset($all_values[$key]);
        }
        echo '</ul>' . "\n";
    }
    ?>

    echoで出力している$keyに、カスタムフィールドで最後に追加したキー名しか表示されず、値に紐付いた形で表示されないので、これをきちんとキーと値が紐付いた状態で表示させたいのです。
    何か良い知恵がありましたらご教示下さい。

    何をしたいのか、いま一つわかっていませんが、メタキーとその値(値は複数可)を対で表示したいだけなら、

    <?php
    $post_id = 10;
    $custom_keys = get_post_custom_keys($post_id);
    if ($custom_keys) {
        echo "<ul>\n";
        foreach ($custom_keys as $key) {
            if ("_" != substr($key,0,1)) {
                $values = get_post_custom_values($key);
                $str_values = implode(",", $values);
                echo '<li>' . $key . '<br />' . $str_values . '</li>' . "\n";
            }
        }
        echo "<ul>\n";
    }
    ?>

    トピック投稿者 developer

    (@6flat)

    分かり辛くてすみません…。
    提示して頂いた方法にも辿り着いてはいたのですが、キーに値が連なって表示されるのではなく、以下の様な形でキーと値を1:1のセットで表示して、尚且つ全ての値を出力したいのです。

    <ul>
    <li>キーと<br />その値</li>
    <li>キーと<br />その値</li>
    <li>キーと<br />その値</li>
    </ul>

    the_metaと似た様な表示結果ですが、表示件数の設定や表示するキーの指定、値だけを対象としたランダムな表示(ランダムに表示してもきちんとキーも対で表示される)など色々と細かな制御を加えたいので最初の様なコードになっていました。

    提示して頂いたコードと同じものも最初は利用していたのですが、キーに連なる形なのでどうしてもキーごとに値が区切られてしまう点がネックとなって利用を止める結果になりました。

    制御云々という点についてはphpの方を勉強をしていけば解決出来ると思うので良いのですが、このカスタムフィールドを上記の様な形で表示させる方法を求めています。

    そんなに難しいことではないと思います。頑張ってください。

    トピック投稿者 developer

    (@6flat)

    ありがとうございます。
    もう少しで解決出来そうなので継続して頑張ってみようと思います。

    尚、タイトルにある件については既に解決していますので、こちらのトピックは解決済みとします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「複数のキーからカスタムフィールドの値を取得」には新たに返信することはできません。