WordPress制作、カスタマイズ、Webシステム開発とSEO対策

WordPressで子テーマのディレクトリURIを求める場合の関数

WordPressで、テーマのディレクトリを求める関数は、bloginfo()関数にこんな引数を入れると出てきます。

bloginfo(‘template_directory’);

使用例

<img src="<?php bloginfo('template_directory');?>/images/mainImg.jpg" />

出力ソース

<img src="http://sample.com/wp-content/themes/parent/images/mainImg.jpg" />

ただし、テーマを子テーマにして運用している場合、親テーマのディレクトリ名が出てきてしまいます。
そんな時は、次の専用関数を使います。

get_stylesheet_directory_uri()

使用例

<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/mainImg.jpg" />

出力ソース

<img src="http://sample.com/wp-content/themes/child/images/mainImg.jpg" />

厳密にはスタイルシート(style.css)のあるディレクトリのURIを取得する関数なんですが、これで子テーマのスタイルシートの場所が出力できるのでひとまず解決です。

ロリポップサーバーでWP Super Cacheが使えない場合の対処法

個人サーバーで人気のロリポップ!サーバーですが、プランにもよりますが意外とPHP負荷への判定が厳しいです。
個人向けプランで最上位プランの「チカッパ」プランでも、1日のアクセスが3000くらいのWordPressサイトを2つくらい動かすと、制限をかけられてしまう場合があります。

そんな時は、おなじみWP Super Cacheで負荷を軽減してやり過ごしてみましょう……あれ?
なんか動かない。

There’s been an error posting your Twitter status! Visit your WP to Twitter settings page to get more information and to clear this error message.

警告! Could not update /home/users/1/weblogy/web/public_html/wp-config.php! WPCACHEHOME must be set in config file.

警告! /home/users/1/weblogy/web/public_html/wp-content/advanced-cache.php がないか、更新できません。

  • 1. もしこのファイルがすでにあれば、まず最初にこのファイルを削除してください
  • 2. ftp やサーバーソフトウェアで chmod コマンドを使用して /home/users/1/weblogy/web/public_html/wp-content を書き込み可能にし、(chmod 777 /home/users/1/weblogy/web/public_html/wp-content) このページを再読込みします。これは一時的な処置で、この後、読み込みのみに再度する必要があります。(前述のコマンドで 777 を 755 に変更します)
  • 3. /home/users/1/weblogy/web/public_html/wp-content/advanced-cache.php を更新するためにこのページを再読込みします

もし動作しなければ /home/users/1/weblogy/web/public_html/wp-content/advanced-cache.php ファイルが存在するか確認してください:

  1. 1. テキストエディターで /home/users/1/weblogy/web/public_html/wp-content/plugins/wp-super-cache/advanced-cache.php$wp_cache_file を開きます
  2. 2. テキスト CACHEHOME/home/users/1/weblogy/web/public_html/wp-content/plugins/wp-super-cache/ に変更します
  3. 3. ファイルを保存し、/home/users/1/weblogy/web/public_html/wp-content/advanced-cache.php へコピーしてこのページを再読込みします

継続できません…前の問題を修正して再度お試しください。

案内の通り、wp-contentのパーミッションを777にしたのですが解決しない。advnced-cache.phpを見てみたりしたのですが、なんか説明と話が噛み合わない。

しばらく考えた結果、ロリポップ!の仕様でwp-config.phpのパーミッションが書き換えられていることを思い出しました。

wp-config.phpを書き込み可能にする

ロリポップ!は、昨年2013年に大規模なWordPressへのアタックを受けて、ユーザーサイトが改竄された経緯から、wp-config.phpを書き込み不可にする仕様になっています。

-r——– 1 LolipopUser 5119 Nov 10 23:29 wp-config.php
drwxr-xr-x 10 LolipopUser 4096 Nov 10 23:39 wp-content/

なるほど、400になっています。
これを

chmod 0644 wp-config.php
chmod 0777 wp-content

で一時的にパーミッションを変更し、上記WP Super Cacheの設定画面を再読み込みすると、WP Super Cacheがwp-config.phpを書き換え、wp-contentの中にキャッシュ用ディレクトリを作成し、インストールが完了します。それから、wp-config.phpとwp-contentのパーミッションを元に戻せばOKです。

chmod 0400 wp-config.php
chmod 0755 wp-content

WP to Twitter で投稿が失敗する際の原因と対策 (Code : Twitter did not return a recognized response code.)

私は運営するサービスでTwitter連携(WordPressに投稿したら自動的にTweetされるように)する時に、WP to Twitterというプラグインを使っています。Jetpackにもこの機能はあるんですけど、短縮URLが選べたり、ハッシュタグを付けられたりする自由度の高さでこちらを使用しています。

が、先日からうまく連携できなくなり、このようなエラーが表示されるようになりました。

One or more of your last posts has failed to send a status update to Twitter. The Tweet has been saved, and you can re-Tweet it at your leisure.

Code : Twitter did not return a recognized response code.

認証エラーではなく、クエリの失敗でもない

認証エラーではなさそうです。エラーメッセージを読んでみると、コードなし、「Twitterからは認識できるレスポンスコードが帰ってきませんでした」というエラーメッセージでした。

少し調べてみると、結構前にプラグイン作者のJoe Dolson氏がフォーラムで回答しているのを発見しました。

Joe Dolson
Member
Plugin Author
Posted 2 years ago #

Are either of you on Bluehost? Bluehost has a known issue with Twitter blocking some of their shared IP blocks at the moment. “Code 0″ means that the query isn’t successfully reaching Twitter, so Twitter is not returning any response — this is a common issue if your host is being blocked by Twitter.
WordPress › Support » [Plugin: WP to Twitter] Response code “0””

意訳:君たち、Bluehostを使ってない? Bluehostが共有IPがたまにTwitterからブロックされる既知の問題があるんだよ。「コード:0」は「クエリーがTwitterに到達しなかった」という意味ではなくて、「Twitterから何のレスポンスも帰ってこなかった」という意味なんだ。(これはホストサーバーがTwitterにブロックされた時の一般的な挙動だね)

共用サーバーがブロックされてしまったら

Bluehostというのはアメリカのメジャーなレンタルサーバーサービスです。つまり、共用サーバーでイタズラな使い方をしたユーザーがいて、TwitterからIPごとブロックされてしまった場合に起こるエラーということですね。
ホスティング会社が察知して、何らかの対応をとってTwitterのブロックが解除されるのを待つしかないようです。

制限解除まではJetpackを使うことにしましょう。
JetpackはAutomaticのサーバーから発信されるので、WordPressを動かしているサーバーの制約を受けないというのはこういう場合利点ですね。

ロリポップサーバーに大規模なWordPressハッキング発生中! これまでの情報まとめ

昨日(8月28日頃)から、日本の個人サイト界隈で大変な騒動になっています。

発端は、WordPressのフォーラムに投稿されたこんな質問。

サイトが急に文字化けになり、困っております;;
Hacked by Krad Xinと黒の上部ツールバーにあり、サイトが改ざんされてしまったのでしょうか?
WordPress › フォーラム » サイト改ざん?”

【ここまでのまとめ】

アドミンバーに犯行声明つきって、それってひょっとしなくても改竄されてますよね!
(さらに…)

Contact Form7 で送信後にページ遷移する

WordPressのメールフォーム実装に人気の国産プラグインContactForm7。
Ajaxで軽快に動いて便利です。

ところでこのプラグイン、
・確認画面を出さない
・送信後にページ遷移をしない
というのがデフォルトの挙動となっています。
これはこれでユーザビリティ思想として結構かとは思うんですが、実際の運用時には少し困ることがあります。

確認画面が出ないのはいいとして、送信後にページ遷移をさせるのはWeb広告やアクセス解析でコンバージョンを計るときには必須です。(お問い合わせの送信完了をイベントとしてログを取りたい時)

そんな時は、ContactForm7の編集画面の最下部、「その他の設定」の欄に次のコードを挿入します。

on_sent_ok: "window.location.href = 'http://example.net/entry/form/thankyou/';"

http…のところには、遷移したいサンキューページのURLを入力します。
これで、送信が成功したメッセージが表示された瞬間にサンキューページにリダイレクトさせることができます。