サポート » 使い方全般 » エラー:スマートカスタムフィールドが出力されません

  • 解決済 LUARCE

    (@luarce)


    お世話になります。
    お解りになられる方がいらっしゃいましたら
    お願いします、助けていただけませんでしょうか。

    お客様の環境でPHPエラーが出ました。
    フロントページに新着情報の一部を一覧して表示、それとは別に新着情報一覧ページを
    設けています。
    それが払い出しされません。

    以下、エラーログとなり、送っていただいたのですが、
    良くわかりません。
    [22-Jun-2017 07:41:37 UTC] PHP Warning: require_once(/www/*****省略******) [function.require-once]: failed to open stream: No such file or directory in /www/*****省略******/plugins/smart-custom-fields/classes/models/class.meta.php on line 48
    [22-Jun-2017 07:41:37 UTC] PHP Fatal error: require_once() [function.require]: Failed opening required ‘/www/*****省略******’ (include_path=’.:/php/includes:/usr/share/php:/usr/share/pear’) in /www/*****省略******/plugins/smart-custom-fields/classes/models/class.meta.php on line 48

    フロントページの画像出力辺りは以下のようなコードで書いてあります。

    <?php
    $args = array(
    'post_type' => 'topics',
    'posts_per_page'   => 3,
    'paged' => $paged,
    ); ?>
    
    <?php query_posts( $args ); ?>
    <?php if (have_posts()) : ?>
    
    <div id="topics-container">
    <ul>
    <?php while (have_posts()) : the_post();
    $title = post_custom('title');
    $date = post_custom('tp_date');
    $time = post_custom('tp_time');
    $place = post_custom('tp_place');
    $artist = post_custom('tp_artist');
    $event = mb_substr((post_custom('tp_event')),0,25);
    ?>
    <li>
    <div class="items clearfix">
    <figure class="thumb">
    <?php
    $product_id = SCF::get( 'image' );
    $image = get_post_meta($post->ID, 'image', true);
    echo wp_get_attachment_image($image, '100%');
    ?>
    <!-- .thumb --></figure>

    何かお気づきになられましたら、些細なことでも構いません、
    ご助言いただけませんでしょうか。

    非常に切迫しています。

    何卒よろしくお願い申し上げます。

15件の返信を表示中 - 1 - 15件目 (全27件中)
  • コード全体どうなってますか?
    長いようなら https://pastebin.com/ に貼ってください。

    トピック投稿者 LUARCE

    (@luarce)

    manbo 様

    お世話になります。
    さっそくのご返信ありがとうございます。
    本当にありがとうございます。

    コードは以下のようになっています。

    <?php
    
    /*
    Template Name: news
    */
    
    get_header(); ?>
    
    <div id="crumb">
    <div class="inner">
    <a href="<?php echo home_url() ?>/"><span>TOP</span></a>news 一覧
    </div><!-- .inner -->
    </div><!-- #crumb -->
    
    <div id="hero"  class="sub">
    <div class="inner">
    <img src="<?php echo get_stylesheet_directory_uri(); ?>/img/img-topics-mainvisual.jpg" alt=""/>
    <!-- .inner --></div>
    <div class="title-panel">
    <h1>news一覧</h1>
    <!-- .title-panel --></div>
    <!-- #hero --></div>
    
    <div class="wrap">
    <div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">
    
    <section id="NEWS">
    <div class="inner">
    <h2 class="headline-01">NEWS</h2>
    
    <?php
    $args = array(
    'post_type' => 'news',
    'posts_per_page'   => 10,
    'paged' => $paged,
    ); ?>
    
    <?php query_posts( $args ); ?>
    <?php if (have_posts()) : ?>
    
    <div id="page-guide">
    <?php 
    if ( have_posts() ) : 
      my_result_count();
      while ( have_posts() ) :
        the_post();
      endwhile;
    else :
    endif;
    ?>
    <!-- #page-guide --></div>
    
    <?php
      global $wp_rewrite;
      $paginate_base = get_pagenum_link(1);
      if(strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()){
      $paginate_format = '';
      $paginate_base = add_query_arg('paged','%#%');
      }
      else{
      $paginate_format = (substr($paginate_base,-1,1) == '/' ? '' : '/') .
      user_trailingslashit('page/%#%/','paged');;
      $paginate_base .= '%_%';
      }
      echo paginate_links(array(
      'base' => $paginate_base,
      'format' => $paginate_format,
      'total' => $wp_query->max_num_pages,
      'type'  => 'list', //ul liで出力
      'mid_size' => 1, //カレントページの前後
      'end_size' => 0,
      'current' => ($paged ? $paged : 1 ),
      'prev_text' => '<i class="fa fa-angle-double-left fa-lg" aria-hidden="true"></i>',
      'next_text' => '<i class="fa fa-angle-double-right fa-lg" aria-hidden="true"></i>',
      ));
      ?>
    
    <div id="news-container">
    <ul>
    <?php while (have_posts()) : the_post();
    $title = post_custom('title');
    $date = post_custom('tp_date');
    $time = post_custom('tp_time');
    $place = post_custom('tp_place');
    $people = post_custom('tp_people');
    $event = mb_substr((post_custom('tp_event')),0,25);
    ?>
    <li>
    <div class="items clearfix">
    <figure class="thumb">
    <?php
    $product_id = SCF::get( 'image' );
    $image = get_post_meta($post->ID, 'image', true);
    echo wp_get_attachment_image($image, '100%');
    ?>
    <!-- .thumb --></figure>
    
    <div class="item-box">
    <h3><span><?php the_title(); ?></span></h3>
    
    <div class="date">日時:<?php echo $date; ?></div>
    <div class="item-box-time">
    <?php foreach((array)$time as $var) { ?>
    <div class="time"><?php echo $var; ?></div>
    <?php } ?>
    <!-- item-box-time --></div>
    
    <div class="place">場所:<?php echo $place; ?></div>
    <div class="people">名前:<?php echo $people; ?></div>
    <div class="event">内容:<?php echo $event; ?>
    <p>・・・・・・・・・・・・</p><a href="<?php the_permalink(); ?>">詳しく見る</a>
    </div>
    <!-- item-box --></div>
    <!-- .items --></div>
    </li>
    <?php endwhile; ?>
    </ul>
    <?php else : ?>
    <div class="post">
    <h3>NEWSがありません</h3>
    </div>
    <?php endif; ?>
    <!-- .inner --></div>
    <!-- #topics-container --></div>
    <!-- #topics --></section>
    
    <div class="bottom-pagenation">
    <?php
      global $wp_rewrite;
      $paginate_base = get_pagenum_link(1);
      if(strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()){
      $paginate_format = '';
      $paginate_base = add_query_arg('paged','%#%');
      }
      else{
      $paginate_format = (substr($paginate_base,-1,1) == '/' ? '' : '/') .
      user_trailingslashit('page/%#%/','paged');;
      $paginate_base .= '%_%';
      }
      echo paginate_links(array(
      'base' => $paginate_base,
      'format' => $paginate_format,
      'total' => $wp_query->max_num_pages,
      'type'  => 'list', //ul liで出力
      'mid_size' => 1, //カレントページの前後
      'end_size' => 0,
      'current' => ($paged ? $paged : 1 ),
      'prev_text' => '<i class="fa fa-angle-double-left fa-lg" aria-hidden="true"></i>',
      'next_text' => '<i class="fa fa-angle-double-right fa-lg" aria-hidden="true"></i>',
      ));
      ?>
    <!-- .bottom-pagenation --></div>
    <a href="#page" id="btn-to-top"><img src="<?php echo get_stylesheet_directory_uri(); ?>/img/icon-totop.png"></a>
    </main><!-- #main -->
    </div><!-- #primary -->
    </div><!-- .wrap -->
    
    <?php get_footer();

    すみません、何卒よろしくお願い申し上げます。

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

    ぱっと見てですが$pagedが意味をなしてませんよ

    あ、一時間経ったので編集できませんでした。

    my_result_countはfunctions.phpとかで定義してるんでしょうね?
    特にエラーになりそうな部分は無いみたいですので、別の部分が問題になってませんか?

    トピック投稿者 LUARCE

    (@luarce)

    manbo 様

    おはようございます。
    お世話になります。

    昨日はコードを見ていただいてありがとうございました。
    途中になってしまいすみませんでした。

    エラーになりそうな部分がないという見解をいただき
    とてもうれしかったです。

    別の部分ということで、
    今朝、客先より連絡が来まして、

    ####

    /www/***お客様環境***/plugins/smart-custom-fields/classes/models/class.meta.php
    からのファイルパスの向け先が
    /www/***お客様環境***/wp-admin/includes/user.php
    へ向いているのですが、
    ※WordPress管理画面(wp-admin/ 配下)はテスト環境から先は払い出されません。
    ということで、向け先にファイルがないことになり、エラーになります。

    という事でPHPからのファイルの向け先を下記へ変更してください。

    マニュアルに記載がありますので、インクルードさせるファイル(includes/user.php)
    は下記ディレクトリ配下設置をお願いできますでしょうか。
    テーマ [WordPress ルート]/wp-contents/themes/
    プラグイン [WordPress ルート]/wp-contents/plugins/

    ####

    という内容だったんですが、
    意味が分かりませんで・・・苦戦しています。

    何となくお解りになられますでしょうか?
    宜しくお願い致します。

    向け先と書かれるのはパスだと思いますが、マニュアルにどの様な事が記されているのでしょうか?
    あと払い出しって何でしょう?

    最初に記していただいたエラーは単にファイルがありません、ということなのでコード以前にファイルが欠損している又はパスが通っていないのが原因でしょうかね?
    お客様環境なるものが一切見えないのでなんともかんとも・・・

    トピック投稿者 LUARCE

    (@luarce)

    manbo 様

    お世話になります。
    親身ご相談にのっていただきまして、
    本当にありがとうございます。

    お客様環境のことやマニュアルにつきましては
    守秘義務があり開示しちゃいけないらしく、
    本当にすみません。

    払い出し・・・データのことでしょうか・・・

    ただmanbo様のおっしゃられます通り、
    ファイルがないもしくはパスが通ってない
    ということだと思います。

    巻き込んでしまい、すみません。
    ありがとうございます。

    そもそもお客様環境でWordPressは普通に動作してるのですか?
    当該プラグイン以外のプラグインは問題なく動いてるのですか?
    もし当該プラグインだけ動いてないならデータベースを含め階層やパス、ファイルの有無を確認、またはプラグインの再インストール等を行うべきだと思いますが。

    こんにちは

    ※WordPress管理画面(wp-admin/ 配下)はテスト環境から先は払い出されません。

    「wp-admin ディレクトリをアクセス制限しているため、/wp-admin/includes/user.php ファイルにアクセスできません」ということでしょうか。
    Smart Custom Fields プラグインは、このファイルを読み込むためエラーが発生しているのではないでしょうか。
    user.php は、WordPress のコア ファイルなので移動することは難しいです。user.php へのアクセスを許可してもらうのがいいかと思います。

    トピック投稿者 LUARCE

    (@luarce)

    manbo 様
    ご返信ありがとうございます。
    動作ですが、テスト環境下では正常に動作するのですが、
    本番の環境になりますとエラーとなります。

    ishitaka 様
    お世話になります。
    ご考察誠にありがとうございます。

    おっしゃられる通りかもしれません。少し冷静になってきました。
    開発条件ですが、
    ・子テーマで行うこと
    ・wp-contents/themes/
    ・wp-contents/plugins/
     ※上記2つのディレクトリ以外は触らない。
    となっています。

    そのため、ローカルにあったWordPressからuser.phpファイルだけをthemesの
    中に移動し、パスを
    /wp-admin/includes/user.php
    ⇒ /wp-contents/themes/user.php
    にしてみました。

    そうしましたところ、開発環境下で本番と同じようになりました。

    ishitaka 様のおっしゃられます通り、
    「wp-admin ディレクトリをアクセス制限しているため、
    /wp-admin/includes/user.php ファイルにアクセスできない」
    ということがおぼろげに見えてきました。

    アクセス許可はいただけないと思います。
    というか、そういう仕様になっているのではないかと思います。

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

    ただ、不思議なことがあります。

    実は初めに各phpファイルの記述を疑ったのには理由がありまして、
    カスタム投稿タイプは2つ、当該プラグインをそのどちらにも使っている
    にも関わらず片方はちゃんと出力されているからなんです。

    記述もほぼ同じで、1つ違うこととして画像の仕様有無です。
    1つは画像を使ったニュースで、1つは画像を使わないイベントお知らせ!みたいな
    感じです。

    プラグインを変えないとダメなのでしょうか。

    もしくはプラグインをやめて自分でカスタムフィールドを
    定義するって難しいですか?

    繰り返し画像の入力が必要になります。

    すみません、ご教授何卒よろしくお願い申し上げます。

    コードで気になったのは、query_posts は非推奨のテンプレート タグということは置いとくとして、クエリーのリセットが抜けています。

    (省略)
    endif;
    wp_reset_query(); // <-追加
    ?>
    <!-- #page-guide --></div>
    (省略)

    WordPressからuser.phpファイルだけをthemesの中に移動し、

    WordPress のコア ファイルを移動することはお勧めできません。

    別のプラグインを使用するか、自前で作成するかは、LUARCE さんの判断ではないでしょうか。私にはどちらがいいのか判断できません。

    Smart Custom Fields の作者です。
    /wp-admin/includes/user.php の読み込みが拒否されているようですのでどうしても Smart Custom Fields を使うのであれば

    require_once( ABSPATH . '/wp-admin/includes/user.php' );
    

    の行をコメントアウトするしかないと思います。

    で、LUARCE さんの書き込みを見て再度コードを見直していたのですが、どうもこの読み込みは過去のバージョンでは必要だったものだけど現在のバージョンだと無くても良いような気がします(まだ未検証です
    後日検証してみて、削除しても問題無さそうであればアップデートかけて読み込み部分を削除したいと思います。
    (でももしやっぱりこの記述は必要、ということになればコメントアウトするしかないのかなと思います。アップデートが面倒になるのでオススメはしませんが…)

    トピック投稿者 LUARCE

    (@luarce)

    ishitaka 様

    お世話になります。
    ありがとうございます。

    query_postsが非推奨ということは分かっていたのですが、
    コードの書き換えができなくて、
    それもあって真っ先にプラグインでなく
    コードの見直しを考えました。

    もしかしたら今回の件も特に画像から先のコードが
    読まれていないようなので、
    そこも問題なのかと推察しています。

    本当に申し訳ありませんが、
    よろしければどのように上記のコードを書き直すのが
    どうかご教授いただけませんでしょうか?

    また、
    wp_reset_query(); // <-追加
    を今やってみたのですが、テスト環境で一覧が取得できなく
    なってしまいました。
    やはりquery_postsが問題なのでしょうか?

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

    wp_reset_query(); // <-追加
    を今やってみたのですが、テスト環境で一覧が取得できなく
    なってしまいました。

    すみません。勘違いしてしまいました。
    意図してクエリのリセットしていないようなので、query_posts のままでいいのではないでしょうか。

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

    (@luarce)

    Takashi Kitajima 様

    お世話になります。
    お騒がせしておりまして、大変申し訳ございません。
    先ほどは大変失礼いたしました。

    開発者様にご回答を頂くことができとてもありがたいです。
    本当にありがとうございます。

    まず、Smart Custom Fieldsをどうしても使いたい理由として、
    やはりループ入力とUIがとても分かりやすいこと、
    レスポンシブ対応しているためです。

    カスタムフィールドテンプレートも使ったのですが、
    ≪テンプレートを「読込」させなければならない≫
    という点、フォームUIの見た目が分かりにくい点で
    お客様には好印象ではありませんでした。

    そのためSmart Custom Fieldsでやはり
    実現したいです。

    それで、北島様にご教授いただきました通り
    コメントアウトしてみたのですが、
    やはり改善しませんでした。

    ただコメントアウトしたコードでもテスト環境下では
    エラーなく表示されていましたので、
    おっしゃられます通り無くても大丈夫なコード?
    なのかもしれません。

    また、上述してございますが、
    2つあるカスタム投稿タイプのどちらともSmart Custom Fieldsで
    入力フォームを定義しているのですが、
    画像を使わない方のポストからはうまく出力されているようなのです。

    流れとしては、一覧ページ(news)⇒詳細ページ(news/670)という
    流れになっていまして、

    一覧ページのnews ⇒ 表示されない
    詳細ページnews/670 ⇒ 画像の出力コードより先が表示されない

    こちらsingle-news.phpのコードになりますが、
    コードで言うところの

    <?php if(have_posts()): while(have_posts()):the_post();
    $title = post_custom('title');
    $category = post_custom('category');
    $date = post_custom('tp_date');
    $time = post_custom('tp_time');
    $place = post_custom('tp_place');
    $name = post_custom('tp_name');
    $event = post_custom('tp_event');
    ?> <!-- ループ開始 -->
    
    <section id="news" class="detail">
    <div class="inner">
    
    <h2 class="headline-01"><span><?php the_title(); ?></span></h2>
    
    <div class="entry-container clearfix">
    <div class="entry-status">
    <div class="date-status"><time datetime="<?php the_time('Y.m.d'); ?>"><?php the_time('Y.m.d'); ?></time><p class="status">公開</p></div>
    <?php if (get_the_modified_date('Y.n.j') != get_the_time('Y.n.j')) : ?>
    <div class="date-status"><time datetime="<?php the_modified_date('Y.m.d') ?>"><?php the_modified_date('Y.m.d') ?></time><p class="status">更新</p></div>
    <?php endif; ?>
    <!-- entry-status --></div>
    
    <div class="entry-category">
    <h3><?php echo $category; ?></h3>
    <!-- .entry-category --></div>
    <!-- entry-container --></div>
    
    <h4 class="headline-01"><span><?php echo $category; ?>詳細</span></h4>
    
    <div class="items clearfix">
    <div class="item-box">
    <div class="date">日時:<?php echo $date; ?></div>
    <div class="item-box-time">
    <?php foreach((array)$time as $var) { ?>
    <div class="time"><?php echo $var; ?></div>
    <?php } ?>
    <!-- item-box-time --></div>
    
    <div class="place">場所:<?php echo $place; ?></div>
    
    <div class="people">名前:<?php echo $name; ?></div>
    <div class="event">内容:<?php echo nl2br($event); ?></div>
    <!-- item-box --></div>
    <!-- .items --></div>
    
    ↑ news/670でここまでは表示されていました。
    ****************************************
    ⇃ ここからしたの部分が出力されていませんでした。
    
    <?php
    $repeat_group = SCF::get( 'image_group' );
    foreach ( $repeat_group as $fields ) {
    
    $size = "large"; // (thumbnail, medium, large, full or custom size)
    $image = wp_get_attachment_image_src( $fields['image'], $size );
    $alt = get_post_meta($fields['image'], '_wp_attachment_image_alt', true);
    $image_title = $fields['image']->post_title;
    ?>
    
    <div class="contents-container clearfix">
    <div class="catch-image">
    <!-- <a href="<//?php echo wp_get_attachment_url( $fields['image']); ?>"> -->
    <img src="<?php echo $image[0]; ?>" width="<?php echo $image[1]; ?>" height="<?php echo $image[2]; ?>" alt="<?php echo $fields['alt']; ?>" title="<?php echo $image_title; ?>" /><!-- </a>  -->
    <!-- .catch-image --></div>
    <div class="text"><p><?php echo nl2br($fields['image_description']); ?></p></div>
    <!-- contents-container --></div>
    <?php } ?>
    
    <!-- /.inner --></div>
    <!-- /#section --></section>
    <?php endwhile; endif; ?>
    

    という挙動になります。

    もしお気づきの点等ございましたらご指導いただけませんでしょうか。

    また、ご検証いただけるとのこと本当にありがたく思います反面、
    お手間をおかけしてしまいますことを心よりお詫び申し上げます。
    何卒よろしくお願い申し上げます。

15件の返信を表示中 - 1 - 15件目 (全27件中)
  • トピック「エラー:スマートカスタムフィールドが出力されません」には新たに返信することはできません。