サポート » プラグイン » 【ほぼ出来ています】カスタムフィールドの記事タイトルが取得できない

  • 解決済 tomo_chocomint

    (@tomo_chocomint)


    初めまして、tomo_chocomintと申します。

    現在「custom post type UI」を使用して新着情報を挿入したいと思っているのですが、
    記事タイトルが何故かうまく表示されません。
    (全て「HOME」になってしまします)

    下記サイトのトップの3カラムボタン下部の「お知らせ」という部分です。
    http://yogatha.xsrv.jp/
    https://gyazo.com/50ce7830331c32948f30c452895f4119

    テーマは日本製の有名なテーマ「Customizr 3.4.16」を使用しております。
    テンプレートの構成をみた所、通常はテーマ直下に置くphpファイルが、全て2階層下のフォルダに格納されているため、記事のパーマリンクがおかしくなっている事が原因ではないかと思っております。
    https://gyazo.com/175f32af9a29ee4f57171471365e692f

    カスタム投稿を表示させるためのphpタグは以下の通りです。

    ******************************************

    <h3 class=”midashi”>お知らせ</h3>
    <table class=”info”>
    <?php
    $myposts = get_posts(‘numberposts=5&post_type=info’); //表示数&カスタム投稿名
    foreach($myposts as $post) :
    ?><tr>
    <th><?php echo date(“Y年m月d日”, strtotime($post->post_date)); ?></th>
    <td><?php
    $days=7; //Newをつける日数
    $today=date_i18n(‘U’); $entry=get_the_time(‘U’);
    $diff1=date(‘U’,($today – $entry))/86400;
    if ($days > $diff1){
    echo'<span style=”background:#B20000; padding:3px; color:#fff; margin-right:5px;”>New!</span>’;
    }
    ?>
    info”><?php the_title(); ?></td></tr><?php endforeach; ?>
    </table>
    <p style=”text-align:right; margin-top:10px;”>一覧を見る</p>

    ******************************************

    管理画面の「新着情報」より記事を書くと、日付は正しく表示されるので、
    カスタム投稿の設定はちゃんと出来ております。

    phpについては当方あまり理解しておらず、カスタマイズ程度しか出来ません。
    どなたかご指南いただけますと幸いでございます。
    何卒よろしくお願い致します。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • tomo_chocomintさん

    <h3 class="midashi">お知らせ</h3>
    <table class="info">
    <?php
    $post_type = get_post_type_object( 'info' );//投稿タイプ = お知らせ
    $args = array(
    'numberposts' => 5,  //表示(取得)する記事の数
    'post_type' => array( $posttype_slug) , //投稿タイプの指定
    'post_status' => 'publish',//非公開記事の非表示(公開のみの表示)
    'has_password' => false,//パスワード記事を表示するかどうか
    );
    if ( have_posts( $args ) ) ://条件に合致した投稿があった時
    $myposts = get_posts($args);//$argsの条件取得
    foreach($myposts as $post) :
    setup_postdata( $post );//重要(必ず入れる)
    $post_id = get_the_ID($post_id);//投稿IDを取得
    $post_link = get_permalink($post_id);
    ?>
    
    <tr>
    <th><?php echo date("Y年m月d日", strtotime($post->post_date)); ?></th>
    <td><?php
    $days=7; //Newをつける日数
    $today=date_i18n('U'); $entry=get_the_time('U');
    $diff1=date('U',($today - $entry))/86400;
    if ($days > $diff1){
    echo'<span style="background:#B20000; padding:3px; color:#fff; margin-right:5px;">New!</span>';
    }
    ?>
    info"><?php the_title($post_id); ?></td></tr>
    <?php
    endforeach;
    wp_reset_postdata(); //クエリのリセット
    else:
    echo '記事がなかったときの処理';
    endif;
    ?>
    </table>
    <p style="text-align:right; margin-top:10px;">一覧を見る</p>

    こんな感じで如何でしょうか?
    おそらくですが、setup_postdata( $post );
    これがないのが原因?な感じがします。

    Toro_Unit (Hiroshi Urabe)さんのおっしゃる通り、コーデックスを参考にすると
    よろしいかもしれません。

    稀かもしれませんが、
    パスワード記事や公開以外の記事の表示が気になる場合は
    ‘post_status’と’has_password’で制御すると個人的には好きです。

    地味なご確認ですが
    カスタムフィールドではなく、カスタムポストタイプでよろしいですよね?

    >>Toro_Unit (Hiroshi Urabe)さん

    コメントありがとうございます。

    申し訳ありませんが、phpの構文自体を理解しておらず、
    タグ部分のみ見ても何処に何を貼り付けてよいのかが分かりません。。

    本来であればこのフォーラムに質問するのもお門違いなのかもしれませんが、
    他に質問するところが見つからなかったのでこちらに投稿いたしました。
    お気を悪くされたのであれば、申し訳ございませんでした。

    >>mura0403さん

    詳しい解説をありがとうございます!
    タグを貼り付けてみたのですが、上手くいきませんでした。。
    http://yogatha.xsrv.jp/
    https://gyazo.com/4a4f8fb6df075bbbf9601063233372ac
    全ての投稿記事が表示され、HOMEの前に「2」という数字が付いて来ました。

    やはりこのテーマでのカスタム投稿の表示は難しいのでしょうか?

    お後、

    × カスタムフィールド
    ○ カスタムポストタイプ

    ですね。
    大変失礼いたしました。

    tomo_chocomintさん

    今、組んでる途中のフロントページのソースなのですが
    多分、似たような感じだと思うのでそのまま送ります。

    一度、動くかどうか試してみて頂けませんか。
    うちの環境では動いているのですが。
    (うちの場合は、カスタムポストはfunctions.phpに直接書いてますが、多分問題ないと思われます)

    <?php //トップに表示するカスタムポストの最新
    $args = '';
    $post_type = get_post_type_object( 'info' );//投稿タイプ = お知らせ
    $posttype_slug = esc_html($post_type->name); //カスタムポストタイプのスラッグ取得
    $posttype_labels = $post_type->labels;
    $posttype_name = esc_html($posttype_labels->name); //カスタムポストタイプの表示名
    $posttype_singular_name = esc_html($posttype_labels->singular_name ); //カスタムポストタイプの表示名
    $posttype_menu_name = esc_html($posttype_labels->menu_name ); //カスタムポストタイプの表示名
    $posttype_desc = esc_html($post_type->description); //カスタムポストタイプの説明文
    $posttype_link = esc_url(get_post_type_archive_link($posttype_slug));
    
    $args = array(
    'numberposts' => 5,  //表示(取得)する記事の数
    'post_type' => array( $posttype_slug) , //投稿タイプの指定
    //'orderby' => 'modified',//更新日順
    'post_status' => 'publish',
    'has_password' => false,//false or true
    );
    if ( have_posts( $args ) ) ://条件に合致した投稿があった時
    $customPosts = get_posts($args);//$argsの条件取得
    if($customPosts) :
    echo '<h3 class="headline1" title="' .$posttype_singular_name.'|'.$posttype_desc. '">' . $posttype_singular_name . '</h3>' . PHP_EOL;
    echo '<ul class="front-postlist">'.PHP_EOL;
    
    foreach($customPosts as $post)://フォーイーチで繰り返しの開始
    setup_postdata( $post );//お決まり
    
    //↓記事開始
    //タイトルの正規表示及びXSS対処
    $title = get_the_title();//記事タイトル取得
    $title = preg_replace('!<style.*?>.*?</style.*?>!is', '', $title);//スタイル無効
    $title = preg_replace('!<script.*?>.*?</script.*?>!is', '', $title);//スクリプト無効
    $title = strip_tags($title);//タグ削除
    $title = mb_ereg_replace('&nbsp;', '', $title);//全角スペース削除
    $title = mb_strimwidth (strip_tags($title), 0 , 50, "…", "utf-8");//表示文字数
    $title = esc_html($title);//最終書き出し
    //文章の正規表示及びXSS対処
    $post_text = get_the_excerpt();//概要文取得
    $post_text = preg_replace('!<style.*?>.*?</style.*?>!is', '', $post_text);//CSS無効
    $post_text = preg_replace('!<script.*?>.*?</script.*?>!is', '', $post_text);//JS無効
    $post_text = strip_tags($post_text);//タグ削除
    $post_text = mb_ereg_replace('&nbsp;', '', $post_text);//全角スペース削除
    $post_text = mb_strimwidth (strip_tags($post_text), 0 , 50, "…", "utf-8");//文字数制限
    $post_text = esc_html($post_text);//ESC処理
    //ID取得
    $post_id = get_the_ID();
    //パーマリンク
    $post_link = get_permalink( );
    $post_link = esc_html($post_link);
    $post_link = esc_url($post_link);
    $post_link = urldecode($post_link);
    $domain = esc_html( esc_url("http://www." . $_SERVER['HTTP_HOST'] ) );//現在のドメインを取得
    
    $post_date = $post->post_date;//投稿日
    $post_modified = $post->post_modified;//更新日
    $post_status = $post->post_status;//公開状態 ( publish | pending | draft | private | static | object | attachment | inherit | future )
    $post_password  = $post->post_password;//投稿パスワード
    $post_cat = get_the_category();//カテゴリー
    
    //newの表示プログラム
    //$new_post = '';
    $$post_dsp = '';
    $set_days = 7;//NEWを表示日数
    $set_days = $set_days . day;//NEWを表示日数+単位
    $set_dsp_days = 30 ;//記事を表示日数
    $today = date('Y/m/d');//今日の日付を取得
    $limit_set_days = date("Y/m/d", strtotime($set_days, strtotime( date( $post_date )  )));//投稿日+$set_days
    //更新の表示プログラム
    //$modified_post = '';
    $post_dsp = '';
    $set_modified_days = 7;//を表示日数
    $set_modified_days = $set_modified_days . day;//NEWを表示日数+単位
    $set_modified_dsp_days = 30 ;//記事を表示日数
    $limit_modified_set_days = date("Y/m/d", strtotime($set_modified_days, strtotime( date( $post_modified )  )));//投稿日+$set_days
    //セットした日数より新しければ新着マークを表示
    if( $limit_set_days > $today ) :
    $post_dsp ='<span>new</span>';
    elseif( $limit_modified_set_days > $today ) :
    $post_dsp ='<span>更新</span>';
    endif;
    ?>
    <li>
    <article itemscope="itemscope" itemtype="http://schema.org/Article" title="<?php echo $title; ?>">
     <meta itemprop="description" content="<?php echo $post_text; ?>" />
     <link itemprop="author" href="<?php echo $domain; ?>" />
      <time datetime="<?php echo get_post_time('Y-m-j') ?>">
      <?php echo get_post_time('Y-m-j') ?>
      </time>
      <h1 itemprop="name">
        <a itemprop="url" href="<?php echo $post_link; ?>"><?php echo $title; ?></a><?php if($post_dsp) : echo $post_dsp . PHP_EOL; endif; ?>
      </h1>
    </article>
    </li>
    <?php
    //END 記事
    endforeach;//繰返し終了
    echo '</ul>'.PHP_EOL;
    wp_reset_postdata(); //クエリのリセット
    
    endif;
    endif;//have_posts( $args )
    ?>
    <?php the_title(); ?>

    これを、

    <?php echo get_the_title($post->ID); ?>

    こうしてみてはどうでしょうか。

    >> mura0403さん

    度々詳しい詳細をありがとうございます!
    こちらのコードを貼り付けてみましたが、やはり上手く動作しませんでした。

    わざわざ書いていただきまして、誠に感謝しております。
    また当方のような無知に色々アドバイスをしていただき、重ねてお礼申し上げます。

    >> x743さん

    この変更で解決しました!
    希望していた「新着情報」のみをピックアップして出力する事ができました!
    本当にありがとうございます^^

    *****

    この度は私のような無知な人間のお願いを聞いて下さり、誠にありがとうございました。
    コメントを下さった皆様に、多大なる感謝を申し上げます。

    これにてフォーラムを「解決済み」とさせていただきます。
    tomo_chocomint

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「【ほぼ出来ています】カスタムフィールドの記事タイトルが取得できない」には新たに返信することはできません。