タグ別アーカイブ: Google

WordPress で Google マップを使う (再挑戦)

以前に「Google マップを使う」を書きましたが、その後 WordPress も Google マップもずいぶん進化して、時代遅れになってしまいました。

意図してる使い方は次のようなものです。

  • 固定ページに位置情報を持たせる。その固定ページにマップが表示される
  • それらのインデックスとなるような、上記の各ページにリンクされたマークが表示された全体図が、別の固定ページがある

たとえば、会社案内のサイトで各支店ごとに固定ページを作り、それぞれに案内地図を掲載し、「支店一覧」の全体図が別にもうひとつある、というイメージです。Lightweight Google Maps はほぼ条件を満たしていますが、その便利な機能がこちらの思惑には合いませんでした。

ざっと探してみましたが、「固定ページに位置情報」というものはなかなかありません。そこで、固定ページではなく投稿に、というプラグイン RomeLuv Google Maps for WordPress を見つけたので、それを改変することにしました。

RomeLuv Google Maps for WordPress を改変

DIFF:
  1. --- romeluv-maps.php.orig
  2. +++ romeluv-maps.php
  3. @@ -51,6 +51,12 @@
  4.          'romeluv_maps_inner_custom_box',
  5.          'post'
  6.      );
  7. +    add_meta_box(
  8. +        'romeluv_maps_sectionid',
  9. +        __( 'Maps', 'romeluv_maps_textdomain' ),
  10. +        'romeluv_maps_inner_custom_box',
  11. +        'page'
  12. +    );
  13.    
  14.  }
  15.  
  16. @@ -361,6 +367,7 @@
  17.  }
  18.  
  19.  add_action('save_post', 'romeluv_maps_handle_savepost');
  20. +add_action('save_page', 'romeluv_maps_handle_savepost');
  21.  
  22.  
  23.  
  24. @@ -385,7 +392,7 @@
  25.          if ($romeluv_single_map_done) return $post_content_html; else $romeluv_single_map_done=TRUE;
  26.      
  27.      
  28. -       if (!is_single()) return $post_content_html;
  29. +       if (!is_single() && !is_page()) return $post_content_html;
  30.          //return "".$post_content_html;
  31.         global $wpdb,$post,$mapheight;
  32.         $savepost=$post;
  33. @@ -552,13 +559,25 @@
  34.      
  35.      global $wpdb,$post;
  36.      $savepost=$post;
  37. +
  38.      
  39. +    extract( shortcode_atts( array(
  40. +          'cat' => '', // category ID
  41. +       ), $atts ) );
  42. +       if (esc_attr($cat) == '') {
  43. +         if (isset($_GET[cat])) $get_cat = $_GET[cat];
  44. +       } else {
  45. +         $get_cat = esc_attr($cat);
  46. +       };
  47. +
  48. +
  49. +
  50.      ////query all the posts to display on the global map
  51.       $querystr = "
  52.         SELECT wposts.*
  53.         FROM $wpdb->posts wposts
  54.         WHERE  wposts.post_status = 'publish'
  55. -       AND wposts.post_type = 'post' ". $whereadditional ."
  56. +       AND (wposts.post_type = 'post' OR wposts.post_type = 'page') ". $whereadditional ."
  57.         ORDER BY wposts.post_date DESC
  58.      ";
  59.      //echo $querystr; //useful for debugging your custom query
  60. @@ -571,9 +590,7 @@
  61.      
  62.      if ($result_posts):
  63.      
  64. -    if (isset($_GET[cat]))  echo '<h3 id="map-category-heading">'.get_cat_name($_GET[cat]).'</h3>';
  65. -   
  66. -   
  67. +    if (isset($get_cat))  echo '<h3 id="map-category-heading">'.get_cat_name($get_cat).'</h3>';
  68.      
  69.      $mapwidth=get_option('global_romeluv_mapwidth');
  70.      $mapheight=get_option('global_romeluv_mapheight');
  71. @@ -614,7 +631,7 @@
  72.                            
  73.                               $count++; 
  74.                            
  75. -                           if (isset($_GET[cat])) if (!in_category($_GET[cat],$post->ID)) continue; //this allows category filtering adding the $_GET parameter ?cat=xx
  76. +                           if (isset($get_cat)) if (!in_category($get_cat,$post->ID)) continue; //this allows category filtering adding the $_GET parameter ?cat=xx
  77.                            
  78.                             if (is_category()) { if (!in_category($cat_ID,$post->ID)) continue;  }   //skip posts if viewing a category page, if those do not match the current category

改変の内容は、

  • 固定ページの作成画面にも「Maps」の入力欄を表示する
  • 全体図の出力の際に固定ページも対象にする
  • 全体図を出力するショートコード [GLOBALMAP] に、オプションcat を追加する

です。この最後の項目は次のような事情です。

このプラグインのオリジナル版では、全体図を表示させるには、固定ページでショートコード [GLOBALMAP] を用います。特定のカテゴリーに属する投稿だけを全体図に表示するという絞り込みができます。その方法は、カテゴリーの ID をパラメータで付加して、http://www.example.com/map?cat=6 のような形で、全体図のページを呼ぶようにします。

しかし、WordPress 標準のメニュー機能でこのような形式のリンクを作る方法が思い浮かびません。そこで、むしろ複数の全体図のページを用意することにして(たとえば http://www.example.com/map1 と http://www.example.com/map6)、それぞれのページでのショートコードにオプションでカテゴリー ID を付けるようにしました(たとえば [GLOBALMAP cat="1"][GLOBALMAP cat="6"])

さて、ここでは固定ページに位置情報を付加して、全体図を作ることを想定しています。すると固定ページにもカテゴリーが設定されていないと、上記の絞り込みができません。テーマの functions.php か何かで

PHP:
  1. function add_category_to_page() {
  2.     register_taxonomy_for_object_type('category', 'page');
  3. }
  4. add_action('init', 'add_category_to_page');

とやって、固定ページにもカテゴリーを設定できるようにしておく必要があります。

twentyeleven で Google マップが壊れる

実際に使用してみると、表示される地図が微妙に壊れていました。タイルの継ぎ目が合わずに道や川がずれているような感じになります。はじめ、自分が使っているブラウザか何かの環境のせいかと思って、いろいろ調べましたがわかりません。ようやく、テーマ twentyeleven にすると壊れて、twentyten にすると正常に表示されることに気がつきました。それから今度は twentyeleven のスタイルシートのどの記述が影響しているのか順に見ていき、ついに imgmax-width が付いているとこの現象が起こることがわかりました。これだけで随分と時間を費やしました。

このプラグインの影響下の img のみ max-width を解除するため、

CSS:
  1. div#romeluv-global-map img,
  2. div#single-post-map img {
  3.         max-width: none;
  4. }

をスタイルシートに書いて、解決しました。

Inline Google Maps Plugin改

[[http://blog.macfeeling.com/archives/2239|MacFeling]]で紹介されているのを見つけて、 [[http://pasero.net/~mako/blog/s/35#inline_google_maps_plugin|先日書いたinline google maps plugin]]---WordPressの個々の記事やページにGoogleマップを置ける---の「ひとつの地図にひとつのマーク」という制約を改造して、複数のマークを置けるようにしてみた。書式の互換性がなくなってしまったので、ファイル名を gmaps-hm.php と変えておいた。 * [[http://pasero.net/~mako/blog/gmaps-hm/|gmaps-hm]] オリジナルのほうは「ひとつの地図にひとつのマーク」をより便利に使えるように [[http://macdiggs.com/index.php/2006/10/13/inline-google-maps-for-wordpress-version-2/|v2.0]]へと進化しているが、こちらは v1.1改。 [gmap name='20061015' lat='38.27501322074987' lng='140.83431959152222' zoom='12'] [gmark lat='38.27501322074987' lng='140.83431959152222' desc='ひとつの場所' label='P'] [gmark lat='38.281717' lng='140.869314' desc='もうひとつの場所' label='Q'] [/gmap] === WP-SimpleGmaps ==== 似たようなプラグイン [[http://aoina.com/archives/45|WP-SimpleGmaps]]というのを見つけた。でもこれもひとつの地図にひとつのマークのようだ。

Google マップを使う

WordPress でGoogle マップを使ってみる。

Plug 'n' Play Google Map

新しい版はPlug 'n' Play Google Map。旧版の日本語の解説がある

マップ型の目次といった使い方になるのか。このサイトのマップ

記事だけでなく、(静的)ページのマークも地図に載るように改造した1)

ついでに、ページのマークは「アルファベット付」マークになるようにした。Tutorialのソースを参考に切り貼り。印刷時にもアルファベット付マークになるように printImagemozPrintImage も設定するようにした。印刷用のマーク(例: "A")は


http://www.google.com/mapfiles/markerAie.gif


http://www.google.com/mapfiles/markerAff.gif

とか言う名前であった。

Inline Google Maps Plugin

“目次”マップではなく、個々の記事にマップを貼りたい。wp-dokuwikiプラグインに付属しているはずなのだが、うまく動かない。

Inline Google Maps Plugin というのがあった。これは簡単そう。

[gmap name='20061007' lat='38.27501322074987' lng='140.83431959152222' zoom='12' desc='プラグインのテスト']
[gmark lat='38.27501322074987' lng='140.83431959152222' desc='プラグインのテスト']
[/gmap]

ひとつのマップにひとつのマークしか置くことができない。

コメントにあるように、当分はこのままらしい。


  1. (静的)ページにも緯度経度情報を入力できるようにGeo プラグインもちょっと改造した。