WordPressで何かをカスタマイズするときに通らなければならないのがテーマのfunctions.phpへの追記。一度失敗したことがある方なら分かると思いますが、このファイルはとっても重要で、間違ったコードなどを挿入するといきなり管理画面が真っ白、頭も真っ白になってしまう恐ろしいファイルです。
・・・といっても冷静にFTPなどでfunctions.phpをパソコンにダウンロードして間違ったものを削除したり修正したりして元の場所へ戻せば解決するのですが、頭が真っ白になってしまうと・・・って感じですよね??
幸いWordPressのバージョン4.9からこの状況を改善するプログラムが追加され、間違ったコードが入っている場合には更新されない(更新前にロールバックされる)ようになりました。これでひとまず真っ白現象は起きにくくなるので一安心なのですが・・・というのが今回の症状です。
行ったのはカスタムフィールドに入力した値を投稿一覧へ表示されるためのコードの追記
投稿一覧の項目を追加・削除・並び替える方法のページで紹介されているコードを使わせていただいたときのことです。
テーマのfunctions.phpへ挿入したコードは
//カラムを追加する
function my_columns($columns) {
$columns['customfield'] = "カスタムフィールド";
return $columns;
}
//カラムの表示内容を定義
//追加したカラムに「metaname」というカスタムフィールドの内容を表示させる
function add_column($column_name, $post_id) {
if( $column_name == 'customfield' ) {
$stitle = get_post_meta($post_id, 'metaname', true);
}
if ( isset($stitle) && $stitle ) {
echo attribute_escape($stitle);
} else {
echo __('None');
}
}
add_filter( 'manage_posts_columns', 'my_columns' );
add_action( 'manage_posts_custom_column', 'add_column', 10, 2 );
追加して、カスタムフィールド名を変更して更新。全く問題なく更新でき、投稿一覧を見たらきちんと「カスタムフィールド」という名前の列が追加され、そのフィールドに入力されている値が表示されました。
同じ目的のコードがいろいろなサイトで提供されていますけど、私にはコードの流れが一番分かりやすかったので使わせていただいたのですが・・最後に「カスタムフィールド」という列名を都合のいい名前に変更して更新したら、
PHP Parse error: syntax error, unexpected T_STRING in…php on line...
というエラーが発生して更新できない。何で~~???
このエラーが出る原因についてはteratailのPHP Parse error: syntax error, unexpected T_STRING inで同じような質問がされており、コードが間違っている可能性が指摘されていました。でも今回は「カスタムフィールド」という名前を別名にしただけ、断じてコードは間違ってないんです(動作確認もしましたからね)。
そして元の「カスタムフィールド」に戻してもエラーが消えないので、ちょっとイラついてエイヤーーーって何度か更新してたら今度は
何かが間違っているようです...
というエラーメッセージが出ました。これって・・・昔遭遇したような気が・・・そうです。便利になったと思われるコードの確認機能のバグというか不具合なんです。
試しにエラーが出た状態のfunctions.phpをダウンロードして名前を変更し、そのままアップロードしたら・・・正常に動作しました
でもサイト内のfunctions.phpの編集画面で再び他の文字列に変更すると・・・またまたエラー発生。
更にはこの「カスタムフィールド」という名前を半角英数字のもの「abc01」にしたらエラーは出ませんでした。
ここから推察できる結論はただ1つ、このエディタは日本語などのマルチバイト文字が苦手ということです。
すべてがこれに当てはまるわけではありませんが、コードが間違っていないと確信できるのであれば一度疑ってみてはどうでしょうか??
更新したりページ移動してはいけないときもある
今回はロールバック(エラーが出る前の状態)へ勝手に?戻ったときの内容なのですが、絶対にそのまま別ページへ移動してはいけないときがあります。それは、別ページ(ダッシュボードなど)へ移動しようとしたら警告画面が出たときです。
それでも移動する?留まる?という選択が出てくるので、大丈夫だろう・・・と移動すると、最悪の場合編集していた内容がすべて削除されてしまうことがあります。いろいろな警告メッセージがあるようですが、「致命的なエラーを回避するために送信に失敗しました」というのが出ることが多いです。ソースを更新するために今見えてる画面の内容をサーバー内へ送信できなかったということですからきちんと読めば納得の内容なのですが、ロールバックされるときのメッセージと同じでしょ!と勘違いすると大変なことになりますから注意してください。
もしも遭遇したら・・・
を参考に対処してみてくださいね。