サイト実装時に調べたことまとめ

まだ固定ページとか全部終わってないけど、作っている時に調べたこと(サイト)のまとめ。主にWordPress、というかPHPについて。ノンプログラマがやるとこうやって回り道することもあるけれど、それらを調べてる時間も本当に楽しい。

WordPress Codex 日本語版

WordPressの公式オンラインマニュアル。大抵のことはここを見れば載っている。はず。詳しく知りたいときは原文を見に行く。でも、それを言い訳にはしたくないけど、ノンプログラマは原文見たって翻訳見たって分からないものは分からない。

WordPressをカスタマイズするなら絶対覚えておきたいテンプレートファイルの使い方 | Webデザインレシピ

テンプレートファイルの役割とか基本的なことを知るのに良いまとめ。自分は仕事で元々ある静的なサイトをCMS化したりとかしてたので、ある程度はテンプレートファイルの仕組みを理解していたので、理解しやすかった。

WordPressでカテゴリ一覧リストの様にタグ一覧リストを表示する方法 | ale cole blog

カテゴリ一覧はwp_list_categories()という関数で出せるのだけど、タグ一覧を出す関数が無いっぽかったので、こちらの記事を参考にした。当サイトのサイドバーのタグ一覧は以下のコードでABC順で出力させている。

<h1>Tag</h1>
<ul>
    <?php
        $tagList = $wpdb->get_results($wpdb->prepare("
            SELECT t.term_id,t.name,t.slug,tt.count
            FROM $wpdb->terms AS t
            JOIN $wpdb->term_taxonomy AS tt
            USING(term_id)
            WHERE tt.taxonomy = 'post_tag'
            ORDER BY t.name ASC
        "));
        foreach ($tagList as $value) {
    ?>
    <li><a href="/tag/<?php echo $value->slug; ?>/"><?php echo $value->name . '<span class="post-count"><span class="paren">(</span>' . $value->count . '<span class="paren">)</span></span>'; ?></a></li>
    <?php } ?>
</ul>

How to Customize the Display of WordPress Archives in Your Sidebar | WPBeginner

月別一覧を「/yyyy/mm/」形式で出力させたかったのだけど、相当調べたつもりだけどうまくいかず、たどり着いたのがこの記事。なんとなくやってることは分かるのだけど、もっとスマートな方法がありそうな気がするので、詳しい説明は省く。当サイトのサイドバーの月別一覧を出力させているコードは以下。

<h1>Archive</h1>
<ul>
    <?php
        global $wpdb;
        $limit = 0;
        $year_prev = null;
        $months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC");
        foreach($months as $month) {
    ?>
    <li><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>/"><?php echo date("Y-m", mktime(0, 0, 0, $month->month, 1, $month->year)) . '<span class="post-count"><span class="paren">(</span>' . $month->post_count . '<span class="paren">)</span></span>'; ?></a></li>
    <?php } ?>
</ul>

ヘッダーバナー(画像)をトップページ(index)以外に表示させない方法(wordpress) – バングラデシュに愛の花を咲かせよう

こちらの記事を参考に、トップページ(http://simpleism.net/)以外ではtitle属性に「○○ | SimpleIsm」というように、タイトルとサイト名を出力するようにしている。普通にCodexを見れば分かりそうだけど、何も知らないのでとりあえず「WordPress トップ以外」というような検索の仕方をして、その時に出てきたこちらの記事を参考にさせていただいた。title属性は以下のようなコードを書いて出力させている。

<title>
    <?php if(!is_home()) { echo the_title() . ' | '; } ?>SimpleIsm
</title>

wp_list_categories() を使わずに get_terms() でカテゴリ一覧を表示する | MacBook Air とWordPressでこうなった

カテゴリ一覧を出力させるコードの参考にさせていただいた。この記事のあとにWordPress でカテゴリ一覧を取得する場合は get_terms() じゃなくて get_categories() を使った方がラクチンという記事を書いておられていて、確かにその通りなのだけど、rel属性が付加されて、その属性値(category tag)だとHTML5でinvalidになってしまう。WordPressのカテゴリーリストからrel属性をカットする | LD.ymst.net | 郡山市でホームページを制作している人のブログのコードをfunctions.phpに書くと消せるらしいけど、当時function.php(sが抜けてる)というファイル名で編集しており、全然反映されねー!ってなり、get_terms()で出力させている。パフォーマンスに影響を与えないのであれば、このままでいいかなと思っている。ちなみに、現時点で当サイトではfunctions.phpは使用していない。

<h1>Category</h1>
<ul>
    <?php
        $terms = get_categories();
        foreach ($terms as $term) {
    ?>
    <li><a href="<?php echo get_category_link($term->term_id); ?>"><?php echo $term->name . '<span class="post-count"><span class="paren">(</span>' . $term->count . '<span class="paren">)</span></span>'; ?></a></li>
    <?php } ?>
</ul>

WordPressで指定した固定ページを読み込む方法 | bl6.jp

固定ページ専用のsection要素のid属性を出力させるコードの参考に。

PHPでURLに対するfacebookのいいね!数とtwitterのtweet数を取得する « Just Another Life

各記事のソーシャルボタンをテキストベースで表示したかったため、参考にさせていただいた記事。

WordPressのタグをurlエンコード | Base Views

ソーシャルボタンのhref属性には記事のタイトルが入るのだけど、当然日本語などのマルチバイト文字が入ることもあり、それをエスケープするためのコードを書くときの参考にさせていただいた。

null判定や空文字判定からPHP関数の動きに気を付けることを学ぶ | 村式流 イッパシエンジニアへの道

PHPのisset,empty,is_null – モトクロスとプログラムと粉砕骨折と

ソーシャルボタンではてブのみ、ブックマークされていないと何も表示されないため、ブックマークされていないときでも”0″と表示されるようにしたかったので、そのときの参考にさせていただいた。

ちなみに、ブックマークされていないURL(file_get_contents(URL))をvar_dump($hoge)するとstring(0) ""という結果になる。で、これを”0″と表示させる判定は以下のどれがプログラマ的なのかを同僚に聞いてみた。

if($hoge == null) {
    echo "0";
}

if ($hoge == "") {
    echo "0";
}

if(empty($hoge)) {
    echo "0";
}

で、答えとしては明確に""を判定したいのなら、イコールを3つ使うのが一番厳密だけど、nullや数値型の0のときも”0″と表示したいなら、emptyで問題ないとのこと。全部まとめたのが以下のコード

<div class="social">
    <?php
        $get_twitter = 'http://urls.api.twitter.com/1/urls/count.json?url=' . get_permalink();
        $json = file_get_contents($get_twitter);
        $json = json_decode($json);
        $tweets = $json->{'count'}; //ツイート数

        $get_facebook = 'http://api.facebook.com/restserver.php?method=links.getStats&urls=' . get_permalink();
        $xml = file_get_contents($get_facebook);
        $xml = simplexml_load_string($xml);
        $likes = $xml->link_stat->like_count; //いいね!数

        $get_hatebu = 'http://api.b.st-hatena.com/entry.count?url=' . get_permalink();
        $hatebu = file_get_contents($get_hatebu); //はてなブックマーク数
        if(empty($hatebu)) {
            $hatebu = '0';
        }
    ?>
    <ul>
        <li class="twitter">
            <a href="http://twitter.com/share?text=<?php echo urlencode(the_title("","",0)) ?>&url=<?php the_permalink(); ?>" onclick="window.open(this.href,'window','toolbar=no,width=650,height=450');return false;">t</a>
            <span class="count"><?php echo $tweets ?></span>
        </li>
        <li class="facebook">
            <a href="http://www.facebook.com/sharer.php?u=<?php the_permalink(); ?>&t=<?php echo urlencode(the_title("","",0)) ?>" onclick="window.open(this.href,'window','toolbar=no,width=650,height=450');return false;">f</a>
            <span class="count"><?php echo $likes; ?></span>
        </li>
        <li class="hatena">
            <a href="http://b.hatena.ne.jp/add?mode=confirm&url=<?php the_permalink(); ?>&title=<?php echo urlencode(the_title("","",0)) ?>" onclick="window.open(this.href,'window','toolbar=no,width=510,height=500');return false;">B!</a>
            <span class="count"><?php echo $hatebu; ?></span>
        </li>
    </ul>
</div>

WordPress 記事ページが404エラーで表示されなくなった時の対処法 覚書 | ブログアフィリエイトとメルマガで稼ぐ アフィリエイト講座

タイトルの通り。助かった…。

以上が調べたことまとめ。301リダイレクトとかも調べたけど、それは今回は割愛。コードも冗長的で汚かったりするものもありそうだけど、まずは形にすることが大事だと思うので今のところはOK。調べてトライアンドエラーを繰り返してる間本当に楽しかった!やっぱこういうのだよなーと改めて思った。

それでは、このサイトを作った当時も書いていたけど、参考にさせていただいたサイト及び管理人の方々、どうもありがとうございました。

« »