antispambot()をショートコードで。
メールアドレスをスパムボットに収集されにくくするためのantispambot()関数を、投稿orページ内で使用するにあたり、従来はrunPHPやExecPHPを使用してきたけれど、それを「ショートコード」に置き換え。
以下の関数をwp-content/themes/使用中のテーマ/funcitions.php 内に挿入。
function antispambot_short($atts) {
extract(shortcode_atts(array(
’mail’ => ”,
’text’ => ‘クリックしてメーラーを起動’,
), $atts));
$mail = antispambot($mail);
return ’<a href=”mailto:’ .$mail . ‘”>’ .$text .’</a>’;
}
add_shortcode(’antispambot’, ‘antispambot_short’);
?>
あとは、投稿orページの本文で挿入したい部分に
のように記述すればOK。
企業サイトをWordPressで制作する場合、会社概要などにメールアドレスを記述することがあると思う。その時に、スパムボット対策でantispambot()でメールアドレスをHTMLエンティティ化するには、投稿orページ本文の中なので、上記プラグインを使用して本文内でPHPを実行すれば実現できる。が、これらのPHP実行プラグインはビジュアルエディタとバッティングするので、もしクライアントサイドでビジュアルエディタで編集するとPHPのコードが壊れて機能しなくなってしまう。
これをショートコード化すれば、(クライアントがその部分の記述を触らない限り)antispambotは使えるようになります。
メリークリスマス☆

登録ユーザーのみに閲覧制限。
登録ユーザーのみ閲覧可能にする方法は? WordPress Forum
auth_redirect()という関数があるんですね↓
http://codex.wordpress.org/Function_Reference/auth_redirect
ページ内にこの関数が設置されている場合、もしログインしてないとログイン画面にリダイレクトされるようです。そしてログイン後、そのページに自動的にリダイレクトされます。社内用やプライベートなサイト、会員制サイトなどに使えるでしょう。
あるいは、ページ内の部分的な制御なら以下の方法もあります。
—登録ユーザーかつログイン中のみ閲覧できるコンテンツ—
<?php endif; ?>
テーマフォルダ内にあるcomments.phpに使われている上の書き方を借りれば、ページ内のある特定の部分の閲覧制御もできますね。
【追記】
上の書き方だとちょっと不安になり、以前使った事があるコードを確認しました。でもこの時のWPは2.0.10です。参考になれば。
if (($current_user->id != 0) && ($user_ID != 0)) { ?>
—登録ユーザーかつログイン中のみ閲覧できるコンテンツ—
<?php } else { ?>
—閲覧にはログインが必要である旨のメッセージ—
<?php } ?>

記事をランダムに呼び出す。
実はquery_posts()にorderby=randという引数を与えるとランダムに記事を取得できることを忘れて(いや、知らずに;)、無駄なことをしてしまいました。ver2.5からはrandという値が使えるようになったんですね。
そのまま消すのももったいないので、いつかの何かのヒントのためにメモ。
まずはquery_posts()でランダムに記事を取得する方法。
(条件:カテゴリID=3に属する記事を5件、ランダムに取得)
—- 通常のループ —-
シンプルですねぇ。
■記事を1つだけ呼び出す場合
続きを読む »

2.6.xでカスタムフィールドが複製されるバグ。
カスタムフィールドを使用するプラグインは、場合によってキー&値のセットが複製されることがあるようです。
WordPress 2.6.x “Duplicate Custom Field” Issue alexking.org (2008/9/6)
2.6から備わった「Post Revisions」機能による影響のようですが、使用するプラグインが、記事を保存する時に実行されるsave_postというフックが持つ2つのパラメータの内、$postではなく$post_idを使っている場合に複製される問題が起きるようです。
記事のリビジョンは、リビジョン自体がオリジナルの記事とは別の$post_idを持っています。そしてそのリビジョンを保存する時に、オリジナルの記事を保存する時と同じsave_postというフックが実行されるため、$post_idというパラメーターを参照した時に「リビジョンの」$post_idを読み、結果「カスタムフィールドが未登録」と判断されて、追加されてしまうようです。
保存後その記事の編集画面を開くと、オリジナル記事に保存されたカスタムフィールドと各リビジョンに保存されたカスタムフィールドが同時に表示され、ダブって表示された状態になります。

本:WordPress2.5でつくる!最強のブログサイト
先週、予約してあったWordPress本が届いて、今週からようやくじっくり読み始めましたが、なかなか読み応えありますよ。
『WordPress2.5でつくる!最強のブログサイト』田中広将・志村俊朗 共著/ソーテック社
まず、内容が幅広い上に、初心者にもわかりやすい解説。
(順不同)
・ドメイン取得からDNSの設定
・インストール、画面構成の解説
・テーマとプラグインの基本
・テキストエディタの選び方、文字コードの問題
・CSSの書き方
・メール投稿で文字化けする原因
・携帯からの投稿
・PHPの基本
~関数のしくみ
~ループの動作解説(for、if~else)
~変数、配列の解説
・XAMPPを使ったローカルPCにWPを構築する方法
・phpMyAdminでのバックアップ
・WordPressを取り巻く環境、動作原理
など、これ1冊あればインストールからPHPでの拡張までWordPressに関することがひととおり理解できるのではないでしょうか。要所要所で有益なプラグインも紹介されています。
中級者以上には、プラグインの作成方法の解説もあります。
・フィルター、アクション、ショートコードの原理、開発のコツのようなetc.
他に
・poEditでのプラグインの翻訳
・PHPエラーのトラブルシューティング
なども。こういったことが、初心者にもわかるように丁寧な文章で解説されている印象です。中級者以上にも有益だと思います。WordPress 2.6がすでに出ていますが、基本的な構造は同じですので十分に役立つと思います。
今週末は自力でのプラグイン作成に挑戦してみようか?!とモチベーションが高まっているところです。

WordPress for iPhone リリース。
iPhone / iPod touch向けのApp(アプリケーション)がリリースされました。iTunes App Storeで無料でダウンロードできます。
■対象:
WordPress.com(ブログサービス)
または
WP 2.5.1以上
『WordPress for iPhone』 WordPress Publisher Blog(2008/7/22)

WordPress.orgの新しいテーマ/テンプレート配布場所
WordPress.org内にあらたにテーマ/テンプレートの配布場所ができたようです。
『Theme Directory』
—
以前からあるテーマ/テンプレートのダウンロードサイト↓
『Theme Viewer』

WordPress 2.6 リリース。
WordPress 2.6(英語) がリリースされました。
今、インストール中です(beta、RCは結局触れませんでした)。
WordPress 2.6 WordPress Blog (2008/7/15)
wordpress.org/development/2008/07/wordpress-26-tyner/
#ムービーの中に「どーもくん」がっっ!実は大ファンだったりする。
#関係ありませんが、コピー&ペーストができないiPhone、「Press This!」の仕組みを応用できない?
参考情報)

WordPress 2.6 beta
早くも(?)WordPressの2.6の機能が明らかになってきました。リリースは7月中旬の予定とのこと。すぐですね。すでにbeta 1のダウンロードができます。
—
「WordPress 2.6 Beta 1」boren.nu (2008/6/23)
boren.nu/archives/2008/06/23/wordpress-26-beta-1/
—
WordPressの主要開発者の一人、Ryan Boren氏の上記ブログ記事によれば、WP2.6は、2.5程の大きなリリースではないがいくつかの新機能があるようです。
- バージョニングシステム(Post Revisioning)
~記事ごとに複数のバージョンを持ち、複数のバージョン並べて違いをカラー分けして比べることができる。誤って重要なセンテンスを削除してしまった場合でも、過去バージョンに戻せる、など。(最近そういう相談をいただいたので何ともグッドタイミングな…) - Tumblrライクなクイックポスト機能
~「Press This」というブックマークをクリックして即座に投稿へ - adminページの静的ファイルを「Gears(Google Gears)」を利用してローカルにキャッシング
~管理画面のローディングをより速く - 新しい、そして改善された画像編集ダイアログ
~記事中の画像について豊富な調整機能を提供 - 「テーマ」のプレビュー機能
~「WordPress.com」で見られる機能 - 文字数カウント
~記事編集画面に内蔵 - リモート投稿機能を不可能にすることができる
~セキュリティ上の観点で - XML-RPC APIを変更可能
- admin画面のSSL化についてより良好なサポート
- admin>管理>ページ および カテゴリで階層を意識したページ分け
- コンテンツの保存場所を別の場所に移すことができる
- wp-config.phpファイルをウェブサイトのルートの外へ移動できる
~一般ユーザーからはアクセスできない場所へ - ドラッグ&ドロップで並べ替えできる「ギャラリー」機能
- 標準のアバターをカスタマイズできる
- プラグインの一括消去、有効化、無効化
- チェックボックスを、Shiftキーをホールドしながらクリックによる範囲選択
- TinyMCE 3.1.0.1(WYSIWYGエディタ)およびたくさんのバグフィクス
- jQuery 1.2.6 およびいくつかのパフォーマンスの改善
- jQuery UI 1.5
- たくさんのバグフィクスと機能改善
ということです。派手な機能の追加ではなく、堅実な内容で好感が持てますね。より一層「役に立つ道具」としての完成度を高めてくれそうです。

Google Chart APIで動的にグラフ生成
WordPress内のデータをGoogle Chart APIで動的にグラフ作成。
ふと急にGoogle Chart APIを使ってみたくなり、WordPress内のデータを使って動的にGoogle Chart APIでグラフを出力するテストをしてみた。
とりあえず、カテゴリごとの記事の割合をグラフにしてみる…こういう目的ならタグクラウドで十分な気もするけど、将来的に応用できそうなので、メモということで。
※先に言ってしまうと、Google Chart APIはまだ日本語対応が十分でなく、ひらがなとカタカナしか表示できません…しかもフォントも微妙。カテゴリースラッグにアルファベット入れてあれば下のコード内のnameの代わりにslagに差し替えて即使えます。

bbPress 0.9 リリース
WordPressから派生したフォーラムソフトウェア『bbPress』のver 0.9がリリースされました。
WordPress 2.5に合わせた互換性の改善がメインのようですが、新しいインストーラ、”新しいトピック”などRSSフィードの追加など新機能も追加されているようです。
bbPressは、WordPressのフォーラムにも使われているオープンソースのソフトウェアで、WordPressとの連携ができます。例えばユーザー情報の共有、ログイン状態の共有など。つまりWordPress側でログインしていると、bbPressでもログイン状態となります。Akismetによるスパム対策、プラグインによる機能追加もできます。

ウィジェット領域を2つ以上つくる
WordPressのウィジェット領域は、標準ではsidebar.php内の1カ所だけだが、index.phpやfooter.phpなど、その他のエリアにもウィジェット領域を持たせる。
■手順1:
テーマフォルダ/functions.php 3行目
これを
※数字は、ウィジェット領域の数

WordPress 2.5
WordPressの最新版、2.5の正式リリースが近々行なわれます。
ほんとは3/10の予定だったのが1週間延びて3/17の予定…
そしてついに開発サイドのブログが更新され、正式版ではないもののRC1(リリース候補)がダウンロードできるようになりました。
すでに基本的には開発完了、安定しているとのことですが、ここでさらにより広くフィードバックを得てから、正式版を一般公開したい、とのことです。
■管理画面がとにかくガラリとかわります

記事ごとに違うサイドバーを読込む。
※アクセスログの検索キーワードを参考に記事
WordPressサイトで、特定の記事ごとorカテゴリごとに違うサイドバーを読込む。
例)
会社概要のページ…記事IDが「1」とする
製品案内のページ…記事IDが「2」とする
→ sidebar-page.php
スタッフブログ(カテゴリ)…カテゴリIDが「3」とする
→ sidebar-blog.php
その他
→ sidebar.php
以上のように記事やカテゴリ毎に別のサイドバーを表示させるには?

検索結果の件数を表示
※アクセスログの検索キーワードをヒントに記事
WordPressの記事一覧(検索結果、カテゴリ一覧、トップページ等)にて、記事の件数を表示する。
■書式:
$wp_query->found_posts
■記述例:
<p>「<?php echo wp_specialchars($s, 1); ?>」の検索結果 <?php echo $wp_query->found_posts; ?> 件</p>
<?php while (have_posts()) : the_post(); ?>
—ループ—
<?php endwhile; ?>
■結果:

【追記】
wordpress 2.0系での記事件数表示

スパムボットに収集されないようにメールアドレスを公開
WordPressの関数antispambot()を使うと、メールアドレス収集ロボット(スパムメール目的)から保護しながら、メールアドレスをWebサイト上に記載できる。
しかし今、ver2.2のWPサイト上で試してみたところ、どうにも文字化けしてしまう。ver2.0.xではずっと問題なく使っていたんだけど…? 日本語を通す必要性はありませんね(笑) とりあえず「テスト」という文字列を放り込んだので。どうも別のことと勘違いしていたらしい。スミマセン。
antispambot()関数の使い方は以下の通り。
■書式:
または
<?php echo antispambot(get_the_author_email()); ?>
※投稿者のメールアドレスを表示
※the_author_emailだとantispambot()が機能する前に表示されてしまうので「get_」を使う

自分(Author)のコメントだけ背景色を変える。
WordPressのコメント欄についてのカスタマイズ。
■目的:
WordPressブログのコメント欄にて、ブログオーナー(記事のAuthor)が書いたコメントだけ、背景色(その他CSS)を変えて、他のコメンターと区別できるようにする。
■現状:
そのコメントが記事投稿者のものかどうか確認するには、そのコメント投稿者名と記事の投稿者名を照らし合わせる必要がある。

記事数に応じたアフィリエイト表示
WordPressに限らずブログなどの動的なWebページでは、本文とサイドバーのレイアウト上のアンバランスが生じることがよくありますね。それを軽減するためのTipsになれば。。
■目的:
カテゴリ一覧や検索結果などで記事数が少ない場合のみ、アドセンスやアフィリエイト広告を記事リストの最後に表示する。
■現状:
検索結果が1件しかなかった場合など、サイドバー側はひたすら長く続き、本文側は空白が続く、という見た目よろしくない状態。かといって、検索結果が少なかった場合を想定して本文側に広告を挿入すると、記事数が多かった場合には本文側が膨らむ…。

バナー広告管理:掲載期限付き
■目的:
WordPressのウィジェットを使って、バナー広告の管理を行う。
■現状:
1.原始的な方法)
テンプレートにバナー広告を直接張り込む
2.ありそうな方法)
テンプレート内にiframeを使って表示
3.WPならではの方法)
「ページ」機能で広告専用ページをつくり、query_postsで1件だけ呼び、CSSでwidthとheightを固定して、overflow:none; overflow:hidden;ですね汗…にする。
1と2は技術的には簡単だけれど、更新がめんどう、HTMLやPHPやFTPがわかる人でないと苦労するなどの問題が。うちでは今のところ3のページ機能を使って広告管理をしていますが、今回「ウィジェット」を使うことでさらに表示位置を管理画面から簡単に変えられるようになります。

最終更新日時を表示
■目的:
記事の投稿日ではなく、最終更新日時を表示する。
■現状:
通常の記事のループで使われる投稿日時のタグは、the_date() またはthe_time()。the_dateは、同じ日付の記事が複数ある場合は、最初の記事にしか日付が表示されない。その変わりに the_time(’Y/m/d’)とすれば各記事ごとに日時を表示できる。
では投稿日時ではなく、最終更新日時を表示したい時は?
