月別アーカイブ: 12月 2016

プラグイン不要で投稿や固定ページでWordPress独自タグを使う!

別に固定ページ内に相対パスとか絶対パスでURL記述してもいいんですけど、
なんか気になるからWordPress独自タグ使おうって話です。

でも独自タグって固定ページじゃ使えないから、使えるようにfunction.phpに書いちゃおって話です。

function sc_bloginfo($atts, $content = null) {
extract(shortcode_atts(array(
'arg' => ''
), $atts));

return get_bloginfo($arg);
}

add_shortcode('bloginfo', 'sc_bloginfo');

あとはこういう感じで置き換え置き換え~ヽ(•̀ω•́ )ゝ✧

サイトのURL!

[bloginfo arg='url']

WordPressがインストールされてるURL!

[bloginfo arg='wpurl']

テンプレートのURL!

[bloginfo arg='template_url']

子テーマ化とかされてるときのテンプレートのURL!

[bloginfo arg='stylesheet_directory']

例としてこんな感じで使うよ。

<img src="[bloginfo arg='stylesheet_directory']/img/hogehoge.png" alt="" />

私は相対パスとか階層の把握がへたくそなので、これはとても重宝しています。
あとその辺気にしなくていいしカスタマイズ性も良いと思います(∩`ω´)⊃))

検索用文字列:ショートコード

h1画像をスラッグ名で判断して自動で出す

スラッグ名と同じ名前のh1画像を作れば
そのスラッグ名を取得して出力すればいいからいちいちページにファイル名を記述したりしなくていいよねって話。

でも階層が深いサイトにはオススメしないかな…
ページごとにh1画像作らなきゃいけなくなっちゃうので。
同じ画像がサーバーにいっぱいあるとか困るってことで、1ページに1ヘッダー画像なサイトにオススメ(・ω・)ノ

<?php
$page = get_post( get_the_ID() );
// 現在表示しているページの投稿IDから投稿情報を取得
$slug = $page->post_name;
// 投稿のスラッグを取得
?>
<h1><img src="<?php echo get_stylesheet_directory_uri() ?>/img/content/h1/<?php echo $slug; ?>.png" alt="<?php the_title(); ?>"></h1>

一枚の大きな背景画像をブラウザいっぱいに貼る!そして繰り返さない!

最近流行してる大きな画像をbodyに設定するやつ!
よくそういうデザイン作ってますが、単純に「background-size: cover;」 だと横は良いけど縦が繰り返す!
ってことで下のコードで固定されて安心安心

body {
background-color: #000;/* 見えちゃった時の保険 */
background-image: url("hogehoge.jpg");
background-size: cover;
background-attachment: fixed;
background-position: center center;
}

コンテンツのサイズに依存せず、下までサイドバーを伸ばすJSコード

上下が横100%のヘッダーフッターに挟まれた、縦長のメニューバーがあったんですよ。
本当はその縦長メニューバーの背景を常にフッターにくっつく形で伸ばしたくて、
しかも右側にメインコンテンツ(内容量不明)が入るってことで脆弱コーダーはてんやわんやでした。

とにかくそれが何故かコンテンツと同じ長さしか伸びなくて、グスグスしてたら
上司が「これ書いたよ」ってJSくれました!!!!
神か~~。.:*・゚ *ଘ(੭*ˊᵕˋ)੭* ੈ✩‧₊˚

でも何やってるか分からない(終了

<script type="text/javascript">
(function($){
function resizeSideMenu()
{
var windowHeight = $(window).outerHeight();
var documentHeight = $(document).outerHeight();
var baseHeight = (windowHeight < documentHeight)? documentHeight: windowHeight;
var h = baseHeight - $("#footer").outerHeight() - $("#branding").outerHeight();
$("#main").height( h );

$("#footer").css({"top":"0px"});
}

$(document).ready(function(){
resizeSideMenu();
});

$(window).resize(function(){
resizeSideMenu();
});

})(jQuery);
</script>

同じhtmlの構成にしないと汎用性ないかもね。

WordPressの管理バーが勝手にサイトトップにmarginを付与するのをやめる

WordPressにログインした状態でサイトを見ると上部に管理バー出ますよね。
その管理バーの高さ分、サイトのトップにmargin-top: ?pxって感じで強制的に付与されるのが嫌だったので
コールバックをfalseで返しました。(何故嫌かは後述)

これをfunctions.phpに書くだけです。

add_theme_support( 'admin-bar', array( 'callback' => '__return_false' ) );

WPサイトを構築するにあたって、ちょっとサイトの高さ制御をJSでやることになって、
それと上記の仕組みが競合しているのか表示がバグってしまったのです。

解決!

レスポンシブになってもGoogleマップのピンが中央に来るやり方

やっておくこと

  1. Google APIキーの取得(Google Maps Embed API)
  2. Google API Conslie で「Google Maps JavaScript API」の有効化※やっとかないと動かない
  3. head部分でAPIキーを読み込んでおく。
    <script src="//maps.google.com/maps/api/js?key=XXXXXXXXXXXXXXXXX"></script>

やることの流れ

  1. スタイルシートに追加
    div#googlemaps {
    width:100%;
    height:300px;
    position:relative;
    }

    横幅100%じゃ困るんじゃいって時!

    div#googlemaps {
    max-width:650px;/* 好きな数字に */
    height:300px;
    position:relative;
    }
  2. .jsファイルを用意gmap.jsとかにしてるよ。あとこれをheadで読み込んでね。
    function initialize() {
    var latlng = new google.maps.LatLng(35.681298, 139.7662469);
    var myOptions = {
    zoom: 18,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.LOADMAP,
    scrollwheel: false,
    disableDefaultUI: false,
    };
    var map = new google.maps.Map(document.getElementById('googlemaps'), myOptions);
    var lopanMarker = new google.maps.Marker({
    position: latlng,
    map: map,
    });
    google.maps.event.addDomListener(window, "resize", function() {
    var center = map.getCenter();
    google.maps.event.trigger(map, "resize");
    map.setCenter(center);
    });
    var styledMapOptions = { name: '東京駅' }
    }
    google.maps.event.addDomListener(window, 'load', initialize);

    参考:【Responsive Google Maps】ウィンドウをリサイズしてもピンが中央からズレないようにする方法

    マップのピン(マーカー)をオリジナルのにしたいぞい!って時はこれ。

    function initialize() {
    var latlng = new google.maps.LatLng(35.681298, 139.7662469);
    var myOptions = {
    zoom: 16,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.LOADMAP,
    scrollwheel: true,
    disableDefaultUI: false,
    };
    var map = new google.maps.Map(document.getElementById('googlemaps'), myOptions);
    var image = {
    url : '画像のURL',
    scaledSize : new google.maps.Size(60, 60)//任意のサイズで!
    }
    
    var lopanmarker = new google.maps.Marker({
    position: latlng,
    map : map,
    icon : image,
    title : "東京駅"
    });
    
    google.maps.event.addDomListener(window, "resize", function() {
    var center = map.getCenter();
    google.maps.event.trigger(map, "resize");
    map.setCenter(center);
    });
    var styledMapOptions = { name: '東京駅' }
    }
    google.maps.event.addDomListener(window, 'load', initialize);


    実際にマーカーの画像を作るときは「new google.maps.Size(60, 60)」の倍:120px*120pxで作る!
    その方が高解像度なスマホでも鮮明で綺麗!

  3. マップを置きたいところにdivタグを挿入
    <div id="googlemaps"></div>

    多分これでスマホで見てもブラウザのサイズをギュイギュイ変えてもピンがど真ん中に来るGoogleマップが作れているはずです。


なんか今はこんなことしなくてもスマホで中央寄せされるみたいですね。
良い世の中になったね。(2018/1/24)