メモ:カスタムタクソノミーで作ったページのテンプレート名

カスタム投稿タイプを使い始めると必須ですね。メモメモ。

カスタム分類テンプレート

上にあるテンプレートほど優先順位が高いです。

  • taxonomy-{taxonomy}-{term}.php
    ※例えば分類名が “sometax”、スラッグが “someterm” の場合は taxonomy-sometax-someterm.php
  • taxonomy-{taxonomy}.php
    ※例えば分類名が “sometax” の場合は taxonomy-sometax.php
  • taxonomy.php
  • archive.php
  • index.php

テンプレート階層 – WordPress Codex 日本語版

WordPress:シングルページで前後の記事の有無を判定して条件分岐する。

単体記事のページで、次の記事、前の記事へのリンクを表示させることはよくあると思います。
表示させる方法を三つできてしまったので、せっかくなのでメモとして残しておきます。

たぶん一番基本的な書き方

<?php if(is_single()): ?>
<div class="pagelink">
    <?php next_post_link('<p class="pagenext">次の記事:%link</p>','%title',TRUE); ?>
    <?php previous_post_link('<p class="pageprev">前の記事:%link</p>','%title',TRUE); ?>
</div>
<?php endif; ?>

これが一番簡単そう。

前後の記事の有無を調べて条件分岐する

<?php if(is_single()): ?>
<div class="pagelink">
    <?php if (get_next_post()):?>
    <p class="pagenext">次の記事:<?php next_post_link('%link','%title',TRUE); ?></p>
<?php endif; ?>

<?php if (get_previous_post()):?>
    <p class="pageprev">前の記事:<?php previous_post_link('%link','%title',TRUE); ?></p>
<?php endif; ?>
</div>
<?php endif; ?>

get_next_post()とget_previous_post()は前後に記事があるかどうか判定するテンプレートタグです。もしリンクが無ければ何も出力しません。next_post_link()とprevious_post_link()の外に出したpタグも判定結果によって出力する、しないが変化します。パラメータにhtmlタグを記述しなくてもよいのですっきりして好ましいです。でも、ちょっとコードが長いなー。

まとめてみました

<?php if(is_single()): ?>
<div class="pagelink">
    <?php
        if (get_next_post()){
            echo '<p class="pagenext">',next_post_link('次の記事:%link','%title',TRUE),'</p>';
        }
        if (get_previous_post()){
            echo '<p class="pageprev">',previous_post_link('前の記事:%link','%title',TRUE),'</p>';
        }
    ?>
</div>
<?php endif; ?>

少しだけ短くなりました(^^;)。

以上、三つほどご紹介しましたが、自分の環境でテストした限りは全て同じ出力結果になりました。
ポイントとしては、出力するリンクにCSSで装飾するためのタグやクラスをどのようにして生成するか、前後に記事が無い場合にタグごと出力する、しないをコントロールすることができる、というところです。

おまけ:パラメータを見てみる

next_post_link()とprevious_post_link()のパラメータは、formatlinkin_same_catexcluded_categoriesとなってます。
実際に使用したコードは→
next_post_link(‘次の記事:%link’,’%title’,TRUE)
って感じです。

formatは文字列。前の記事:%link、次の記事:%link、と入れて次のパラメータで出力される文字列とくっつけました。

linkは一つ前のパラメータ、%linkに出力される内容を設定します。%titleがデフォルトで、記事のタイトルが表示されます。ここに前の記事、次の記事などの文字列も入れることができます。

in_same_catはFALSEがデフォルト。TRUEと入力すれば同じカテゴリーの記事でリンクが生成されます。

excluded_categoriesは表示させたくない記事のカテゴリーIDの番号だそうです。自分は使いませんでした。

参考:テンプレートタグ/next post link – WordPress Codex 日本語版
WordPressで前後記事が存在する場合のみリンク表示 – それからそれから
WordPressのシングルページで前後の投稿リンクを条件判定で出力するやり方 | bl6.jp

ありがとうございました!

WordPress:条件分岐。特定のページとその他のページでCSSを切り替える。

固定ページとそれ以外のページで異なるcssフィアルを適用させたいという場面が発生しました。
検索するといろいろとやり方はあるようですが、以下の「if-else文」でやってみました。

「if-else文」を入力してみる

以下のように内に記述します。

<link rel="stylesheet" type="text/css" href="<?php bloginfo('template_url'); ?>

<?php if (is_page()){ //固定ページかどうか判定。そうでなければスルー。
    echo'page.css'; //固定ページならpage.cssを出力する。
}   
else if(!is_page()){ //固定ページではないかどうか判定。つまり固定ページでない全てのphpファイルが該当する。
    echo'base.css'; //base.cssを出力する。
}?>

/ ">

固定ページなら

<link rel="stylesheet" type="text/css" href="テーマファイルのURL/css/page.css" />

固定ページ以外なら

<link rel="stylesheet" type="text/css" href="テーマファイルのURL/css/base.css" />

と出力されます。

is_page()が固定ページかどうかを判定する条件式。TRUE(当てはまる)ならpage.cssを出力しますが、FALSE(当てはまらない)なら出力しないで次のelse ifの条件式に進みます。

そこの条件式は!is_page() !がつくと~ではない場合TRUE(当てはまる)、この場合は固定ページではないページは全て当てはまる、と言う意味になります。

これで固定ページとそれ以外のページで分岐ができて、それぞれに適応させたいcssへのパスが出力されます。

ちょっと調べてみましたが、条件分岐はやりたい事や、やり方によっていろいろな書き方があるようです。以下のサイトさんは勉強になりました。

WordPressのテーマデザインでよく使うPHP構文、if-else文について | WordPress(ワードプレス)コミュニティ
もう覚えなくても大丈夫!?WordPressの条件分岐タグの使い方まとめ | Oxy notes

また、テンプレートファイルがたくさんあってそれぞれに異なるcssを当てたいときはfunctions.phpに追記する方法もあるようです。

WordPress:functions.phpでJSやCSSを一元管理する方法とバージョン表記を消す方法 | NxWorld

うーん、みんなすごいです!自分ももっと勉強して自在にWordpressを操れるようになりたいです!

「WordPress」文字数を制限してエントリーを投稿する方法+PHPの書き方

以下はエントリー一覧など、一定数の文字数の範囲で投稿を出力したいときなどに使える方法です。

<?php echo mb_substr(strip_tags($post-> post_content),0,200) ; ?>

これで投稿内容のうち、200文字までが表示されます。

では、なぜこれで文字数制限ができるのでしょうか?
気になったので調べて見ます。

関数と引数

まず、<?php ~ ?>の中身を見ていきます。

  • echo
  • mb_substr()
  • strip_tags()
  • $post-> post_content

の四つに分解してみます。echoを飛ばしてまず、mb_substr()から行きます。mb_substr()文字数を指定して文字列を取り出すphpの関数です。

続いて関数をよく見ると後ろに( )がついてます。その中にもいろいろと書かれていますね。ここには「引数」を記述します。引数とは

関数を実行するにあたり、「この情報を元に処理を行ってください」と、必要な情報(パラメータ)を関数に渡すための仕組み

です。文字数を制限して投稿した文章を取得するのには、三つの情報が必要です。

  • 投稿した文章
  • その投稿の何文字目から取り出すか
  • 何文字取り出すか

ですので引数を三つ渡します。この三つを( )の中に,で区切って入力します。

まず投稿した文章は$post-> post_contentで呼び出せるので、一番目の引数として使います。2番目の引数は”最初から”を意味する0を、3番目に200をいれます。組み立てると

mb_substr(strip_tags($post-> post_content),0,200);

となり、投稿文の0から200文字目までを取り出す指定ができます。strip_tags( )の説明が抜けてましたが、これは、

文字列からHTMLおよびPHPタグを取り除く

関数です。$post-> post_contentだけで投稿を取得した場合、投稿の中のhtmlのタグも取り出されます。タグが途切れて取得されるなどの不具合が起きる可能性があるので取り除くわけですね。

なのでstrip_tags( )の括弧に引数として入れて、htmlタグを取り除きます。そして最後の仕上げ、echoを使います。これは

取り出した文字列を表示させるための構文

です。取り出した文章は、echoを使うことによってブラウザに表示されます。これで完成です!

まとめ

このphp文は、

<?php echo mb_substr(strip_tags($post-> post_content),0,200) ; ?>

$post-> post_contentで取り出した投稿文から、strip_tags()でhtmlタグなどを取り除き、mb_substr()を使ってその投稿文の最初から200文字までを取り出し、echoを使ってブラウザに表示させる、という意味になります。

参考サイト

・WordPress文字数制限で記事を表示したい時 | UNIQUE-UNIQUE.net
・WordPress 覚書 文字出力時に制限と条件をかけて表示する | 3Bee.jp
・mb_substr:文字数を指定して文字列を取り出す
・Flash CS3入門 基本からActionScriptまで – 第7回 関数の便利な仕組み,「引数」と「戻り値」を理解する:ITpro
・strip_tags: 文字列から HTML および PHP タグを取り除く (String 関数) – PHPプロ!マニュアル
・文字列の出力(echo, print) – 文字列 – PHP入門

ありがとうございました!

WordPressでjQueryを使うときの手順まとめ。wp_enqueue_script()とwp_head()

WordPressでjQueryを設置するための手順を忘れないようにまとめておきます。

jQueryの設置の仕方はいくつか選択肢がある

  • jQueryを公式サイトよりダウンロードして任意のディリクトリに設置する。
  • WordPressに組み込まれているjQueryを使う。
  • Google AJAX Libraries API内のjQueryを使う。

(1)
WordPressなどCMSを使わない静的なサイトではjquery.jsをダウンロードして以下のようにhead要素に書いて設置します。

<script src="/任意のディリクトリ/jquery.js"></script>

(2)
しかし、WordPressはあらかじめ内部にjQueryが組み込まれています。下記のようにhead要素に記述すれば、簡単に呼びだすことができます。jquery.jsを公式サイトからダウンロードする必要はありません。…のはずなんですが…

<?php wp_enqueue_script('jquery'); ?>

(3)
実際には問題が発生してプラグインやJavaScriptが動作しない場合があるようです。自分の環境でもjQueryがうまく動きませんでした。詳しくはこちらのエントリーが参考になります。
別の手段としてGoogle AJAX Libraries API内のjQueryを使う方法をやってみます。

<?php wp_deregister_script('jquery'); wp_enqueue_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', array(), '1.7.2'); ?>

これに切り替えたところ、自前で書いたスクリプトがうまく動作してくれました。(※自分でjquery.jsを設置しても大丈夫だったかもしれませんが未検証です。)jQueryの設置はこれで大丈夫のようです。

※wp_enqueue_script()というテンプレートタグを使っておりますが、これはjQueryや自作jsファイル、プラグインを使う場合などに誤動作が起きないようサポートしてくれる仕組みのようです。これについては別にエントリーを書きたいと思います。

wp_head()を忘れずに

最後にの直前にwp_head()を記述します。これを書いたところに先ほどのwp_enqueue_script()を使って書いた内容が出力されます。

<head>
…
…
<?php wp_head(); ?>
</head>

まとめ:どの設置方法がベスト?

ダウンロードして設置する手間ひまや、jQueryのバージョン管理を考えるとGoogleを使うのが自分的にはベストのような気がします。(※jQueryのバージョンアップに自動的に対応するurlの書き方があるようです)環境によってベストなやり方を選択しましょう。

※以下のエントリーを参考にさせていただきました。ありがとうございました。

WordPressでjQueryを使うときに、問題なく動作させる為の基礎知識やTipsと、動かない場合の対処例 – かちびと.net

WordPress3.0の新機能「カスタムメニュー」

WordPress3.0以前には無かった機能「カスタムメニュー」について調べてみました。カテゴリや独立ページを組み合わせてリスト表示できる機能です。
使い方としては、ヘッダーの中に、独立ページとカテゴリを組み合わせてグローバルナビを表示させたいなどのときに、ダッシュボードから設定するだけで設置可能。変更もしやすいのでかなり使いやすいと思います。
この機能を使うにはテーマをカスタムメニューに対応したWP3.0用のソースコードに書き換える必要があるようですが、とりあえず簡単に使用可能にする手段を見つけたのでメモします。

1:functions.phpの中に、以下のコードを追記する。(functions.phpが無ければ作成する)

add_theme_support( 'menus' );

2:テーマの中でカスタムメニューを表示させたい位置に、以下のテンプレートタグを記入する。

<?php wp_nav_menu(); ?>

これでダッシュボードの外観>メニューから設定が可能になります。
設定の仕方は直感でなんとなくできそうな感じですが、Lovelog+*さんに設定方法が詳しく解説されています。

このカスタムメニューはとても便利だなーと思います。ちょうど今新しいテーマを作成中で、グローバルナビを作ろうとしていたので良いタイミングでこの機能を知ることができてとてもラッキー。あわせてWP3.0からの標準テーマ「Twenty Ten」には新しい機能が実装されているそうなので、これを勉強するといろいろ解りそうです。