Home > wordpress > [WP]投稿ページにオプションエリアを追加する

[WP]投稿ページにオプションエリアを追加する

タグとかカテゴリーみたいなクリックで開閉するオプションエリアを追加する方法について。
ページと同じくこれもテーマのfunction.phpで可能です。プラグインで作っても良い。

オプションエリアの表示

基本ソース

PHP:
  1. <?php
  2. add_action('edit_form_advanced', 'test_tab' );
  3. function test_tab(){ ?>
  4. <div id="test_tab" class="postbox <?php echo postbox_classes('test_tab', 'page'); ?>">
  5. <h3>Test Tab</h3>
  6. <div class="inside">
  7. <p>Test<p>
  8. </div>
  9. </div>
  10. <?php } ?>

edit_form_advancedで記事投稿、edit_page_formでページ作成のとき表示される。
postbox_classes($id,$page)はwp-admin/includes/post.phpの587行目あたりにある関数。
タブの初期開閉状態を操作するクラスを追加する。
引数は次の通りです。

  • $id Div要素につけたID
  • $page
    'page' ・・・ 常に開いた状態
    'post' ・・・ 開閉を記憶

サンプル

GoogleMapの座標を検索するタブ
function.phpにコピペで動きます多分。

PHP:
  1. <?php
  2. add_action('edit_form_advanced', 'gmap_tab' );
  3. add_action('edit_page_form', 'gmap_tab' );
  4. add_action('admin_head', 'gmap_tab_header');
  5. function gmap_tab(){ ?>
  6.     <div id="gmap_tab" class="postbox <?php echo postbox_classes('gmap_tab', 'page'); ?>">
  7.     <h3><?php _e('GoogleMap座標検索') ?></h3>
  8.     <div class="inside">
  9.         <p><label for="geoName">住所検索</label><input type="text" id="geoName" size="50" onfocus="this.select()">
  10.         <input type="button" value="検索" onClick="searchPoint()"></p>
  11.     <p><label for="show_xy">LatLng:</label><input type="text" id="show_xy" size="60" onfocus="this.select()" /></p>
  12.     <div id="googlemap"></div>
  13.     </div>
  14.     </div>
  15. <?php }
  16. function gmap_tab_header(){
  17.     $apikey =get_option('googlemaps_api_key');
  18.     $scriptname = $_SERVER['SCRIPT_NAME'];
  19.     if(preg_match("/post/",$scriptname)||preg_match("/page/",$scriptname)){
  20. ?>
  21. <script src="http://maps.google.com/maps?file=api&v=1&key=<?php echo $apikey;?>" type="text/javascript" charset="utf-8"></script>
  22. <style type="text/css">
  23. <!--
  24.     #googlemap {
  25.         width:100%;
  26.         height:300px;
  27.     }
  28. -->
  29. </style>
  30. <script type="text/javascript">
  31. //<![CDATA[
  32. var map;
  33. var xy;
  34. var center_point;
  35. var center_mark;
  36. window.onload = function (){
  37.  
  38.     if(!GBrowserIsCompatible()){
  39.         return;
  40.     }
  41.  
  42.     map = new GMap2(document.getElementById("googlemap"));
  43.     pos = new GLatLng(35.42322427979045,136.76058053970337);
  44.  
  45.     map.setCenter(pos, 15);
  46.     map.addControl(new GLargeMapControl());
  47.     map.addControl(new GOverviewMapControl(new GSize(180,140)));
  48.     map.enableDoubleClickZoom();
  49.     gGeo = new GClientGeocoder();
  50.     bounds = map.getBounds();
  51.    
  52.     xy = map.getCenter();
  53.     document.getElementById("show_xy").value =xy.lat()+","+xy.lng();
  54.     center_point = new GLatLng(xy.lat(), xy.lng());
  55.     center_mark = new GMarker(center_point);
  56.     map.addOverlay(center_mark);
  57.  
  58.     GEvent.addListener(map, 'moveend', function(){
  59.         var xy = map.getCenter();
  60.        
  61.         document.getElementById("show_xy").value = xy.lat()+","+xy.lng();
  62.                
  63.         map.removeOverlay(center_mark);
  64.         center_point = new GLatLng(xy.lat(), xy.lng());
  65.         center_mark = new GMarker(center_point);
  66.         map.addOverlay(center_mark);
  67.     });
  68. }
  69.  
  70. function searchPoint() {
  71.     var address = document.getElementById("geoName").value;
  72.     gGeo.getLatLng(address, checkGeo);
  73. }
  74. function checkGeo(point) {
  75.     if (!point)alert("見つかりませんでした");
  76.     else map.setCenter(point, 17);
  77. }
  78. </script>
  79. <?php }} ?>

add_meta_box()を使うと、詳細オプション下にタブを追加できます。

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Comments:2

チョッパー 08-07-06 (日) 23:07

最初の TestTab ですが、9行目に ? が抜けているみたいです。
4行目は page ではなく post の方がタブの開け閉めが記憶されるので便利です。

Tenderfeel 08-07-07 (月) 16:16

ばっちり抜けてましたね!ご指摘ありがとうございます。
引数の説明も足しつつ、サンプルのソースもちょっと変更しました。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://tenderfeel.xsrv.jp/wordpress/139/trackback/
Listed below are links to weblogs that reference
[WP]投稿ページにオプションエリアを追加する from WebTecNote

Home > wordpress > [WP]投稿ページにオプションエリアを追加する

最近の投稿
最近の修正
  • そしてこのSQLはわれながらよく書いたと思う 2010-11-15
  • CSVの列っていう方がいいのかな…118項目だった 2010-11-15
  • 楽天のCSVの項目が116個もあった衝撃 2010-11-15
  • オフィスで香水臭振りまくのは迷惑だと知れ 2010-11-15
  • ぐあー フレグランステロやー 2010-11-15
  • More updates...

Powered by Twitter Tools

Tag Cloud
おすすめサーバー・他
メタ情報

Return to page top