ホテルのWebサイトをMajesticというテンプレートで作ろうとした時に、ヘッダー部分が固定されてて「かっこいい〜」と採用したら、ページ内リンクでジャンプした時に、アンカー先の h3 テキストが ヘッダーの下に隠れてしまい、涙が出てきました。
テンプレートといえども、そんなんテメーでやれよと言われてる気がして頑張るしか無いなぁということで、調べたら、何種類か解決方法があったので、h3タグ内に aタグをいれて対応しました。
でも、記事作成時に、いちいち aタグ書くのが面倒に思えてきて、よーし、ショートコード造ったろうと燃え上がり、function.php を開いた瞬間に、アカン、アップデートしたら消えてしまう。
ということで、プラグインで造ったので、公開しときます。
最近はHHVMとプロキシキャッシュ使ってるので、プラグイン数が多少増えても大丈夫かなぁって考えてます。
まだ、荒削りなので、Ver 0.1 ということでよろしくお願いいたします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
<?php /* Plugin Name: YUNA Anchor Jump Shifter Plugin URI: http://www.churaumi.tv/plugin Description: position: fixed のページに <a href="#"> でジャンプ先した時にページをずらす Author: Shimpei Azuma Version: 0.1 Author URI: http://www.churaumi.tv */ $yajs = new CCCL098_ANCHORJUMPSHIFT_WPPL(); class CCCL098_ANCHORJUMPSHIFT_WPPL { private $anClass = 'ancShift'; //<- 将来使い予定のaタグ用CSSクラス名 private $shiftPx = 180; // <- ずらしたいピクセル数 public function __construct() { /* 有効にした時に引数で指定したファンクションを実行 */ if (function_exists('register_activation_hook')) { register_activation_hook(__FILE__, array(&$this, 'activation')); } /* 停止した時に引数で指定したファンクションを実行 */ if (function_exists('register_deactivation_hook')) { register_deactivation_hook(__FILE__, array(&$this, 'deactivation')); } /* アンインストールした時に引数で指定したファンクションを実行 */ if (function_exists('register_uninstall_hook')) { register_uninstall_hook(__FILE__, 'CCCL098_ANCHORJUMPSHIFT_uninstall' ); } add_shortcode('cp_h1a_cp', array(&$this, 'h1a')); add_shortcode('cp_h2a_cp', array(&$this, 'h2a')); add_shortcode('cp_h3a_cp', array(&$this, 'h3a')); add_shortcode('cp_h4a_cp', array(&$this, 'h4a')); add_shortcode('cp_h5a_cp', array(&$this, 'h5a')); add_shortcode('cp_h6a_cp', array(&$this, 'h6a')); add_filter('the_content', array(&$this, 'shortcode_empty_paragraph_fix')); } function activation() { /* 有効にした時の処理 */ } function deactivation() { /* 停止にした時の処理 */ } function h1a($atts, $content = '') { $sca = $this->parse_scatts($atts); return $this->html_sc('h1',$sca,$content); } function h2a($atts, $content = '') { $sca = $this->parse_scatts($atts); return $this->html_sc('h2',$sca,$content); } function h3a($atts, $content = '') { $sca = $this->parse_scatts($atts); return $this->html_sc('h3',$sca,$content); } function h4a($atts, $content = '') { $sca = $this->parse_scatts($atts); return $this->html_sc('h4',$sca,$content); } function h5a($atts, $content = '') { $sca = $this->parse_scatts($atts); return $this->html_sc('h5',$sca,$content); } function h6a($atts, $content = '') { $sca = $this->parse_scatts($atts); return $this->html_sc('h6',$sca,$content); } function parse_scatts($atts) { $scatts = shortcode_atts(array( 'id' => '', 'class' => '', ), $atts); $arr['aId'] = ''; if ($scatts['id'] != '') $arr['aId'] = ' id="'.$scatts['id'].'"'; $arr['hClass'] = ''; if ($scatts['class'] != '') $arr['hClass'] = ' class="'.$scatts['class'].'"'; $arr['aClass'] = ' style="padding-top: '.$this->shiftPx.'px; margin-top: -'.$this->shiftPx.'px;"'; return $arr; } function html_sc($tag,$sca,$cont) { return '<'.$tag.$sca['hClass'].'><a'.$sca['aId'].$sca['aClass'].'></a>'.$cont.'</'.$tag.'>'; } function shortcode_empty_paragraph_fix($content) { $array = array ( '<p>[cp_h' => '[cp_h', 'a_cp]</p>' => 'a_cp]', 'a_cp]<br />' => 'a_cp]' ); $content = strtr($content, $array); return $content; } } function CCCL098_ANCHORJUMPSHIFT_uninstall() { /* アンインストールにした時の処理 */ } ?> |
private $shiftPx = 180 を変更することでずらす量を変更できます。これで、ズレやかぶりを上手にコントロールして補正してください。
Ver 1.0になるころには、管理画面で入力できるようにしようかなぁ。
使用例は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[cp_h3a_cp id="semi-double-room"]セミダブルルーム[/cp_h3a_cp] //と記述すると <h3><a id="semi-double-room" style="padding-top: 180px; margin-top: -180px;">セミダブルルーム</a></h3> //と出力される [cp_h3a_cp id="twin-room" class="deco"]ツインルーム[/cp_h3a_cp] //と記述すると <h3 class="deco"><a id="twin-room" style="padding-top: 180px; margin-top: -180px;">ツインルーム</a></h3> //と出力される /* 使えるショートコード cp_h1a_cp // h1用 cp_h2a_cp // h2用 cp_h3a_cp // h3用 cp_h4a_cp // h4用 cp_h5a_cp // h5用 cp_h6a_cp // h6用 */ /* 注意事項 cp_h で始まる、 又は a_cp で終わる他のショートタグを併用した場合、 ショートコード前後に自動挿入される<p><br>が削除される */ |
いつもどおり免責ですが、このコードを使用した結果に関して、いかなる保証も行いませんのでご了承ください。
コメント