Category Archives: wordpress

WordPressをAutoPagerizeとはてなスターに対応させる


前のテーマは最初からAutoPagerizeに対応してたので気にしてなかったんだが、テーマ変えてから効かなくなってたので対応させた。ついでにはてスタも復活させた。

まずAutoPagerize対応。wp-includes/link-template.phpのfunction next_posts_link部分とfunction previous_posts_link部分に、rel=”next”を追加する。

function next_posts_link($label='Next Page »', $max_page=0) {
        global $paged, $wp_query;
        if ( !$max_page ) {
                $max_page = $wp_query->max_num_pages;
        }
        if ( !$paged )
                $paged = 1;
        $nextpage = intval($paged) + 1;
        if ( (! is_single()) && (empty($paged) || $nextpage <= $max_page) ) {
                echo '<a rel="next" href="';
                next_posts($max_page);
                echo '">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&#038;$1', $label) .'</a>';
        }
}

↑こんな風に。echo ‘<a rel=”next” href=”‘; の行だけ変更すればおk。telnetなりSSHなりで入って直接編集するなり、ローカルで編集してFTPするなりお好きなように。あとはテーマ側の話なので、Blogにログインして、テーマ編集。

テーマによって多少違うので一概には言えないのだが、WordPressのテーマは大体以下のような感じになっていることが多いはず。

<?php get_header(); ?>
	<div id="content">
	<?php if (have_posts()) : ?>
		<?php while (have_posts()) : the_post(); ?>
			<div class="post" id="post-<?php the_ID(); ?>">
				記事
			</div>
		<?php endwhile; ?>
		<div class="navigation">
			<div class="alignleft"><?php next_posts_link('&laquo; Previous Entries') ?></div>
			<div class="alignright"><?php previous_posts_link('Next Entries &raquo;') ?></div>
		</div>
	</div>
	<?php endif; ?>
	</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

細かいところは違っても、おそらくindex.phpはこんな風だろう。AutoPagerize対応にするには、rel=”next”の他に

  • ページ毎に繰り返される場所
  • ナビゲーションの場所

この2つを特定のclass名にしてやればいいので、以下のようにする。

<?php get_header(); ?>
	<div id="content">
	<?php if (have_posts()) : ?>
		<div class="autopagerize_page_element">
			<?php while (have_posts()) : the_post(); ?>
				<div class="post" id="post-<?php the_ID(); ?>">
					記事
				</div>
			<?php endwhile; ?>
			<div class="navigation autopagerize_insert_before">
				<div class="alignleft"><?php next_posts_link('&laquo; Previous Entries') ?></div>
				<div class="alignright"><?php previous_posts_link('Next Entries &raquo;') ?></div>
			</div>
		</div>
	</div>
	<?php endif; ?>
	</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

whileとnavigationを挟むように<div class=”autopagerize_page_element”>を挿入、navigationのclassにautopagerize_insert_beforeを追加。これでうまくいくはず。

次にはてスタ対応。これはすげー簡単で、ヘッダ部分に以下のコードをコピペるだけ。

<script type="text/javascript" src="http://s.hatena.ne.jp/js/HatenaStar.js"></script>
<script type="text/javascript">
Hatena.Star.Token = 'トークン';
</script>
<script type="text/javascript" src="http://s.hatena.com/js/Hatena/Star/EntryLoader/WordPress.js"></script>

トークンははてスタのサイトで外部ブログを登録した時に出てくる英数字。勝手に解析していい感じに動いてくれるはず。

mixiとblogの同期


前使ってたwp-mixipublisherは便利だったんだが、今のバージョンのWordPressじゃ動かないっぽ。色々修正してみたけど途中で面倒になったので、結局plaggerでやることに。PlaggerをつかってBlogとMixiの日記を同期させる参照。YAMLにFilter::FindEnclosures入れ忘れたので悲惨なことになってるな。ちゃんと動くんかな…なんか投稿は成功してるのに、エラーログ出る。謎。テストで画像貼るお!

猫鍋

Dedupeの指定間違ってたのかな…記事ダブりまくり。もっかいテスト。

wordpressのformatterがキモいタグを生成するので、どうにかする – v2.3.3の場合


前回のwordpressのformatterがキモいタグを生成するので、どうにかするはME2.2.3以外でpatchすると、管理画面で激しくwarningが出てエライことになる。ので、v2.3.3用のpatch。

--- www/wp-includes/formatting.php.orig Thu Feb 28 16:37:29 2008
+++ www/wp-includes/formatting.php      Thu Feb 28 16:39:27 2008
@@ -63,7 +63,7 @@
        $pee = $pee . "\n"; // just to make things a little easier, pad the end
        $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
        // Space things out a little
-        $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
+       $allblocks = '(?:code|table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
        $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
        $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
        $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
@@ -88,6 +88,10 @@
        if (strpos($pee, '<pre') !== false)
                $pee = preg_replace_callback('!(<pre.*?>)(.*?)</pre>!is', 'clean_pre', $pee );
        $pee = preg_replace( "|\n</p>$|", '</p>', $pee );
+        $pee = preg_replace('| {4}|', str_repeat(' ',4), $pee);
+        $pee = str_replace('\\', '\\\\', $pee);
+        $pee = preg_replace('|<code>.*?</code>|se', "str_replace(array('<p>', '</p>'), array('', '<br /><br />'), '$0')", $pee);
+        $pee = StripSlashes($pee);

        return $pee;
 }

wordpressのformatterがキモいタグを生成するので、どうにかする – ME2.2.3の場合


<p></code></p>とかいう謎タグが生成されて激しく気持ち悪いので、phpに手を入れる。As You Like It ? Blog Archive ? WordPressのエディタとの付き合い方を参照して、その通りに書き換えるだけ。patchにしとく。

--- formatting.php.org  Fri Feb 22 18:23:52 2008
+++ formatting.php      Fri Feb 22 18:21:16 2008
@@ -55,7 +55,7 @@
        $pee = $pee . "\n"; // just to make things a little easier, pad the end
        $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
        // Space things out a little
-       $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
+       $allblocks = '(?:code|table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
        $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
        $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
        $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
@@ -80,6 +80,13 @@
        if (strpos($pee, '<pre') !== false)
                $pee = preg_replace('!(<pre.*?>)(.*?)</pre>!ise', " stripslashes('$1') .  stripslashes(clean_pre('$2'))  . '</pre>' ", $pee);
        $pee = preg_replace( "|\n</p>$|", '</p>', $pee );
+        $pee = preg_replace('| {4}|', str_repeat('&amp;nbsp;',4), $pee);
+        $pee = str_replace('\\', '\\\\', $pee);
+        $pee = preg_replace(
+            '|<code>.*?</code>|se'
+            , "str_replace(array('<p>', '</p>'), array('', '<br /><br />'), '$0')"
+            , $pee);
+        $pee = StripSlashes($pee);

        return $pee;
 }

見た目と文字コード変えた


そろそろ見てくれを変えてやろうと思って、そのついでにwordpressのバージョンアップ+文字コードの変更。今時eucってのもあれなんで、ついでにutf-8化。

mysqldump -uroot -p -hHOST -q DATABASE > ./dumped.sql
nkf -w --overwrite ./dumped.sql
mysql -uroot -p -hHOST DATABASE < ./dumped.sql

こんだけかと思いきや、権限周りが壊れてログイン不能になったので「WordPress標準ガイドブック」サポートサイト ? capabilities.phpのエラーが表示された場合 を参照してパッチを当てる。