HeadSpace2 SEOプラグインでArrayと表示される問題
HeadSpace2 SEOプラグインを使って物件を編集していると不具合が発生しているのを発見した。どんな不具合かというと、下の図のようにHeadSpaceの有力欄に”Array”という文字列が入力されているのである。
“Array”ということは何か複数の要素が登録されているのかと思いvar_dump()関数を使って中身を表示させることにした。
しかし、Arrayの中身は空文字であった。次に、なぜ”Array”という”文字列”が表示されるのだろうか?これを追ってみるとpage_title.phpのedit()メソッドに次のようなコードを発見した。
<tr> <th width="120"><?php _e ('Title separator', 'headspace'); ?>:</th> <td> <input class="text" type="text" name="separator" size="5" value="<?php echo esc_attr( $this->separator ) ?>"/> <span class="sub"><?php _e ('Leave blank to use theme default', 'headspace'); ?></span> </td> </tr>
どうやら、ワードプレスのesc_attr()という関数に配列を渡すと”Array”と表示されてしまうらしい。アクションやフィルタで修正するのは困難なようすだったので、直接プラグインのファイルを弄って直接修正することにした。
対象ファイルはheadspace2/modules/pageディレクトリの次の3つのファイルだ。
・page_title.php
・keywords.php
・description.php
これら3つのファイルに記載されているload()メソッドを下記のように修正することで不具合は解消された。
page_title.php
function load ($meta) { if (isset ($meta['page_title'])) $this->page_title = $meta['page_title']; // ↓↓↓ 追加したコード ↓↓↓ if($this->page_title == 'Array'){ $this->page_title = ''; }else if(is_array($this->page_title) && count($this->page_title) > 1){ $this->page_title = array_pop($this->page_title); } }
keywords.php
function load ($data) { if ((!$this->use_tags || !class_exists ('HSM_Tags')) && isset( $data['metakey']) ){ $this->metakey = $data['metakey']; } // ↓↓↓ 追加したコード ↓↓↓ if($this->metakey == 'Array'){ $this->metakey = ''; }else if(is_array($this->metakey) && count($this->metakey) > 1){ $this->metakey = array_pop($this->metakey); } }
description.php
function load ($meta) { // Extract settings from $meta and $options if (isset ($meta['description'])) $this->description = $meta['description']; // ↓↓↓ 追加したコード ↓↓↓ if($this->description == 'Array'){ $this->description = ''; }else if(is_array($this->description) && count($this->description) > 1){ $this->description = array_pop($this->description); } }
執筆者:カニ
正月といえばおもち。でもカロリーが高すぎてもう十何年は食べてないなー。
この記事へのコメントはありません。