後から知ることが多いWordPressお役立ちスニペット9つ

後から知ることが多いWordPressお役立ちスニペット9つ
12

WordPressを初めたばかりという人や、少し慣れてきたという人たちへ私が最初から知っていればなーという遠回りして得たスニペットをご紹介します!
あなたの知りたいことがあったら嬉しいです。

Webクリエイターボックス Manaさんの、
WordPressで困った時に役立つお助けコード8つ
の最後に「その他、みなさんが命拾いしたお助けコードがあればぜひ共有しましょう!」とあったので、何かないかなーと思ったんですけど…

困ったときという訳ではないんですが、知っていればちょっといいかもというスニペットを9つ程思いつきました!
私が初心者(今でもですけど)の時に「こんなの知らなかったよー」というものや、後からこうしたいんだけどなーという時に作ったコードです。
お役に立てれば嬉しいです!

1. 初心者さん向けのスニペット

まずはWordPressを始めたばかりの人へ、私が最初から知っていれば…と思ったことをご紹介します。

投稿画像のサイズは変えられます

WordPressは記事に画像を投稿するときにはサイズを選べますよね。
サムネイル、中サイズ、大サイズ、フルサイズっていうアレです。

デフォルトではサムネイルが150 x 150pxとか、中際サイズが300pxとかになっていますが、コレって変更できるのって知ってました?
私は結構後になって気付きました w

ダッシュボードの設定→メディアでサイズ変更が可能です。

カテゴリーの並び順を好きにしたいなら

カテゴリーリストを表示するテンプレートタグ、wp_list_categories
wp_list_categoriesタグでは自由にカテゴリーの順番を設定することはできません。
並び替えできるのはID順、アルファベット順、投稿数が多い順など。

フリーのブログサービスからの乗り換えた人は「えっ!何でっ!」って感じだと思いますが…
自分でなんとかしようとしても時間を浪費するだけでした w
(詳しくはテンプレートタグ:wp_list_categoryを参照してください。)

自由にカテゴリーを変更したいならCategory Orderというプラグインを使ってくださいね。

日付を英語表記にしたいなら

WordPress日本語版をインストールすると、嫌でも日付の月の表示が8月とか12月とか日本語になってしまいます。
カレンダーの曜日も同じように月、火、水…とやっぱり漢字。
これを英語、Jun、Aug、Fri、Sunのようにしてみます。

wp-content→languagsフォルダの中にja.po、ja.moという日本語用のファイルがあります。
moファイルはいじれないので、ja.poファイルをテキストエディタで開きます。
(バックアップを忘れずに!)

検索機能を使って(例えば日曜日)

msgid "Sunday"
msgstr "日曜日"

となっている部分を探して、

msgid "Sunday"
msgstr "Sun"

という様に変更。日曜日のカラーを赤くしたいなら、

msgid "Sunday"
msgstr "<span class='red'>Sun</span>"

という様に書き換えます。

書き替えが終わったら、poeditなどを使ってja.poをja.moに変換します。
アップロードすれば書き換えたところが反映されています。

注意)WordPressをアップデートするとja.po、ja.moファイルもアップデートされてしまうので元に戻ります。

日付を英語表記にしたいなら:関数編

上記の方法だとWordPressをアップデートしたときなどには元に戻ってしまいます。
なのでfunctions.phpに関数を定義する方がいいかも。

function encode_date($m){
     switch ($m) {
         case '1月':
             return 'Jun';
             break;
        case '2月':
             return 'Feb';
             break;
~ 省略 ~
 case '12月':
             return 'Dec';
             break;
        }
}

表示したいところには、

<?php $month = get_the_date('M') ?>
<?php echo encode_date($month); ?>

ビジュアルリッチエディターで失敗したくないなら

一見便利そうに見える投稿画面のビジュアルリッチエディターですが、ちょっと困ったところもあります。
私は普段、HTMLエディタの方ででブログを書いていますが、例えば<tag></tag>を書く時のエスケープ。
せっかくエスケープしても一度でもビジュアルリッチエディターを開いてしまうと、エスケープされずにもとに戻ってしまいます…orz

ビジュアルリッチエディターを使わないなら、失敗しちゃう前に使えなくしておきましょう。
ダッシュボード→ユーザー→あなたのプロフィールで「ビジュアルリッチエディターを使用しない」にチェックでOKです。

ローカルに複数のWordPressを入れたいなら

ふたつ目(複数)のWordPressをインストールする前に、wp-configファイルの「データベースの接頭語」を一意なものに変更すればOKです。

/**
 * WordPress データベーステーブルの接頭辞
 *
 * それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
 * インストールすることができます。半角英数字と下線のみを使用してください。
 */
$table_prefix  = 'wp2_';
/* ↑ wp3_,wp_4など */

2. ちょっと慣れてきた人向けのスニペット

ちょっとWordPressに慣れてきて、こうしたいんでけど…的なものをご紹介します。

トラックバック件数をコメント数を分けたいなら

WordPressではコメントもトラックバック(ピンバック)も同じコメントとして表示されてしまいますよね。
コメントとトラックバックを分けるコードはよく見かけるのですが、件数も分けたいところです。

functions.phpに以下を追加。SQLクエリを投げてコメントだけ取得しています。

function get_comment_only_number() {
    global $wpdb, $tablecomments, $post;
    $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND
comment_type NOT REGEXP '^(trackback|pingback)$' AND comment_approved = '1'");
    $cnt = count($comments);

    return $cnt;
}

comments.phpでコメント(件数も)とトラックバック(件数も)を分けて表示しています。

<?php if ($comments) : ?>
/* ↓追加、コメント件数取得 */
<?php $comments_cnt=get_comment_only_number(); ?>

/* コメントがない場合は見出しも表示しないので$strに代入 */
<?php $str='<h3 id="comments">'. $comments_cnt.'件のコメント!</h3>'.
    '<ol class="commentlist">'; ?>
    <?php $i=0; ?>
    <?php foreach ($comments as $comment) : ?>

    /* コメントだけ取得 */
    <?php $comment_type = get_comment_type(); ?>
    <?php if($comment_type == 'comment') { ?>

        /* コメントがあったら見出し表示 */
	<?php if($i==0){ echo $str; }; ?>
		<?php $i++; ?>
		<li id="comment-<?php comment_ID() ?>">
			/* ここにコメント */
		</li>

	<?php } else { $trackback = true; } ?>

	<?php endforeach; /* end for each comment */ ?>
	</ol>

    <?php if ($trackback == true) { ?>
        /* TB件数を取得 */
	<h2><?php echo get_comments_number()-$comments_cnt; ?>件のトラックバック</h2>
	<ol>
	<?php foreach ($comments as $comment) : ?>
            /* TB、PBを取得 */
	    <?php $comment_type = get_comment_type(); ?>
	    <?php if($comment_type != 'comment') { ?>
	    <li>
	    /* ここにトラックバック */
	    </li>
	    <?php } ?>
	<?php endforeach; ?>
	</ol>
<?php } ?>

 <?php else : // this is displayed if there are no comments so far ?>
/* 以下コメントフォーム */

コメントが表示されなくなった!?

comments.phpより前にsidebar.phpを前に持ってくるレイアウトではコメント、コメント投稿欄が表示されなくなってしまいます。
私のブログもこのレイアウトです。

これはsidebar.php読み込み時に必要な変数の値が改ざんされてしまうから。
なので別の配列を作って値を維持しておけばOKです。

single.php

<?php
/* get_sidebar()の直前 */
$global_var=array(
'wp_query' => $wp_query,
'withcomments' => $withcomments,
'post' => $post,
'wpdb' => $wpdb,
'id' => $id,
'comment' => $comment,
'user_login' => $user_login,
'user_ID' => $user_ID,
'user_identity' => $user_identity,
);?>

<?php get_sidebar(); ?>

<?php
/* comments_template() 直前 */
$wp_query = $global_var['wp_query'];
$withcomments = $global_var['withcomments'];
$post = $global_var['post'];
$wpdb = $global_var['wpdb'];
$id = $global_var['id'];
$comment = $global_var['comment'];
$user_login = $global_var['user_login'];
$user_ID = $global_var['user_ID'];
$user_identity = $global_var['user_identity'];
?>

<?php comments_template(); ?>

管理人のコメントだけスタイルを変えたいなら

この情報は古いです。
もっといい方法を教えて頂きました。

コメント欄で管理人(あなた)のコメントだけスタイルを変更します。
<?php foreach ($comments as $comment) : ?>の直後に以下を追加。

<?php $PostAuthor = false;
if($comment->comment_author_email == get_the_author_email()) {
$PostAuthor = true;}
elseif($comment->comment_author_email == 'your@email.com') {
$PostAuthor = true;} ?>

your@email.comの部分はあなたのWordPressプロフィールで使っているメールアドレスを入れてください。
(ユーザーの判断に一意なメルアドを利用しています。)
コメントリストの<li>タグを以下のように変更してクラスを付けます。

<li <?php if($PostAuthor) {echo "class='authorcomment' ";} ?>>

スタイルシートで装飾してくださいね。

追記:管理人のコメントだけスタイルを変えたいなら

コメント欄で教えて頂いたので追記させてください。(2010. 10/25)

WordPressにはcomment_class()というテンプレートタグがあって、これでコメントのクラスを自動で付けてくれます。
(実際に自分で書いて確認してみました。)

<li <?php comment_class(); ?>>

とするだけで、奇数行(odd)か偶数行(even)かとか、コメントの階層(depth-1など)もクラス付けしてくれます!
もちろんユーザー(bypostauthor , byuserなど)も。
こんな便利な関数があったとは…
WordPress Codex Template Tags/comment class

自分で指定したいクラスがある場合には、comment_class(‘clearfix’) みたいにパラメータを指定すればOKです。
comment_class() を使えば上記のようにハックしなくてもコメント欄のスタイルを変えられますね。

はてブの多い記事だけサイドバーに表示したいなら

人気の記事(コメントの多い記事)をサイドバーに表示するコードはよく見かけるのですが、はてなブックマークの多い記事が必ずしもコメントが多い記事とは限りません…orz

はてブのブログパーツを使えば済むんですけど、デザインにこだわりたい人にはおすすめです。
私もコレを思いつく前はセルフコメントして表示を調整してました(笑)

  1. 新しくカテゴリーFavoritesを新設します
  2. sidebar.phpに以下を追加
    <h4>はてブの多い記事</h4>
    <?php query_posts('showposts=5&category_name=Favorites'); ?>
        <ul>
    <?php while (have_posts()) : the_post(); ?>
        <li>
        <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php _e('Permanent link to'); ?> <?php the_title(); ?>"><?php the_title(); ?></a><br />
        <a class="hatena-bookmark-image" href="http://b.hatena.ne.jp/entry/<?php echo get_permalink($postid); ?>" target="_blank"><img src="http://b.hatena.ne.jp/entry/image/<?php echo get_permalink($postid); ?>" alt="<?php the_title();?>" title="<?php the_title();?>" /></a>
        </li>
    <?php endwhile;?>
    </ul>
  3. カテゴリー一覧を表示しているところを書き換える
    (カテゴリー:Favoritesを表示しないため)

    <?php wp_list_categories('exclude=Category_ID'); /* ?>

    Category_IDの部分は新設したFavoritesカテゴリーのIDに変更してください。

  4. はてブの多い記事(任意の記事)をカテゴリー:Favoritesに追加

もうお気づきだと思いますが、これは自分の選んだ任意の記事だけを表示するトリックです w
カテゴリー一覧には表示されない「Favorites」というカテゴリーの記事だけ表示しているだけです。
ひとつの記事を複数のカテゴリーに投稿できるWordPressならではの小技ですね。

コメントの多い記事だけ表示するのは過去記事:22のWordPressカスタマイズハック:サイドバーで使えるハックにコードがあります。

最後のはひっかけトリックでした…ごめんなさい!

follow me on twitterfollow me on twitter RSS feedStay up to date via RSS