[WordPress]さくらのレンタルサーバーでマルチサイト

さくらのレンタルサーバ(※VPSではない)の環境で、WordPressのマルチサイト機能を有効にした際のメモ。

前提条件

  • WordPress 3.9.2
  • さくらのレンタルサーバー:スタンダードプラン
  • マルチサイトはサブドメイン方式(例:example.com、hoge1.example.com、hoge2.example.com…)
  • example.comへのDNSの設定は実施済み
  • DNSでワイルドカードは使用しない(全てのサブドメインをWordPressに飛ばしたい訳じゃないから)

“[WordPress]さくらのレンタルサーバーでマルチサイト”の続きを読む

さくらインターネットでWordPressごとにデータベースを分ける方法

さくらインターネットのスタンダードプランでは現在、MySQLデータベースを合計20個まで作成可能ということで、一つのデータベースを参照している複数のWordPressの向け先を分けることにしました。その方法を書いておきたいと思います。

Wordpress自体にもエクスポート機能はありますが、これはプラグインによって生成されたテーブルまではエクスポートしてくれません。基本的な記事データのみです。例えば、アクセスログを取るようなプラグインを入れていた場合、そのデータは引き継がれません。一度プラグインを停止させ、再び有効化することでテーブルは作成されるでしょうが、データはまっさらになってしまいます。


なので今回はwordpressのエクスポート機能は使わずに、phpMyAdminのエクスポート機能を使う方法をご紹介します。この方法ならプラグインのデータもそのまま移動出来て手間も省けます。


“さくらインターネットでWordPressごとにデータベースを分ける方法”の続きを読む

レンタルサーバーについて考える

今日はレンタルサーバーについての記事を書きたいと思います。

レンタルサーバーとひとくくりに言っても、自由度の高いものから低いものまで様々。
また、お値段で言っても有料のものから無料のものまであって、どれが自分にあったレンタルサーバーなのか迷ってしまいますよね。
“レンタルサーバーについて考える”の続きを読む

解決:WordPressでトラックバックが送信できない

WordPressでトラックバックが送信できないの記事の続きです。

あれからコードを追って、ネックになっている場所を突き止めました。
んで、たぶん解決したと思うので以下にメモしておきたいと思います。

環境

  • さくらインターネット
  • WordPress 2.8.4

起こっていた現象
  • yahooブログにはトラックバックできた
  • fc2ブログにはトラックバックできなかった

解決までにたどった道のり
  1. ソースを追ってトラックバックのURLをリクエストしている場所、そのレスポンスを受け取っている場所を突き止めた
  2. デバッグコードを埋め込んでレスポンスをテキスト出力して内容を確認
  3. デバッグコードを埋め込んだ場所は後述。

トラックバックやピングバックを行っているソース
  • wp-includes/comment.php

現象と対処法
  1. 「公開」ボタンを押下した後、「トラックバック送信」フォームにURLが残ったままになっている場合
  2. →たぶん受信側(相手)の応答が遅くてタイムアウトしている場合が多かった。でも成功したときも残っている場合があるんですよねぇ。よく分からないねぇ・・・。
     comment.phpのfunction trackbackの以下の部分をいじり、waitする時間を長くします。
      「$options[‘timeout’] = 4;」
     ↓
     「$options[‘timeout’] = 60;」
     ※60という数字は適当です(^.^;

  3. 「公開」ボタンを押下した後、「トラックバック送信」フォームにURLが残っていない場合(送信済みトラックバックとして扱われている場合)
  4. →httpリクエストは送信されています(トラックバックPingは飛んでいる)が、何らかの理由で受信側がトラックバックをはねています。たぶん。

    例えばこんな事象を確認しました。

    • fc2ブログなどの場合、言及リンク(トラックバック送信先の記事に対するハイパーリンク)が無いとスパム扱いになります。
      (参考:fc2の公式発表
    • ちなみに、この事象はfc2以外にもlivedoorのブログでもそうらしいです。おそらく他にもあるでしょう。念のため、言及リンクを入れてのテストをした方が無難です。

    • 本文が短すぎたり、「ああああ」など、スパム扱いされそうなエントリーである場合。また、ユーザが任意で設定した特定のキーワードを含むエントリーである場合もはねることがあるらしいです。
    • テストとは言え、ちゃんと文章を書いた方が無難です。
      (参考:@niftyのココログQA

    • 受信側(相手)がトラックバックリクエストを保留している場合
    • WordpressのAkismetプラグインでもそうですが、ユーザが承認した場合のみトラックバックとして掲載するというパターンがどうも多そうです。
      まずはソースにデバッグコードを埋め込んで、レスポンスが「0(成功)」であった場合は、お茶でも飲んだ後か数日後に確認した方が無難です。
      レスポンスが「1(失敗)」の場合、その理由がレスポンス内に含まれていることが多かったので、それが解決の手がかりになると思います。

      fc2では・・・
      1. タイムアウトのレスポンスが返ってきた
      2. タイムアウトの時間を60秒と長くしてみた
      3. 言及リンクがないよ!というレスポンスが返ってきた
      4. 言及リンクを入れてみた
      5. fc2ブログで「承認待ち」ステータスになった(自分のアカウントでテスト用のfc2ブログを作成しました。fc2のデフォルトの設定では、取りあえずトラックバックは保留されるらしい)ってことでまだ送信者からは確認できない
      6. fc2側で承認してやっと無事トラックバック出来ていることが確認できた)



デバッグコードを埋め込んだ場所
  • comment.phpのfunction trackbackに以下を挿入(赤字の部分)

  • function trackback($trackback_url, $title, $excerpt, $ID) {
    global $wpdb;

    if ( empty($trackback_url) )
    return;

    $options = array();
    // $options['timeout'] = 4;
    $options['timeout'] = 60;
    $options['body'] = array(
    'title' => $title,
    'url' => get_permalink($ID),
    'blog_name' => get_option('blogname'),
    'excerpt' => $excerpt
    );

    $response = wp_remote_post($trackback_url, $options);

    // debug start
    $fp = fopen("testdayo.txt", "w");
    fwrite($fp, print_r($response,true).'----end---\n');
    fclose($fp);
    // debug end

    if ( is_wp_error( $response ) )
    return;

    $tb_url = addslashes( $trackback_url );
    $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET pinged = CONCAT(pinged, '\n', '$tb_url') WHERE ID = %d", $ID) );
    return $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_url', '')) WHERE ID = %d", $ID) );
    }


    こうすると、トラックバック有りの記事の投稿の際、Wordpressのルートディレクトリにtestdayo.txtが出来て、どんなレスポンスが返ってきているのかが確認できる。

    例えばfc2で成功した時はこんな感じ。

    (中略)
    <response>
    <error>0</error> ★0=成功、1=失敗(トラックバック)
    <message>Thank You!</message> ★失敗したときはその理由が書かれる。例えばfc2で言及リンクが無かった時は「Error: Forbidden Your Entry (Link)」と書いてあった。
    </response>
    [response] => Array
    (
    [code] => 200 ★HTTPレスポンスコード。これはHTTPリクエストが成功したという意味。ここが200(成功)ステータスだからと言って、トラックバックも成功しているとは言えない。
    [message] => OK
    )

    (以下略)


こんなもんすかね。



追伸・・・

テスト用に作った僕のfc2のブログですが、トラックバックのテスト用に使ってやって下さい。

管理コンソールを見て分かったのですが、fc2はデフォルトで要承認という訳じゃなく、承認という作業は必須みたいです。

面倒なので僕は承認しませんが、その代わりに「このコメントは管理者の承認待ちです」と表示するように設定しておきました。
投稿日時で判断してください。

それと、
「本文中に言及リンクの無いトラックバックを受け付ける
本文の99%以上が英数字のものをスパムと判定
という設定にしてあるので気をつけてくらはい。


2013/09/26 追記
このテスト用ブログは削除してしまいました。



あ。もちろんこの記事へのトラックバックでテストしても構いませんが(笑

WordPressのアクセス解析(カウンター)プラグインCounterize IIを導入

Wordpress用のアクセス解析プラグインCounterize IIの導入メモ。
ちなみにWordpressを設置してあるのはさくらインターネットです。

手順

  1. teratermでさくらインターネットにSSH接続
  2. WordPressのpluginsディレクトリに移動
  3. $ cd $HOME/[Wordpressのディレクトリ]/wp-content/plugins
  4. Counterize IIのダウンロード、及び解凍
  5. $ wget http://downloads.wordpress.org/plugin/counterizeii.zip
    $ unzip counterizeii.zip

  6. 日本語で使う場合は2つのファイルを以下の様にリネーム
  7. $ cd counterizeii
    $ mv counterize-ja_UTF.mo counterize-ja.mo
    $ mv counterize-ja_UTF.po counterize-ja.po

  8. 管理画面より Counterize II を有効にする
  9. カウンターを表示させたい場所に以下のタグを挿入する
  10. <ul>
    <li>Today : <?php echo counterize_gethitstoday();?></li>
    <li>Total : <?php echo counterize_getamount(); ?></li>
    </ul>


    以上。
    参考にさせて貰ったサイトでは、「Yesterday」を表示する方法なども紹介されている。

    参考:無料で使える情報探す「おぼえがき」