サポート » 使い方全般 » 他ページのカスタムフィールドの値を表示する

  • 解決済 Tadayuki

    (@tadayuki)


    すみません、教えてください。

    現在、ある記事の中に特定のタグがついている記事の内容を表示するショートコード(post_tag)を作って運用しています。

    function.phpの内容

    function sc_post_tag($atts, $content = null) {
    global $post;
    
    $cur_tag[] = get_the_tags();
        extract(shortcode_atts(array(
        'num' => 10,
        'tagname' => $cur_tag[0]->name,
        'format' => 'Y/m/d'
        ), $atts));
    
    $myposts = get_posts('numberposts=' . $num . '&order=DESC&orderby=post_date&tag=' . $tagname);
    $retour='<ul>';
    foreach ($myposts as $post) :
    setup_postdata($post);
    $retour.='<p><div class="tagnews"><a href="'.get_permalink().'">'.the_title("","",false).'</a></div>'.get_the_content().'</p>';
            endforeach;
            $retour.='</ul> ';
            return $retour;
    }
    
    add_shortcode('post_tag', 'sc_post_tag');

    ですが、引用するページのコンテンツをカスタムフィールドを使って呼び出していて、その部分が表示されません。


     AAAページ
      内容 あああ
      カスタムフィールド いいい

     この状態で、BBBページ内のAAAページを上記のように開くと、「あああ」は表示されますが、「いいい」が表示されません。
     get_the_contentをthe_contentにするとカスタムフィールドの部分(いいい)も含めて表示されるので、値はセットされているようなのですが、何が悪いのでしょうか?

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • KKT

    (@kvex)

    通常
    <?php echo get_post_custom_values(‘カスタムフィールドのキー’); ?>
    などとしないと、カスタムフィールドは表示されないと思うのですが。

    トピック投稿者 Tadayuki

    (@tadayuki)

    分かりづらくて申し訳ありません。

     引用元の記事で、記事内にカスタムフィールドを表示するようにしています。

     例:
     Aページ
     記事 「あああ」
     カスタムフィールド 「いいい」として、
     記事には「あああいいい」と表示されるようにしています。

     BページでAページをsetup_postdata($post)したあとに、echo the_content()でAページの内容を表示すると、「いいいあああ」と表示されてしまいます。しかし「いいい」も表示されるのですが表示のコントロールができません。
     そこでget_the_content()を利用して表示しようとしたのですが、あああ しか表示されません。
     the_content()でいいいが表示されるということは、get_the_content()でもいいいが表示されると思うのですが、違うのでしょうか?

     複雑で申し訳ありません。

    shokun0803

    (@shokun0803)

    Bページの投稿でAページをインクルードしてくるショートコードを使用していて、そのAページにはカスタムフィールドがあり、A記事内で該当カスタムフィールドを表示するような設定になっている、という理解でよかったでしょうか?

    1.Aページでカスタムフィールドを表示するのはショートコードを利用している?ページ用テンプレートを作成し直に書き込んでいる?この部分のコードの提示が必要です。

    2.Bページの記事内に書かれたショートコードがループを制御するようなコードの場合、Bページのループと干渉を起こしてしまうので、ショートコード内でループを制御するような書き方(例えばsetup_postdataを使用する方法など)は避けたほうがよいと思います。

    最初の理解が間違っていたら解答が根本から違ってしまうので、その場合はご容赦を;)

    トピック投稿者 Tadayuki

    (@tadayuki)

    shokun0803さん、いつもありがとうございます。
     1については、じかにphpを書き込んでいます。具体的には
     Aページではlinktitle,linkurl,linksitename,linkdate,linkarticleといったカスタムフィールドを作り、記事部分に下記コードをいれて表示させています。

    <p>本文</p>
    <div><?php echo post_custom('linktitle') ?> - <a href="<?php echo post_custom('linkurl') ?>" target="_blank">
    <?php echo post_custom('linksitename') ?></a>:<?php echo post_custom('linkdate') ?></div>
    <blockquote><p><?php echo post_custom('linkarticle') ?></p></blockquote>

     Bページでは、ショートコードを使っていますが、そのコードは

    function sc_post_tag($atts, $content = null) {
    global $post;
    
    $cur_tag[] = get_the_tags();
        extract(shortcode_atts(array(
        'num' => 10,
        'tagname' => $cur_tag[0]->name,
        'format' => 'Y/m/d'
        ), $atts));
    
    $myposts = get_posts('numberposts=' . $num . '&order=DESC&orderby=post_date&tag=' . $tagname);
    $retour='<ul>';
    foreach ($myposts as $post) :
    setup_postdata($post);
    $quotedate = get_post_meta( $post->ID , 'linkdate' , true );
    $retour.='<p><div class="tagnews"><a href="'.get_permalink().'">'.the_title("","",false).'</a>'.$quotedate.'</div>'.get_the_content().'</p>';
            endforeach;
            $retour.='</ul> ';
            return $retour;
    }
    
    add_shortcode('post_tag', 'sc_post_tag');

    としていて、
    ためしに上記のように$quotedate = get_post_meta( $post->ID , ‘linkdate’ , true ); を入れて、quotedateを表示すると、Aの文章のカスタムフィールド内のlinkdateを引っ張ってきています。
     A記事以外にいくつかの記事をループして取り込み表示することもできています。

     前の書き込みにも書いたようにthe_content()でも表示できたので、get_the_content()で表示できるかな(横着ですね・・・)と思ったのですが、get_post_metaで個別に値を持ってきたほうがよいのでしょうか。

    kz

    (@kz)

    setup_postdata(なんちゃら); を使ったら
    wp_reset_postdata(); で元に戻してあげると何かと安心です。

    トピック投稿者 Tadayuki

    (@tadayuki)

    ありがとうございました!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「他ページのカスタムフィールドの値を表示する」には新たに返信することはできません。