Re: WordPressで自動生成されるrobots.txt

WordPressの場合、ダッシュボードの「プライバシー設定」にあわせて自動でrobots.txtを生成してくれます(自分で robots.txt を設置した場合はそちらが優先されます)。

細かな設定を行いたい場合は自分で robots.txt を作成した方が早いかも知れませんが、当該部分にフィルターが用意されているので、プラグインやテーマでカスタマイズすることも可能です。

WordPressで自動生成されるrobots.txt | Gatespace's Blog

惜しい、Function Reference/do robots にもあるようにdo_robotstxt アクションフックが直前で呼ばれるので、そのアクションフックで robots_txt フィルターフックを登録したほうが確実。

<?php
add_action('do_robotstxt', function(){
  add_filter('robots_txt', function($output) {
    $public = get_option( 'blog_public' );
    if ( '0' != $public ) { // open
      $output .= "Disallow: /members/n";
    }
    return $output;
  }
}

Re: Amimotoからstaticpress-s3で静的ホスティング連携

名前もお好きに、とりあえず、wp_update_siteurl.sh とかで。EC2のメタデータを取得して、その情報でデータベースを更新するようにしました。

#!/bin/bash

_id=`curl -s 169.254.169.254/latest/meta-data/instance-id/ | sed -e "s/-/_/"`
_dns=`curl -s 169.254.169.254/latest/meta-data/public-hostname/`
mysql -u root ${_id} <<_EOT_

update wp_options set option_value = 'http://${_dns}' where option_name = 'siteurl';
update wp_options set option_value = 'http://${_dns}' where option_name = 'home';

_EOT_

Amimotoからstaticpress-s3で静的ホスティング連携

武田さん、ありがとうございます。
でも、このままだと不完全で、実は WordPress では wp_options の他にも wp_posts 内に画像ファイルのURLとかを投稿した時の home_url を元に絶対パスで保存してたりするんです。
wp-cli ってツールを使うと、そんな値を一括で置換してくれる search-replace という便利なコマンドが有ります。
網元AMIには、最初から wp-cli 入っているので、wp-cli をインストールしたりする必要は無いです。

てことで、こんな感じで wp_update_siteurl.sh を作ればおっけー

2行目の “/path/to/wordpress” の所は、適宜自分の環境に合わせて変更してください。

Re: How do I extend fetch_feed timeout?

As a quick fix I just went straight for the SimplePie code that the WordPress code is wrapping around.

$feed = new SimplePie();
$feed->set_feed_url('http://rss.betfair.com/RSS.aspx?format=rss&sportID=7');
$feed->set_timeout(30); // set to 30 seconds
$feed->set_item_limit(40);
$feed->set_stupidly_fast(true);
$feed->enable_cache(true);
$feed->set_cache_duration(200);
$feed->init();
$feed->handle_content_type();

WordPress › Support » How do I extend fetch_feed timeout?

WordPress の fetch_feed() 関数でタイムアウト値を延ばす方法をググったらサポートのこの回答が出てきたんだけど、wp-includes/feed.php 眺めたら、アクションフックがあったので、こっちで対応できるねというお話。

add_action('wp_feed_options', function(&$feed, $url){
    $feed->set_timeout(30); // set to 30 seconds
}, 10, 2);

今日の教訓:ググる前にソースを見よう。

Re: [WordPress]コピペでOK!カテゴリー、タグ、パンクズを呼び出すサンプルコードいろいろ

さらっと流し読みしただけですが…

現在読み込んでいる記事の、カテゴリーリンクを1つ出力します。記事が属するカテゴリーが1つだけの場合に有効です。記事一覧を表示するループ内などで使うのが一般的です。
その1. サンプルコード

    $cat = get_the_category();
    echo '<a href="'.get_category_link($cat[0]->term_id).'">'.$cat[0]->name.'</a>';

[WordPress]コピペでOK!カテゴリー、タグ、パンクズを呼び出すサンプルコードいろいろ

get_the_cateory() ですが、内部的には get_term() を呼び出してます。
そんで get_term() では、なにがしかのエラーがあった場合 WP_Error オブジェクトを返すことがあるので、このまま使うと WP_Error オブジェクトが返ってきたときに $cat[0]->term_id とかが存在せずにエラーになってしまいます…
( see. https://core.trac.wordpress.org/browser/tags/3.8/src/wp-includes/taxonomy.php#L933 )

そんなわけで、get_the_category() の返り値は is_wp_error() で検査してから使った方が幸せになれると思うよ。
# ってか the_category() とか標準のテンプレートタグ使えば良いのに…

Re: WordPressで更新・お知らせ履歴を別ページで作る方法

WordPressで、更新履歴やお知らせ履歴をリスト表示したシンプルな別ページを作って、トップページやサイドバーからiFrameやphpのinclude等で呼び出したいケースがあります。
方法は色々ありそうです。私がクライアントさんのサイトで行った方法を紹介します。少々強引です。

私が実施した方法は、固定ページ内に更新履歴やお知らせ履歴のループをPHPで書いてしまう方法です。Exec-PHPプラグインを利用すれば、固定ページ内でPHPを実行することができます。

WordPressで更新・お知らせ履歴を別ページで作る方法

色々、最悪です。

まず、顧客案件で Exec-PHP を使うなんてもってのほか。
例えば、お客さんが以下のようなコードを通常記事に打ったら、MySQL のユーザーアカウント/パスワードが漏洩してしまいます。

<?php
echo DB_USER ."\n";
echo DB_PASSWORD."\n";
?>

まぁ、これは極端な例ですが…

Exec-PHP を入れているサイトの投稿者アカウント(管理者権限が無いアカウントでも!)が漏れてしまった場合、攻撃者は好きなだけサーバ上で php コードを実行できるので非常に危険です。
このプラグインを使うのはやめましょう。

あと、メインクエリーの中で query_posts() 使うなとか色々言いたいことはありますが…

この案件の場合はショートコードを用意してやるのが良いです。こんな感じ。

これで、固定ページ中に [recent_posts] ってショートコードを書いてやれば表示できるようになります。

追記:
もしくは、テーマテンプレート内にウィジェットエリアを用意して「最近の投稿」ウィジェットを使っても良いねって指摘もありました。

そっちの方が簡単かもですね。やりやすいほうで。

追記2:
似たようなことをやるプラグインもあるそうです。

Re: phpで日本の祝日や振替休日を出力する。

とりあえず1か月分の祝日を取得します。ついでに振替休日やら、国民の休日にも対応してみました。国民の休日なんてめったにあるもんじゃないんですけど、2015年にまたあるようなので、とりあえず実装してみました。イベントスケジュールとかを作るときに結構便利です。

via. phpで日本の祝日や振替休日を出力する。 ::: Toro_Unit

引数には、年も指定できた方が良いですね。

[2014-8-26 追記] Google Calendar API v3 に対応させる記事を書きました
[PHP] Google Calendar API v3 で日本の祝日を取得する

Re: WordPressで提供する Web API #wacja2012

Web APIであるからには、JavaScriprからも利用可能なJSON形式にも対応したい。PHPのjson_encode()という関数で変換して出力する。

via. WordPressで提供する Web API #wacja2012

僕の作ったプラグインで実装できるよ。
WordPress › Feed JSON « WordPress Plugins

こんな感じ

情報を増やしたり、フォーマットを変えたい時はプラグインに含まれている feed-json-template.php ってファイルをテーマディレクトリ内に feed-json.php って名前でコピーして色々修正してね。