前提・実現したいこと
カスタム投稿タイプでページを作成したいです。
しかし、アクセスするとエラーが出てページの内容を表示できません。
この症状は「the thor」という特定のテーマだけで起こります。
発生している問題・エラーメッセージ
作成したカスタム投稿のURLにアクセスするとエラーが出ます。
Fatal error: Cannot redeclare current_crumb_tag() (previously declared in /home/www/fuga/wp-content/themes/the-thor/inc/front/breadcrumb.php:22) in /home/www/fuga/wp-content/themes/the-thor/inc/front/breadcrumb.php on line 22
該当のソースコード
子テーマのfunctions.phpに下記のコードを追加してカスタム投稿タイプの追加を行いました。
php
1function create_post_type() { 2 $exampleSupports = [ // supports のパラメータを設定する配列(初期値だと title と editor のみ投稿画面で使える) 3 'title', // 記事タイトル 4 'editor', // 記事本文 5 'thumbnail', // アイキャッチ画像 6 'revisions' // リビジョン 7 ]; 8 register_post_type( 'example', // カスタム投稿名 9 array( 10 'label' => 'テストカスタム投稿', // 管理画面の左メニューに表示されるテキスト 11 'public' => true, // 投稿タイプをパブリックにするか否か 12 'has_archive' => true, // アーカイブを有効にするか否か 13 'menu_position' => 5, // 管理画面上でどこに配置するか今回の場合は「投稿」の下に配置 14 'supports' => $exampleSupports // 投稿画面でどのmoduleを使うか的な設定 15 ) 16 ); 17} 18add_action( 'init', 'create_post_type' ); // アクションに上記関数をフックします
試したこと
・エラー内容について
該当ページに「Cannot redeclare current_crumb_tag()」というエラーがあることから、関数の重複を疑いました。
しかし、functions.phpに追記した関数名の「create_post_type」を別の文字に置き換えても結果は同じでした。
breadcrumb.php全体のコードは文字数オーバーになるので
ここには記載できませんでした。
###追加で試したこと1
hayato7様の回答をもとに、
親テーマの該当関数が定義されているファイルに
「if ( function_exists( 'current_crumb_tag' )」
のようなif文を追記しました。
php
1//breadcrumb.php 2 3//中略 4 5 6 if ( function_exists( 'current_crumb_tag' ) ) { 7 function current_crumb_tag( $current_permalink, $current_text = '', $args = array(), $current_class = 'breadcrumb__item breadcrumb__item-current' ) { 8 $args = wp_parse_args( $args ); 9 $args = ( object )$args; 10 $current_class = $current_class ? ' class="' . esc_attr( $current_class ) . '"': ''; 11 $start_anchor_tag = $current_permalink ? '<a href="' . $current_permalink . '">': ''; 12 $end_anchor_tag = $current_permalink ? '</a>' : ''; 13 $current_before = '<li' . $current_class . '>' . $start_anchor_tag . ''; 14 $current_crumb_tag = $current_text; 15 $current_after = '' . $end_anchor_tag . '</li>'; 16 if ( get_query_var( 'paged' ) ) { 17 if ( is_paged() || is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) { 18 $current_after = ' (ページ' . get_query_var( 'paged' ) . ')' . $current_after; 19 } 20 21 } elseif ( ( is_page() || is_single() ) && get_query_var( 'page' ) ) { 22 $current_after = ' (ページ' . get_query_var( 'page' ) . ')' . $current_after; 23 } 24 25 return $current_before . $current_crumb_tag . $current_after; 26 } 27 } 28 29//中略 30 31//元から書いてあっためちゃくちゃ長いif文の途中 32 } else { 33 $post_type_object = get_post_type_object( get_post_type() ); 34 $breadcrumb_html .= '<li' . $li_class . '><a href="' . get_post_type_archive_link( get_post_type() ) . '">' . $post_type_object->label . '</a></li>'; 35 $taxonomies = get_object_taxonomies( get_post_type() ); 36 $category_term = ''; 37 38 foreach ( $taxonomies as $taxonomy ) { 39 $taxonomy_obj = get_taxonomy( $taxonomy ); 40 if ( true == $taxonomy_obj->hierarchical ) { 41 $category_term = $taxonomy_obj; 42 break; 43 } 44 } 45 46 if ( $category_term ) { 47 $terms = get_the_terms( $post->ID, $category_term->name ); 48 49 if ( $terms ) { 50 if ( !$terms || is_wp_error( $terms ) ) 51 $terms = array(); 52 53 $terms = array_values( $terms ); 54 $term = $terms[ 0 ]; 55 56 if ( $term->parent != 0 ) { 57 $ancestors = array_reverse( get_ancestors( $term->term_id, $term->taxonomy ) ); 58 foreach ( $ancestors as $ancestor ) { 59 $breadcrumb_html .= '<li' . $li_class . '><a href="' . get_term_link( $ancestor, $term->taxonomy ) . '">' . get_term( $ancestor, $term->taxonomy )->name . '</a></li>'; 60 } 61 } 62 //156行目↓↓ 63 $breadcrumb_html .= '<li' . $li_class . '><a href="' . get_term_link( $term, $term->taxonomy ) . '">' . $term->name . '</a></li>'; 64 } 65 } 66 67 $breadcrumb_html .= current_crumb_tag( get_the_permalink( $single->ID ), get_the_title( $single->ID ) ); 68 } 69//中略
「breadcrumb.php on line 156」と末尾にあることから今度は同じファイルの156行目付近に何かあるのか探してみましたが、よくわかりませんでした。(上記に周辺コードも載せています)
関数名を定義する部分だけでなく、途中に登場する「$current_crumb_tag」にも何か処理を加えないといけないのでしょうか
補足情報(FW/ツールのバージョンなど)
・WordPress5.4.2
・PHP 7.3.18
・プラグインはすべて停止状態
有料テーマなのでサポートにも問い合わせていますが、回答が得られていない状態です・・・
どなたか知恵を貸していただけないでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/22 11:16
2020/06/22 12:25
2020/06/22 12:26
2020/06/22 15:24
2020/06/22 15:39