Re: WordPress使いならこれだけはやっておきたい本当のセキュリティ対策10項目

8. 管理画面にIP制限をかける

wp-adminとwp-login.phpにアクセスできるホストを信頼できるIPアドレスのみに制限する方法です。たとえパスワードがそのまま外部に流出したとしても、社外から管理画面に入ることができなくする対策です。ただ、これは自由にログインさせるコミュニティサイトでは無理ですし、そうでない場合でも利便性が低下しますので、ケース・バイ・ケースで行うべき対策でしょう。

via.WordPress使いならこれだけはやっておきたい本当のセキュリティ対策10項目

惜しい、非常に惜しい。
セキュリティ対策としては良いんですが、これやっちゃうと一部のプラグインが動作しなくなったりしてハマりポイントになる可能性があります。

WordPress で Ajax を実装するためには、以下のような手法が良く用いられます。

add_action('wp_ajax_example', 'ajax_example');  // ダッシュボード用
add_action('wp_ajax_nopriv_nlmg_example', 'ajax_example');  // 公開部分用
function ajax_example(){
    // なんか処理
}

via.いまさらだけどWordPressでAjaxのやり方

こうすると、/wp-admin/admin-ajax.php?action=example にアクセスすることで、簡単に ajax が実装できます。

本当は、公開部分では /wp-admin/admin-ajax.php を使わずにプラグイン独自で用意した方が良いし、Codex にもプラグインのメインPHPファイルまたは補助ファイルでやれと書いてあるんですが、結構上記のような実装をするプラグイン作者が多いです。
すいません、私もたまにやります。
( WordPress は公開部分用に /wp-admin/admin-ajax.php ではなくて、別の API を用意してくれないかなー。 /wp-ajax.php とかで良いんだけど )

なので、IP 制限をする場合は /wp-admin/admin-ajax.php だけは、制限をかけないようにしてあげてください。

Re: Twitterのツイートを表示する-RSS編

公式ウィジェットで十分綺麗なので良いんですが
なんとなく自分で実装したいと思って調べてみたところ

あくちーさん( @actywav )のサイトを見つけました!!
WordPress のプラグイン無しですごく簡単にツイート表示しよー : actyway

ふむふむ。やることは大まかにこの3つの様です。

  • functions.phpに処理実装
  • CSS調整
  • jquery.totemtickerの設置

:
なるほど!キャッシュですか!先生!
ということでTransients APIについては
全く知らなかったので、これを使う方向でカスタマイズしようと思ったのですが・・・

どうやら今回使用しているsimplexml_load_file関数と、Transients APIは
相性が悪いらしく、一旦実装を断念しました・・・。
※調べた所、simplexml_load_file関数はシリアライズ処理が上手くいかないのだそうです。
via. Twitterのツイートを表示する-RSS編 | Web-Clutch

ってわけで、Transients API に対応させてみた。未検証。

Re: WordPressで記事のツイート数だけを取得して表示する方法

先日設置しましたメニューバー下の新着記事サムネイルに、その記事のツイート数を表示してみました!
いろんなサイトを見て「いいなぁ」と思っていたのでけっこー感動。いいわぁw

ということで、記事のツイート数を取得して表示する方法と、この斜め三角をどうやって作ったかを解説したいと思います!

via. WordPressで記事のツイート数だけを取得して表示する方法 | NANOKAMO BLOG

これだと、記事にアクセスがあったときに毎回 Twitter API 叩いて、Twitter サーバーにいらん負荷をかけちゃうので、WordPress の Transient API 使って、キャッシュを取得するようにしたほうが良いと思う。
あと WP 使うんなら file_get_contents() ではなく、wp_remote_get() 使ったほうが、何かと便利。

※未検証です。

Re: WordPressでイベントカレンダー

WordPress ではウィジェットや get_calendar タグ/ファンクションを使って、ブログによくある投稿カレンダーを出力することができます。カレンダーの日付のリンク先は日付別アーカイブとなっているのですが、カレンダーの日付枠内に記事のタイトルを表示したいという要望がよくあります。巷ではイベントカレンダーと呼ばれるニーズですね。
そのようなことを実現するプラグインはありますが、他人のルールで作られたものは敬遠したいという方のために get_calendar をいじくる方法をご紹介します。さらにカレンダーに表示する記事はカテゴリーで指定できるようにします。

via. WordPressでイベントカレンダー  |  wpxtreme

添削するのは、パーマリンクから日付を取得する正規表現。

if(preg_match_all('@<td><a href="' . get_option('home') . '/(\?m=)?([^"]*?)" title="[^"]*?">([0-9]+?)</a>@i', $output, $matches)){
  foreach($matches[0] as $key => $match){
    $date  = preg_replace('@/@', '', $matches[2][$key]);
    $year  = substr($date, 0, 4);   // 年
    $month = substr($date, 4, 2); // 月
    $day   = substr($date, 6, 2);   // 日
    /* do stuff */
  }
}

これだと、http://example.com/archives/date/2011/11/21 とかの形式に対応できない。
こんな感じに修正。

    $date  = preg_replace('@^[^0-9]*([0-9]+)/?(0[0-9]|1[0-2])/?([0-2][0-9]|3[01]).*$@', '$1$2$3', $matches[2][$key]);
// http://example.com/?m=201001 や http://example.com/201001 の月別アーカイブリンクを
//   http://example.com/event-calendar/?ym=201001 の形式に変更する  
// 前後月リンクは td に next, prev の ID が付加されているのでそれを利用する
if(preg_match_all(
  '@<td( id="[prev|next]")?[^>]*?><a href="(' . get_option('home') . '/)(\?m=)?([^"]*?)" title="[^"]*?">[^<]+?</a>@i', 
  $output, $matches)){
  foreach($matches[0] as $key => $match){
    $ym  = preg_replace('@/@', '', $matches[4][$key]);
    $output = preg_replace(
      '@' . preg_quote($matches[2][$key]) . preg_quote($matches[3][$key]) . preg_quote($matches[4][$key]) . '@',   
      get_permalink() . '/?ym=' . $ym, 
      $output
    ); 
  }
}

同様にこんな感じ。

    $ym  = preg_replace('@^[^0-9]*([0-9]+)/?(0[0-9]|1[0-2]).*$@', '$1$2', $matches[4][$key]);

Re: 【ノンデザイナー向け】 WordPress で今風なページトップを超簡単に設置する方法

2011年くらいから、
ページをスクロールすると、フワっと表示されるページトップ(クリックするとページの一番上にいくやつ)が
流行ってますよね! 超簡単にコピペするだけで作れるソース作ったので、公開します!

via. 【ノンデザイナー向け】Wordpressで今風なページトップを超簡単に設置する方法 | しらさかブログ

僕が WordPress に実装するなら、こうかな?
以下を functions.php に追加。

// テーマの head 部で jQuery を読み込む
add_action('wp_print_scripts', 'add_print_scripts_jquery');
function add_print_scripts_jquery() {
    wp_enqueue_script('jquery');
}

// Scroll to Top 用のスタイルを head 部に追加
add_action('wp_head', 'add_scroll_to_top_style');
function add_scroll_to_top_style() {
    ?>
<style type="text/css">
#pagetop { display:none;position:fixed;right:10px;bottom:10px;z-index:100; }
#pagetop a { padding:5px;background:#ccc;color:#fff;display:block;font-size:20px;font-weight:bold;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px; }
</style>
    <?php
}

// Scroll to Top 用の JavaScript をフッター部に追加
add_action('wp_footer', 'add_scroll_to_top');
function add_scroll_to_top() {
    ?>
<script type="text/javascript">
jQuery(function($){
    $('body').append(
        $('<div id="pagetop">')
        .append(
            $('<a href="#">↑</a>')
            .click(function(){$('html,body').animate({scrollTop:0}, 800, 'swing')})
            )
        );
    $(window).scroll(function () {
        if ($(this).scrollTop() > 100) {
            $('#pagetop').fadeIn();
        } else {
            $('#pagetop').fadeOut();
        }
    });
});
</script>
    <?php
}

本当は、css とか JavaScript とかは別ファイルにして外出ししたほうが良いと思うけど、まぁ簡単にコピペでできるってことで。

[WordPress] Post Class から Post ID を消す

ただ、post-IDとかの消し方が良く分からない。というか考えてない。wp-includes/post-template.phpあたり見れば良さそうですけども・・

僕はさほど実害無いので消さなくてもいいやって感じなんですけど、簡単に消せる自由もあってもいい気もしますね。あるのかな?w

お前そんな事も出来ないのか、みたいな素敵なデベロッパーさんからのトラバお待ちしています。
via. お手軽WordPress Tips:post_class()にアイキャッチ画像を使用した記事の場合のclassを追加する – かちびと. net

って、ことなので。

function remove_postid_class($classes, $class, $post_id) {
	if( $key = array_search('post-' . $post_id, $classes) )  {
		unset($classes[$key]);
	}
	return $classes;
}
add_filter('post_class', 'remove_postid_class', 10, 3);

あと、本文内のコードは、こうすれば global $post 使わなくても良いよ。(未検証)

function add_eyecatch_class($classes, $class, $post_id) {
	if( has_post_thumbnail($post_id) ) {
		$classes[] = 'eyecatch'; 
	}
	return $classes;
}
add_filter('post_class', 'add_eyecatch_class', 10, 3);

Re: これ、どう考えてももっと短くなる気がしてならない

http://twitter.com/#!/shinichiN/status/113883259829628928

if ( $_POST['cawaii_desuka'] == 'yes' ) {
    if ( isset($_POST['bg_css']) ) {
        $bg_css = $_POST['bg_css'];
    }
    if ( $bg_css == 'bg_brown' || $bg_css == 'bg_check' || $bg_css == 'bg_none' ) {
        update_option('bg_css', $bg_css);
    }
}

短くするならこうかな?(未検証)

if (isset($_POST['cawaii_desuka']) && $_POST['cawaii_desuka'] === 'yes') {
    $bg_css = isset($_POST['bg_css']) ? $_POST['bg_css'] : '';
    preg_match('/^bg_(brown|check|none)$/', $bg_css) && update_option('bg_css', $bg_css);
}

わかりやすいのならこう

if (isset($_POST['cawaii_desuka']) && $_POST['cawaii_desuka'] === 'yes') {
    $bg_css = isset($_POST['bg_css']) ? $_POST['bg_css'] : '';
    switch ($bg_css) {
        case 'bg_brown':
        case 'bg_check':
        case 'bg_none':
            update_option('bg_css', $bg_css);
    }
}