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

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

ただいまの
回答率

90.50%

  • PHP

    22998questions

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

  • WordPress

    8481questions

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

Wordpress タブの切り替えができなくなった

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 242

Biocerveau

score 3

Wordpressを使用してサイト運営をしています。

テーマは、Adventure Toursの子テーマを使用しているのですが、ある時期からタブの切り替えができなくなりました。
(Itinerary, Location, Photosなどのタブをクリックしても切り替わらない)
イメージ説明

原因は、Wordpressのバージョンアップ(現在ver 4.9.8)によるものだと思われるのですが、バックアップを取らずにバージョンアップをしてしまったので、元にも戻せません・・・。

デバッグモードでチェックしてみると、Noticeが2件表示されました。

①Undefined offset : 0

該当するコード(2行目)↓

    $tabKeys = array_keys($tabs);
    $activeTabKey = $tabKeys[0];
  • emptyで配列が空かどうかを調べる
$tabKeys = array();
if (empty($tabKeys)) {
    echo "配列は空<br />";   
} else {
    echo "配列は空ではない<br />";
}


【実行結果】配列は空

  • var_dumpで$tabsの中身を調べる
    【実行結果】array(0){ }

ということは、

add_filter('adventure_tours_tour_tabs', 'adventure_tours_filter_tour_tabs', 10);
$tabs = apply_filters('adventure_tours_tour_tabs', array());    


そもそもは↑が機能していない??

②Trying to get property of non-object 

該当するコード(3行目)↓

   if (adventure_tours_check('tour_category_taxonomy_exists')) {
                        $taxonomy = 'tour_type';
                        $terms = get_the_terms($product->ID, $taxonomy);
  • is_nullで$productの中身を調べる
if (is_null ($product)) {
    echo 'NULL!' ;
}


【実行結果】NULL!
ということは、$poductが定義されていない・・・?

が、そもそもタブの切り替えができなくなったのが、以上のNoticeと関係あるのかはわかりません・・・

【追記】
気になる点は、

          echo '<li><a href="#itinerary" data-toggle="tab">Itinerary</a></li>';


の#itineraryの部分に、以下のような警告が出ています。
"This inseption checks unresolved anchor reference in HTML."

どなたかお力を貸していただければ幸いです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • FKM

    2019/03/15 21:03 編集

    そこは関係なさそうですね。とりあえずwarningをほったらかすのも何なので
    foreach ((Array) $array as $key => $value) {
    とでもしておけば、そこのエラーは出なくはなります。そもそもスライドショーは機能しているのかも気にはなりますけどね。

    あとは、回答者tukatter様の中で気になる部分があったので、そっちでレスを返します。

    キャンセル

  • cerfweb

    2019/03/16 06:49

    親テーマはアップデートされていますか?

    キャンセル

  • Biocerveau

    2019/03/18 18:17

    >FKMさん
    ありがとうございます。ご教示いただいたコードを追加してみます。
    なお、スライドショーは機能しています。

    >cerfwebさん
    コメントありがとうございます。
    親テーマはアップデートされていないようです。テーマの最新バージョンは3.5.7ですが、インストールされている親テーマは2.4.0になっています。

    キャンセル

回答 1

0

Wordpressは4.9.xですか?
対応しているのは4.9までみたいですね。

5.xbebo以降ならバージョンを戻す(バックアップがないんですよね)か
サポート待ちか自力で対処でしょうね。

まず、バックアップをとること。

DBにデータが存在するか。

何が不足しているのか調べる。

管理画面内で該当の情報が取得出来ているか。投稿とタクソノミーとタームの関連付がどうか。

データの管理方法が違う場合はデータの更新が必要になると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/03/11 18:14 編集

    回答ありがとうございます。
    Wordpressのバージョンは4.9.8です。

    まず、バックアップをとること。
    >次回バージョンアップするときのことですよね?

    DBにデータが存在するか。
    何が不足しているのか調べる。
    管理画面内で該当の情報が取得出来ているか。
    >確認方法がわかりません。とりあえず調べてみます。

    投稿とタクソノミーとタームの関連付がどうか。
    >これは問題なさそうです。

    投稿本文にNoticeに関して具体的に調べてみた結果を追記しました。

    キャンセル

  • 2019/03/11 19:47 編集

    >is_nullで$productの中身を調べる
    プロダクトということは、ツアーの商品のIDが取れていないのでは?
    WooCommerce のプラグインが有効化か、紐つくデータが存在しているか
    テーマフォルダのfunction.phpに定義されていないか
    WooCommerceの更新をされた場合は、取得方法が変更されている可能性もあります。
    バージョンまでは把握していませんので。他のテンプレートでも取得していないかなど。
    関連をみてあげるといいかもしれません。


    'adventure_tours_tour_tabs'もしくは、
    'adventure_tours_filter_tour_tabs'という
    function(関数)がfunction.phpにありませんか?
    こちらも処理内容をみてあげるといいかもしれません。

    キャンセル

  • 2019/03/12 23:59

    function.phpの中に、

    global $product;
    $acc_id = get_the_ID();
    $tourcity = pods('tour_city', $termid);

    if (adventure_tours_check('tour_city_taxonomy_exists')) {
    $taxonomy = 'tour_city';
    // $terms = get_the_terms($product->ID, $taxonomy);
    $terms = get_the_terms($product->get_id(), $taxonomy);
    とありました。

    本文に既述の
    if (adventure_tours_check('tour_category_taxonomy_exists')) {
    $taxonomy = 'tour_type';
    $terms = get_the_terms($product->ID, $taxonomy);
    の最後の行を$terms = get_the_terms($product->get_id(), $taxonomy);に差し替えたらいいですかね?

    キャンセル

  • 2019/03/13 00:04

    やってみましたが、ダメでした。
    最初のタブ(DETAIL)の中のコンテンツが表示されなくなってしまいました。

    キャンセル

  • 2019/03/13 19:08

    WooCommerce のバージョンは?有効ですか?

    adventure_tours_filter_tour_tabsの処理の中身は、
    global $product・・以降のソースでしょうか?

    $productの中身や使い方は正しいのか見てみましたか?
    echo $product->ID;
    echo $product->get_id();
    var_dump($product);
    中身はないと書かれていたので記述を変えても意味がないですよね。

    親テーマに元となるファイルなどはあるのでしょうか。

    キャンセル

  • 2019/03/13 22:52

    >WooCommerce のバージョンは?有効ですか?
    有効です。バージョンは3.0.3です。(他のプラグインとの関係で、3.0.X以上はバージョンアップできません。)

    >adventure_tours_filter_tour_tabsの処理の中身
    はこちらです↓
    function adventure_tours_filter_tour_tabs($tabs)
    {
    global $product;
    if (empty($product)) {
    return $tabs;
    }

    $tabs['description'] = array(
    'title' => esc_html__('Details', 'adventure-tours'),
    'priority' => 10,
    'top_section_callback' => 'adventure_tours_render_tab_description_top_section',
    'callback' => 'adventure_tours_render_tab_description',
    );

    $additionalTabs = vp_metabox('tour_tabs_meta.tabs');
    if ($additionalTabs) {
    foreach ($additionalTabs as $key => $tabFields) {
    $tabContent = apply_filters('the_content', $tabFields['content']);
    if ($tabContent) {
    $tabs['atab' . $key] = array(
    'title' => esc_html($tabFields['title']),
    'content' => $tabContent,
    );
    }
    }
    }
    (以下略)


    >$productの中身や使い方は正しいのか見てみましたか?
    見てみましたが、中身が見つかりません。。。
    もう一度よく探してみます。

    >中身はないと書かれていたので記述を変えても意味がないですよね。
    確かに、、、

    キャンセル

  • 2019/03/14 17:54

    >$terms = get_the_terms($product->ID, $taxonomy);
    この部分の$product->IDは本来何の値が入るべきなのか
    思いつきそうな値といえば、ページIDなどでしょうか。
    仮の値としてページIDなどの数字を入力してみて表示されるのか。
    という観点と、DBのデータもどのように
    登録されているのかを見てみることが大事です。

    キャンセル

  • 2019/03/15 19:10

    試しにWoocommerceのプロダクトIDを入れてみましたが、ブラウザにはメニュバーやタイトルを除き、何も表示されなくなってしまいました。

    DBはPhpMyAdminから見ればいいのでしょうか?

    キャンセル

  • 2019/03/15 20:02

    PhpMyAdminから見るといいです。
    真っ白というのは気になりますね。
    とりあえず戻しておくこと。なんで取得できないのでしょう。

    キャンセル

  • 2019/03/15 21:05

    横から失礼します。Productクラスのソースを公開することはできますでしょうか?

    キャンセル

  • 2019/03/15 21:17

    いろんな方向からお助けしてあげましょう。わたしも出来る範囲で調べてみます。

    キャンセル

  • 2019/03/15 21:31

    みなさんありがとうございます(T_T)

    >FKMさん
    productのクラスを探しているのですが、IDEの中で検索してもヒットしないのです・・
    class product {..... というのがどこかにあるはずですよね?

    >tukatterさん
    とりあえず戻しておきました。
    PhpMyAdmin、見てみます

    キャンセル

  • 2019/03/18 18:48

    tabs.phpのファイル内で一番最初に出てくるproductは、
    global $product;
    if (adventure_tours_check('tour_city_taxonomy_exists')) {
    $taxonomy = 'tour_city';
    // $terms = get_the_terms($product->ID, $taxonomy);
    $terms = wp_get_object_terms(get_the_ID(), $taxonomy, array('orderby' => 'term_order'));  
    〈以下略〉
    なのですが、冒頭の$productに、以下のような警告が出ています。
    "Unused local variable 'product'. The reference stored in the variable i snot used anywhere.
    - The value of the variable is not used anywhere or is overwritten immediately.
    - The reference stored in the variable is not used or is overwritten immediately.

    キャンセル

  • 2019/03/19 13:06

    そのタブの情報は、DBのどのデータに格納されていますか?
    ②のエラー部分の この記述をやめて
    $terms = get_the_terms($product->ID, $taxonomy);
    以下のように変更した場合情報は取得できるのですか?
    $terms = get_the_terms(get_the_ID(), $taxonomy);

    キャンセル

  • 2019/03/21 00:23

    PhpMyAdminにて、タブ情報を見つけることができませんでした。

    $terms = get_the_terms(get_the_ID(), $taxonomy);
    と変更すると、投稿ページのIDを取得できました。

    キャンセル

  • 2019/03/21 01:42

    取得出来たことでエラーが改善したのか
    何か課題があるのか 教えていただけますか。

    キャンセル

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

  • PHP

    22998questions

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

  • WordPress

    8481questions

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