Published on

krc-cast-managerでキャストが表示されない問題

目次

以前krc-cast-manager(キャスト管理プラグイン)を使ったサイト制作について記事を書いていまして、それをみてくださった方がスケジュールページのキャストがなぜか表示されないとのことで、ご相談をいただいたので共有しようと思います。

krc-cast-managerのプラグインを最近使い始めました。

デモサイトを見たら凄く良い出来だったので、 ぜひアドバイスに乗っていただければと思いメールを送らせていただきました。

【スケジュールページ】作成で、固定ページにショートコード([scheduleshtml])を記載し、更新ボタンを押したら、 「失敗しました。 エラーメッセージ: 返答が正しい JSON レスポンスではありません。」とエラーが出ます。

ショートコードを記載するとエラーになるようです。

上記の状態でスケジュールページを確認したら、テーマによって表示されてたり表示されてなかったりします。

テーマ「Twenty Fifteen」では問題なく表示されてて、 「Lightning」や「BusinessPress」では1週間分のリンク(日付)は表示されてますが、出勤者の情報は全く出てません。 「Lightning」か「BusinessPress」をメインで使用したいと考えてるため、この事象は改善したいです。 お忙しいところ恐縮ですがお時間がございましたら、アドバイスしていだけましたら幸いです。

※キャスト個別ページでの出勤スケジュール(1週間分)など、他のところは問題なく表示されてます。 固定のスケジュールページだけ改善したいです。

そうですねえ、特定のテーマだけスケジュールページが思ったとおりに表示されないようでした。

まとめると以下2点になります。

  • エラーメッセージ: 返答が正しい JSON レスポンスではありません。とでる
  • スケジュールページのキャストがなぜか表示されない

このあと「返答が正しい JSON レスポンスではありません。」というエラーはクラシックエディタを導入したら直ったそうです。

そしてスケジュールページですが、最初テーマ特有の関数が干渉しているのかなと思いましたが違いました。

問題?となったコード

//スケジュール表示の部分
function outschedule($day) { //DBから該当の日付のデータを取得
global $wpdb;
$table_name = $wpdb->prefix . 'krc_schedules';
$schedules = $wpdb->get_var(
 $wpdb->prepare("SELECT work FROM $table_name WHERE day = %s AND status = %d", $day, 0)
);
$works = unserialize($schedules);
return  $works;  //配列にして返す
}

function schedulesHtml() { //ショートコードの中身
$day = isset($_GET["works"]) ? $_GET['works'] : date("Y-m-d");
$works = outschedule($day);
$len = 6; //+1

$week = array("日", "月", "火", "水", "木", "金", "土");
$w = date('w', strtotime($day));
echo '<header class="sub_h_header">';
echo '<h2 class="sub_h">' . date('n/j', strtotime($day));
echo '(' . $week[$w] . ')';
echo 'の出勤スケジュール</h2>';
echo '</header>';

echo '<nav class="krc_calendar clearfix"><ul>';
for ($i = 0; $i <= $len; $i++) {
 $yy = date('w', strtotime('+'.$i.' day'));
 $y = date('D', strtotime('+'.$i.' day'));
 if ( date('Y-m-d', strtotime('+'.$i.' day')) == $day ) $y = 'target';
 echo '<li class="' . mb_strtolower($y) . '"><a href="' . home_url( '/' )  . '/schedule/?works=' . date('Y-m-d', strtotime('+'.$i.' day')) . '">' . strtoupper(date('n/j(' . $week[$yy] . ')', strtotime('+'.$i.' day'))) . '</a></li>';
}
echo '</ul></nav>';

if (!$works) {
 //予定がない場合
 echo '<br>';
} else if ( $works !='rest' ) {
 echo '<div class="container"><div class="row">';
 //postid順に配列に入っているのでs_order順にした配列を作る
 $works_array = array();
 foreach($works as $id => $val){
  $works_array[$val["s_order"]] = $id;
 }
 ksort($works_array);
 foreach ($works_array as $rder => $id) {
  $args = array(
   'post_type' => 'cast',
   'post__in' => array($id),
  );
  query_posts($args);
  while ( have_posts() ) : the_post();
   set_query_var( 'work', $works[$id]);
   get_template_part('content',('castschedule'));
  endwhile;
  wp_reset_query();

 }
 echo '</div></div>';
} else {
 //休み
 echo '<br>';
}
}
add_shortcode('scheduleshtml', 'schedulesHtml'); //[scheduleshtml]というショートコードを作成

テンプレートが読み込まれていなかった

結論からいうと、get_template_part();で指定したページが存在しなかったからキャストが表示されなかったです。

この現象自体は特にエラーがでていなくて、どこかで処理が止まっているのかなとvar_dump();で確認していましたが、出勤するキャストのIDがとれていてループ直前まで問題なかったです。

となるとループの中に問題があることがわかり、get_template_part()が怪しい。

こちらの環境で適当にファイルを作って読み込ませたところ、表示された!

ということで、content-castschedule.phpは存在しますか?と確認したところ、ファイルがなかったようで、無事解決しました。

頭の中で処理を追っていくイメージがなかなか大変ですが、えここ抜けてたんか気づかなかったみたいなことはよくありますね。

よろしければこちらの記事もどうぞ。

https://melloblo.com/fuzokuhpcreate/