EC-CUBE 2.13系で sitemap.php の出力編集方法
2018/04/11
⚠️投稿日または最終更新日から6年以上経過している内容です。
サーチコンソールからの通知で、今更ながら初めて気が付きました。 EC-CUBE が標準提供している sitemap.php に相応しくない URL が含まれているなんて...。 今回は 2.13.4 と 2.13.5 のカスタマイズになります。
http://net-info-square.com/2015/08/22/post-60/ 基本のやり方はググってみるとサクッと見つかりました。 ただしこちらは shopping だけだったので、ちょっと追記してみました。
/data/class_extends/page_extends/LC_Page_Sitemap_Ex.php
/**
* ブロック情報を取得する.
*
* @param string $where WHERE句
* @param array $arrVal WHERE句の値を格納した配列
* @return array $arrPageList ブロック情報
*/
public function getPageData($where = '', $arrVal = '')
{
$objQuery = SC_Query_Ex::getSingletonInstance(); // DB操作オブジェクト
$sql = ''; // データ取得SQL生成用
$arrPageList = array(); // データ取得用
// SQL生成(url と update_date 以外は不要?)
$sql .= ' SELECT';
$sql .= ' page_id'; // ページID
$sql .= ' ,page_name'; // 名称
$sql .= ' ,url'; // URL
$sql .= ' ,filename'; // ファイル名称
$sql .= ' ,header_chk '; // ヘッダー使用FLG
$sql .= ' ,footer_chk '; // フッター使用FLG
$sql .= ' ,author'; // authorタグ
$sql .= ' ,description'; // descriptionタグ
$sql .= ' ,keyword'; // keywordタグ
$sql .= ' ,update_url'; // 更新URL
$sql .= ' ,create_date'; // データ作成日
$sql .= ' ,update_date'; // データ更新日
$sql .= ' FROM ';
$sql .= ' dtb_pagelayout';
// where句の指定があれば追加
if ($where != '') {
// ↓↓↓書き換え <http://net-info-square.com/2015/08/22/post-60/>
// $sql .= ' WHERE ' . $where;
$sql .= ' WHERE NOT url LIKE \\'%shopping%\\' and NOT url LIKE \\'%entry%\\' and NOT url LIKE \\'%regist%\\' and NOT url LIKE \\'%mypage%\\' and NOT url LIKE \\'%cart%\\' and NOT url LIKE \\'%complete\\.php%\\' and ' . $where;
// ↑↑↑書き換え
}
$sql .= ' ORDER BY page_id';
$arrPageList = $objQuery->getAll($sql, $arrVal);
// URL にプロトコルの記載が無い場合、HTTP_URL を前置する。
foreach ($arrPageList as $key => $value) {
$arrPage =& $arrPageList[$key];
if (!preg_match('|^https?://|i', $arrPage['url'])) {
$arrPage['url'] = HTTP_URL . $arrPage['url'];
}
$arrPage['url'] = preg_replace('|/' . preg_quote(DIR_INDEX_FILE) . '$|', '/' . DIR_INDEX_PATH, $arrPage['url']);
}
unset($arrPage);
return $arrPageList;
}/data/class/pages/LC_Page_Sitemap.php ファイルに getPageData という関数があるので丸ごとコピーし、 /data/class_extends/page_extends/LC_Page_Sitemap_Ex.php にペースト。
$sql .= ' WHERE ' . $where;
のところに SQL を追記すると良いという具合です。
上記では、
- /shopping/ 購入処理
- /entry/ 会員登録
- /regist/ 会員登録関連
- /mypage/ マイページ
- /cart/ カート
- /complete.php なんらかの完了ページ を除外するようにしています。
これでサーチコンソールに怒られないかな?