Flexible Upload プラグインが動かなくなった

WordPress で動いている2つのブログのうち、一方で Flexible Upload がプラグインが動かなくなったみたい。

動いている方は WordPress 2.6.3 で、動かない方は WordPress 2.6.1 なので、ひとまずアップグレードしてみようか。
アップグレード後にプラグインを有効化して行く際に、Flexible Upload プラグインとコンフリクトしているプラグインがないかどうかも確認できるし。

2.6.5 にしたらエラーが出るようになった

画像アップロードの画面でこんなエラーが出る。

Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, ‘media_admin_css’ was given in /www/users/……./wp-includes/plugin.php on line 311

検索すると修正方法が見つかった。flexible-upload-wp25.php ファイルを少しいじるだけでいいみたい。

To solve the error, please refer: http://wordpress.org/support/topic/186579, and look at alexrabe's reply,

what should be done is to modify “flexible-upload-wp25.php” and find following content,

function fup_set_actions() {
remove_action('media_upload_image', 'media_upload_image');
add_action('media_upload_image', 'fup_media_upload_image');
add_action('admin_head_fup_media_upload_form', 'media_admin_css');
remove_filter('media_send_to_editor', 'image_media_send_to_editor');
add_filter('media_send_to_editor', 'fup_media_send_to_editor', 10, 3);
}

and add red font part

function fup_set_actions() {
remove_action('media_upload_image', 'media_upload_image');
add_action('media_upload_image', 'fup_media_upload_image');
// not longer needed for wp2.6
if ( !function_exists('wp_enqueue_style') )
add_action('admin_head_fup_media_upload_form', 'media_admin_css');
remove_filter('media_send_to_editor', 'image_media_send_to_editor');
add_filter('media_send_to_editor', 'fup_media_send_to_editor', 10, 3);
}

あと、同じファイルの fup_admin_header() 関数にも echo 以下の1行を追加する必要があるみたい。

function fup_admin_header() {
    global $fup_rel_dir;
    wp_enqueue_script('fup_swfupload',
                      '/'.$fup_rel_dir.'flexible-upload-wp25js.php',
                      array('prototype'), false);

   echo '<link rel="stylesheet" href="'. get_option('home') .'/wp-admin/css/media.css?ver=20080709" type="text/css" />'. "\n";

}

僕の場合は、サブディレクトリにインストールしているので、上のコードではうまく動かない。get_option('siteurl') を使う必要があった。

echo '<link rel="stylesheet" href="'. get_option('siteurl') .'/wp-admin/css/media.css?ver=20080709" type="text/css" media="all" />'. "\n";

エラーの原因は日本語かも?

アップロードの際に Title 欄に日本語を含めるとアップロードが終わっても完了画面に遷移しないような感じ。英数のみでアップロードすればうまく行くようだ。

ページ上に、タグで絞り込んだ最新記事のリストを複数表示する

カテゴリーをやめてタグだけにしてしまったのだけど、WordPress はいまだになんだかカテゴリーベースっぽい部分がある。タグで記事を絞り込んだりするのがちょっと不便かも。
でも SimpleTags プラグインを使うと結構便利。複数のタグで絞り込むのが簡単になる。タグによる除外も簡単にできればなおいいんだけど。

タグで絞り込んだ最新記事のリストを複数表示するには、ページのテンプレート内に以下のように書いてやればいい。

<?php
$myposts = get_posts('tag=タグ1+タグ2&numberposts=5&orderby=post_date');
foreach($myposts as $post) :
setup_postdata($post);
?>
    <li><a href="<?php the_permalink(); ?>" target="_blank" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>

詳しくは以下を参考に。

テンプレートタグ/get posts - WordPress Codex 日本語版

Yahoo!Pipes で複数のブログから RSS を抽出して再発行する

Facebook にブログを取り込んでいるのだけど、RSS フィードをひとつしか指定できないので複数のブログから取り込めない。
そこで RSS を1本にまとめてから取り込めばいいのではと考えて Yahoo! Pipes で探してみたら、やはりそういうのがあった。
というわけで、ちょこっと修正して利用しています。楽ちんだ〜。

Pipes: My 2-in-1 feeds by RSS feed creator

Simple Tags プラグインのクリックタグ表示をアルファベット順にしたい

Simple Tags プラグインにはクリックタグというタグ入力支援の機能があって、なかなか便利なんだけど、表示されるタグの候補がタグ ID の順に並んでいて、アルファベット順とかになっていないのでタグの選択漏れや、似たようなタグを複数つくってしまうというようなミスが起こりやすい。

ということで、これをきちんと並ぶようにしたい。時間ができたらやってみよう。

やってみた。
 ↓

コードの修正

/2.5/inc/simple-tags.admin.php ファイルの中の、ajaxSuggestLocal() と ajaxLocalTags() という2つの関数について、SQL 文に「ORDER BY name ASC」の1行を追加する必要がある。

<?php
	// Get all terms
	global $wpdb;
	$terms = $wpdb->get_col("
		SELECT DISTINCT name
		FROM {$wpdb->terms} AS t
		INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
		WHERE tt.taxonomy = 'post_tag' 
		ORDER BY name ASC
	");//ORDER BY clause is ADDED BY minorio
	$terms = array_unique($terms);
?>

これで、表示されるタグの候補がタグ ID 順からアルファベット順になる。でも日本語が含まれる場合、ひらがなとカタカナ以外はあいうえお順にはならないけど。しかもひらがなとカタカナは a と b の間に並ぶみたい。

まあちょっとだけ使いやすくなったかな・・。

コードを改善した

SQL の時点で並べ替えてもいまいちだったので、array に対して並べ替えを実行するように変更してみた。これならきちんと アルファベット→ひらがな→カタカナ→漢字 の順番になる。これでいいでしょう。

<?php
	// Get all terms
	global $wpdb;
	$terms = $wpdb->get_col("
		SELECT DISTINCT name
		FROM {$wpdb->terms} AS t
		INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
		WHERE tt.taxonomy = 'post_tag' 
	");
	$terms = array_unique($terms);
	sort($terms, SORT_LOCALE_STRING);//ADDED BY minorio
?>

カテゴリーとタグの相互変換

カテゴリーとタグを併用しているのだけど、タグだけでいいような感じになってきたので、カテゴリーをタグに変換してしまうことにした。

「管理 > インポート > カテゴリーとタグの変換」から行う。

ただし、変換の際にすでに同名のタグがあるとうまく行かないことが多いので、きちんと変換できたかどうか確認してからカテゴリーを削除するようにしたい。

Simple Tags プラグインのタグ絞り込みのバグ修正

タグによる絞り込み機能を導入して動作確認していたのだけど、タグのスラッグが日本語の場合にうまく機能していないような・・ということで、調べてみるとバグがあるようですね。

こちらで修正コードを公開してくれている方がいるので、利用させていただこうと思います。

Simple Tagsのバージョンは、1.5.7です。

バグの原因は、

* そもそもAND条件のSQLがない
* Wordpress本体のバグ

でした。Wordpress本体のバグの方は、へたに直すとほかに影響がありそうなので、SimpleTagsの方を修正しました。
2.6で直るかもしれません(未検証)

ただし、シングルクォート(')やダブルクォート(")がなんだか変な文字になってしまっているので、そのままコピーしても動きません。というわけで、下に修正済みのコードを添付します。

simple-tags.client.php.zip

しかし、タグによる絞り込み機能まで使う人はあんまりいないかもな〜。
Google サイト内検索とか、慣れてるものの方に行く人が多いような気はする。

ただ、自分でまとめページをつくってそこからタグで絞り込んだ結果へと誘導するような活用法はありそう。

single_tag_title() で取得できるタグ名もオーバーライドしたい

絞り込みしているのに、ページのタイトルなどにそれが反映されないのはユーザービリティに関わると思う。

SimpleTag に single_tag_title() という関数を書き加えればいいかな?

Simple Tags プラグインのタグクラウドの前後に HTML タグを挿入する方法

Simple Tags プラグインを使ってタグクラウドを表示するメリットは、自動でグラデーションを付けられること、最低投稿数を設定できることなどいくつかあると思うけど、デザイン上、ul タグや li タグで囲みたいというような場合にはウィジェットをそのまま使ったのでは不都合なことがある。

というわけで、例によってテキストウィジェットExec-PHP プラグインを使って回避する方法。タグクラウドに関する設定は
Simple Tags プラグインの設定画面で行い、テキストウィジェットの方には以下のように書くだけ。min_usage=2 なども設定画面の方に書いてもいいと思う。

<ul><li>
<?php echo st_get_tag_cloud('min_usage=2'); ?>
</li></ul>