質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • PHP

    24093questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    8951questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

wordpressカスタム投稿を呼び出す時にカスタムフィールドの値を使いたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,592

ohagin

score 6

カスタム投稿で制作した特定カテゴリに属する記事のタイトルを、投稿ページ(single.php)に読み込みたいです。
その際カスタム投稿のカテゴリの指定方法は、カスタムフィールドの値で指定したいのですが、調べても何も出てきません。

<?php query_posts( array(
    'post_type' => 'gallery', 
    'posts_per_page' => -1, 
'category' => 'ここにカスタムフィールドの値を入れたい'
)); ?>
<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>

<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

<?php endwhile; else: ?>

無い場合は何も表示しない

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

カスタムフィールドの値は、投稿ページで指定した、カスタム投稿のカテゴリ名です。
このような事は実現可能なのかどうか、もしできるならヒントだけでも教えていただけないでしょうか。
よろしくお願いいたします。

教えていただいた後、query_postsの件を調べ書き換えましたが、やはり思うような動きにはなりません。

<?php
$custom_field= get_post_meta($post_id, 'カスタムフィールド名', true );
$args = array( 'post_type' => 'gallery', 'category' => '$custom_field', 'posts_per_page' => -1 );
$myposts = get_posts( $args );
if( !empty( $myposts ) ) : 
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php endforeach; ?>
<?php elseif( empty( $myposts ) ):  ?>
無い場合は何も表示しない
<?php endif; ?>
<?php wp_reset_query(); ?>

カテゴリの箇所に変数を入れたところカスタム投稿が全て表示されました。
変数をカテゴリスラッグに変えても同様にすべて表示されます。
IDを入れたところ、逆に何も表示されなくなりました。
この現象から、コード自体が間違っておりカスタム投稿のカテゴリ分岐自体が出来ていないのではないかと思うのですが、どこをどう間違っているのか分かりません。
何度も申し訳ないのですが、お分かりになられる方お教えください。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

投稿ページ(single.php)のカスタムフィールドの値を使用するなら、

ここの

$custom_field= get_post_meta($post_id, 'カスタムフィールド名', true );


$post_id は get_the_ID() にする必要があると思います。

で、

'category'=>$custom_field


の $custom_field の値はカテゴリー ID を指定する必要があります。

テンプレートタグ/get posts

追記

カスタム投稿に設定されたのは、カテゴリーではなくタクソノミーといわれるものです。
$myposts の前2行を以下のコードに、

    $custom_field = get_post_meta(get_the_ID(), 'カスタムフィールド名', true );
    $term = get_term( $custom_field, カスタムタクソノミー名 );
    $slug = $term->slug;     // タームのスラッグ
$args = array(
    'post_type' => 'カスタム投稿タイプ名',
    'posts_per_page' => -1,
    'tax_query' => array(
            array(
                'taxonomy' => 'カスタムタクソノミー名',
                'field' => 'slug',
                'terms' => $slug,
                ),
            ),
        );


これでいけるのではないでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/12 09:32

    ありがとうございました。
    やはり同じ動きでカテゴリIDをカスタムフィールドに入れると「無い場合は何も表示しない」と表示されます。
    しかし、スラッグの場合はエラーが起こっているのか、カスタム投稿内のすべての投稿がとれます。
    カスタム投稿にカテゴリを作り、カテゴリ一覧でも何件と表示されているのに、カテゴリに入らない等あるのでしょうか?
    知識が乏しいために何度もお手数をおかけし申し訳ありません。
    ありがとうございます。

    キャンセル

  • 2017/05/12 09:35

    投稿ページ(single.php)に上記のコードを設置しているのですよね。

    キャンセル

  • 2017/05/12 09:41

    はい、投稿ページ(single.php)にコードを書き、カスタム投稿した記事のタイトルを呼び出そうとしています。
    カテゴリを指定ではなく、カスタムフィールドの値で呼び出しを試してみたところ、問題なく呼び出しが出来ました。
    ただこの方法ですと、都度カスタムフィールドに入力が必要となるため、カテゴリ分けで実現できるのが理想です。

    <?php
    $custom=get_post_custom_values("カスタムフィールド名");
    $args = array( 'post_type' => 'housegallery', 'meta_key' => 'カスタム投稿のカスタムフィールド名', 'meta_value' => $custom[0], 'posts_per_page' => 5 );
    $myposts = get_posts( $args );
    if( !empty( $myposts ) ) :
    foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php the_post_thumbnail(''); ?>
    <?php endforeach; ?>
    <?php elseif( empty( $myposts ) ):  ?>
    無い場合は何も表示しない
    <?php endif; ?>
    <?php wp_reset_query(); ?>

    何度もありがとうございます。

    キャンセル

  • 2017/05/12 11:16

    ちょっと整理したいんですが、もしかして、
    「投稿のcategory(カテゴリのID)」をもとに「カスタム投稿のカスタムフィールド(投稿のカテゴリID)」をもってくると言うことですか?

    キャンセル

  • 2017/05/12 11:47

    ありがとうございます。
    8-0_nyan5様にご指摘いただきました、逆の事がしたいのです。
    投稿のカスタムフィールドの値を元に、カスタム投稿のカテゴリに入っている記事を持ってきたいです。

    カスタム投稿ーーカテゴリ1ーカスタム投稿記事1
          |-カテゴリ2ーカスタム投稿記事2
          |-カテゴリ3
          |-カテゴリ4

    カスタムフィールドでカテゴリ1のIDを指定した投稿ページに、カスタム投稿記事1を掲載したいです。

    ややこしくて本当に申し訳ございません。

    キャンセル

  • 2017/05/12 14:43

    投稿とカスタム投稿で同じカテゴリーを設定すればいいような気もしますし、
    そもそも、カテゴリーを設定したカスタム投稿がカテゴリー指定で呼び出せないのは変ですね。
    もしかして、カスタム投稿に設定しているのは、カテゴリーでなくカスタムタクソノミーということはないですか。

    キャンセル

  • 2017/05/12 14:58

    何度もご返答下さり本当にありがとうございます。
    カスタム投稿自体は下記コードで制作しておりますが、間違っていますでしょうか?
    どうぞよろしくお願いいたします。

    //カスタム投稿タイプ
    add_action('init', 'gallery_init');
    function gallery_init()
    {
    $labels = array(
    'name' => _x('アルバム', 'post type general name'),
    'singular_name' => _x('アルバム', 'post type singular name'),
    'add_new' => _x('アルバムを追加する', 'gallery'),
    'add_new_item' => __('アルバムを追加する'),
    'edit_item' => __('アルバムを編集'),
    'new_item' => __('新しいアルバム'),
    'view_item' => __('アルバムを見てみる'),
    'search_items' => __('アルバムを探す'),
    'not_found' => __('アルバムはありません'),
    'not_found_in_trash' => __('ゴミ箱にアルバムはありません'),
    'parent_item_colon' => ''
    );
    $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => 5,
    'supports' => array('title','editor','thumbnail','custom-fields','excerpt','revisions','page-attributes','comments'),
    'has_archive' => true
    );
    register_post_type('gallery',$args);

    //カテゴリータイプ
    $args = array(
    'label' => 'アルバムカテゴリー',
    'public' => true,
    'show_ui' => true,
    'hierarchical' => true
    );
    register_taxonomy('gallery_category','gallery',$args);

    //タグタイプ
    $args = array(
    'label' => 'アルバムタグ',
    'public' => true,
    'show_ui' => true,
    'hierarchical' => false
    );
    register_taxonomy('gallery_tag','gallery',$args);
    }

    キャンセル

  • 2017/05/12 18:03

    ありがとうございました。
    無事に思う形を実現することができました。
    カスタム投稿とカスタムタクソノミーの違いがあまりよく分かっておらず、長々とご教授いただくことになり申し訳ありませんでした。
    本当に助かりました。
    ありがとうございました。

    キャンセル

+1

適当な変数にカスタムフィールドの値を格納し、それを引数に指定すればいいです。

例えば、

'category'=>$custom_field


こんなふうに。
特別なことをする必要はありません。

後、余談にはなりますが、テンプレートファイル内でquery_postsは使わない方がいいです。
理由は様々なサイトで解説されているので、調べてみてください。


追記

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts#.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF

注意: category パラメータではカテゴリー名ではなくカテゴリー ID を指定する必要があります。


追記2
$custom_fieldに想定している値が入っているかは確認しましたか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/11 20:22

    ありがとうございました。
    思うような動きにならず質問に追記させていただきました。

    キャンセル

  • 2017/05/11 20:24

    '$custom_field' シングルクォーテーションがいらないんじゃないですか?

    キャンセル

  • 2017/05/11 21:03

    ありがとうございます。
    やはり動きません。
    カスタムフィールドにカテゴリスラッグを入れるとすべて表示され、IDを入力すると一件も表示されなくなる。
    このことから、コードではなくカテゴリの作り方に問題がある可能性が大きいでしょうか?

    キャンセル

  • 2017/05/11 22:44

    追記ありがとうございました。
    はい、確認しております。
    カテゴリスラッグを入れた場合と、カテゴリIDを入れた場合、表示が違いました。
    スラッグの場合は全てのカスタム投稿が表示され、
    カテゴリIDの場合は、一件も表示されませんでした。
    echoで読み込まれている確認も行いましたので、変数の取得は出来ていると思うのですが…

    キャンセル

  • 2017/05/11 23:08

    $post_id には何が入っていますか?

    キャンセル

  • 2017/05/12 08:43

    ありがとうございます。
    すみません、$post_idの中身の確認方法が分からず止まっています。
    カスタム投稿の設定が間違っており、カテゴリに正しく入っていないという可能性はありますでしょうか?

    キャンセル

同じタグがついた質問を見る

  • PHP

    24093questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    8951questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。