毎日モザイク

White Room Layout Works

Archive for the ‘WordPress’ Category

2009-04-28T14:58:01+09:00 [Tue]
--> [WordPress]

作業軽減策。

MD Comics Neoのページですが、やっつけ風味の仕様になっていた、画像のタグ入れ部分を、爆乳様(仮名)の負担を軽減するためと、ミスする隙を埋めるために、仕様変更しました。

取り合えず要求仕様を満たすために、それぞれのサイズのタグをカスタムフィールドに入れるという、非常に回りくどい手順になっていましたが、その部分をこちらこちらを参考にして、勝手にやってくれるようにしました。もはや、「投稿に挿入」すら必要ありませんw。

/* functions.php*/
function get_the_post_image($postid,$size,$order=0,$max=null) {
    $attachments = get_children(array(
                                    'post_parent' => $postid,
                                    'post_type' => 'attachment',
                                    'post_mime_type' => 'image'
                                    ));
    if ( is_array($attachments) ){
        foreach ($attachments as $key => $row) {
            $mo[$key]  = $row->menu_order;
            $aid[$key] = $row->ID;
        }
        array_multisort($mo, SORT_ASC,$aid,SORT_ASC,$attachments);
        $max = empty($max)? $order+1 :$max;
        
        for($i=$order;$i<$max;$i++){
            $the_image = $attachments&#91;$i&#93;;
            $attachmenturl = wp_get_attachment_url($the_image->ID);
            $attachmentimage = wp_get_attachment_image($the_image->ID, $size );
            $img_title = $the_image->post_title;
            $img_desc = $the_image->post_excerpt;
            $img_alt = $the_image->post_name;
            
            if ($size == "thumbnail" || $size == "medium"){
                $attachmentimage = preg_replace('/class="attachment.*?"/','class="alignright size-'.$size.'"',$attachmentimage);//CSSに合わせるため
                 $attachmentimage = preg_replace('/alt=".*?"/','alt="'.attribute_escape($img_alt).'"',$attachmentimage);//altが直接拾えないので
                echo '<a href="'.clean_url($attachmenturl).'" rel="lightbox&#91;'.get_the_ID().'&#93;" title="'.attribute_escape($img_title).'">'.$attachmentimage.'</a>';
            } elseif($size == "large") {
                $attachmentimage = preg_replace('/class="attachment.*?"/','class="alignright size-'.$size.'"',$attachmentimage);
                 $attachmentimage = preg_replace('/alt=".*?"/','alt="'.attribute_escape($img_alt).'"',$attachmentimage);
                echo $attachmentimage;
            } else {
                echo '<img src="'.clean_url($attachmenturl).'">';
            }
            
        }
        
    }
    
}
/* index.phpなどでの呼び出し部分*/
<?php  get_the_post_image(get_the_ID(), 'thumbnail', 0, 1); ?>
/* get_the_post_image($post_id, $size, $order, $max)
$post_id= 記事ID
$size = 画像のサイズ(thumbnail,medium,large,full)
$order = ギャラリーでの順番
$max = $orderから何枚使うか
*WebTecNoteさんより拝借。*
*/

WebTecNoteさんから、記事に添付された画像をソートする部分を拝借して、Forumからデータを拾う部分をいただいて、くっつけただけのものですが……。

これで、扉ページと、個別ページと、リストページに、それぞれ、何もせずに予定どおりの画像が入るようにできました。

先人の皆さんに感謝。

2009-04-22T17:20:49+09:00 [Wed]
--> [WordPress]

WP-Click-Tracker

リンクのクリックを記録する、wp-click-trackerですが、なかなか楽しいです。

a-blogタンも採用していましたが、どのリンクがクリックされたかがわかって、いい塩梅です。何の役に立つってわけでもないんですが……。

とっても立派なwp-click-trackerですが、ちょっとハードコーディングが目立ちます。

0.4.2で修正されましたが、admin.inc.phpのダッシュボードのウィジェットからのリンクがトップレベルに設置するのを前提にハードコーディングされていて、設置場所を変更すると(http://example.com/ からhttp://example.com/example/へ)リンク先が変わって、表示されなくなりました。

同じようなのが、0.4.2でも残っています。SQLを発行するところで、テーブル名がwordpressのデフォルト名でハードコーディングされています。

/* admin.inc.php 593line */
$sql = "SELECT weekday(click_date) AS Day,COUNT(weekday(click_date)) AS CLICKCOUNT FROM `wp_tracking_clicks` WHERE link_id = '".$wpdb->escape($link_id)."' GROUP BY Day ORDER BY Day";

/* admin.inc.php line 634 */
	$sql = "SELECT HOUR(click_date) AS Hour,COUNT(HOUR(click_date)) AS Clicks FROM `wp_tracking_clicks` WHERE link_id = '".$wpdb->escape($link_id)."' GROUP BY Hour ORDER BY Hour";

/* admin.inc.php  line 799 */
	$sql = "SELECT COUNT(tc.link_id) AS click_count, date_format(click_date,\"%Y-%m-%d\") AS click_date_f FROM wp_tracking_clicks tc, wp_tracking_links tl WHERE tc.link_id = tl.link_id AND date_format(click_date,\"%Y-%m-%d\") >= '$date' GROUP BY click_date_f ORDER BY click_date ";

/* admin.inc.php  line 841 */
	$sql = "SELECT COUNT(tc.link_id) AS click_count, date_format(click_date,\"%Y-%m-%d\") AS click_date_f FROM wp_tracking_clicks tc, wp_tracking_links tl WHERE tc.link_id = tl.link_id AND date_format(click_date,\"%Y-%m-%d\") >= '$date' GROUP BY click_date_f ORDER BY click_date ";

/* admin.inc.php  line 882 */
		$sql = "SELECT COUNT(click_id) AS click_count,wp_tracking_clicks.link_id AS link_id, date_format(click_date,\"%Y-%m-%d\") AS click_date, link_title, link_destination, click_refer FROM wp_tracking_links,wp_tracking_clicks WHERE wp_tracking_links.link_id = wp_tracking_clicks.link_id AND date_format(click_date,\"%Y-%m-%d\") = '$date' AND click_refer != '' GROUP BY wp_tracking_clicks.link_id ORDER BY click_count LIMIT 8";

/*
$wpdb->prefix."tracking_clicks
$wpdb->prefix."tracking_links
と、したほうがいい所が、それぞれ、wp_tracking_clicks、wp_tracking_linksになっている。
*/

デフォルトで使っていれば、なんの問題もないのですが、wordpressはインストール時にテーブルのプレフィックスを変更できるようになっているので、ここは変数で拾ってくるべきでしょう。っていうか、click-tracker.phpのほうはそうなってるし……。

と、いったようなことを、機械翻訳で作者のブログにコメントしたら、SPAMと判断されたらしく、消されちゃいましたw。

英語もできないのに、無理しないで、以前、よそでバグを指摘したときみたいに、動かない原因のコードに←いまここみたいな感じで指摘するのが無難かも……。

2009-04-02T03:38:08+09:00 [Thu]
--> [WordPress]

quicktags.js

WordPressの投稿画面のタグボタンの、ins,delの時間帯問題は有名で、解決策がよく乗ってますが、これには他の問題もあります。

時間帯問題の解決策は、

/*wp-includes/js/quicktags.js 27行目界隈*/

var now = new Date();
var datetime = now.getFullYear() + '-' +
zeroise(now.getMonth() + 1, 2) + '-' +
zeroise(now.getDate(), 2) + 'T' +
zeroise(now.getHours(), 2) + ':' +                     
zeroise(now.getMinutes(), 2) + ':' + 
zeroise(now.getSeconds() ,2) +
'+09:00';

と、元のコードで、getUTC〜になっているところから、’UTC’を取って、ローカルタイムにして、+00:00になっているところを+09:00に書き換えるというものです。

これ、コードを追っていくと、ここの部分はjsが読み込まれるときに一度だけ評価され、ins,delなど、日付を使うボタンに入れる要素として、配列に入っちゃってます。

ようするに、onclickイベントの時には、既にquicktags.jsがブラウザに読み込まれて、ボタンが作成されたときに入っている時刻が使われていて、「ボタンをクリックした瞬間の時刻が表示される」という、期待される動作をしてくれません。

自動保存もXMLHttpRequestでやっているらしく、ページのリロードを伴わないため、最初に投稿画面を開いたときの時刻が使われ続けます。これは不便。

insやdelの時間なんか、大体合ってればいいんですが、毎日新聞の誤報の例もあるので、多少は気をつかった方がいいかも。

onclickイベントのときに、時刻を取り直すように書き換え……

てくれないかなw。

時間が空いたら自力でやるか……。JavaScriptはあんまし得意じゃないんですが、この程度ならなんとかなるだろw。

2009-03-18T15:45:12+09:00 [Wed]
--> [WordPress]

プラグイン整理。

ごちゃごちゃ入れてみましたが、この辺に絞りました。

Exec-PHPは、色々いじっていみた結果、結局テンプレートに書いた方が楽っていうか、細々小技を使うような感じでもないので、そっちをいじることに。

ビジュアルエディタは、素人にはやっぱり難しいので、より直感的なHTMLエディタを使うことにしたので、それ系の拡張は削除して、代わりによく使うタグを追加できるAddQuicktagを入れました。

ビジュアルエディタの何が難しいかって言うと、見た目のすべてをCSSで作っているのに、下手に出来上がり風に見えてしまうため、実際に表示されたときの違和感が大きい。自分で書いたCSSなので、タグを打つ度に、どう並んで、どう飾られるかが直感でわかる手書きの方がわかりやすいです。しかも、いろんなものを整理してくれたりするので、ますます分かりづらい。何が消されて、何が直されるかを覚えるのが面倒だっていうのもあります。

一枚ものを作るなら、ビジュアル系のエディタも楽かもしれませんが、テンプレにしたがってその都度書き出されるものを作るのは、HTMLのほうが楽っぽいです。AddQuicktagと、よく使う型を保存できるPost Templateと組み合わせて省力化する方向で。

あと、いじったところは、404ページを内部検索ページにしたこと、CSSをわずかにいじったくらいです。

2009-03-07T09:07:16+09:00 [Sat]
--> [WordPress]

syntaxhighlighterPlus覚書。

WordPress俺メモ。
SyntaxHighlighter Plus
の書き方。

言語一覧
* C++ — cpp, c, c++
* C# — c#, c-sharp, csharp
* CSS — css
* Delphi — delphi, pascal
* Java — java
* JavaScript — js, jscript, javascript
* PHP — php
* Python — py, python
* Ruby — rb, ruby, rails, ror
* SQL — sql
* VB — vb, vb.net
* XML/HTML — xml, html, xhtml, xslt

以下のように入れる
[sourcecode language=’css’]
//code here…
[/sourcecode]

こんな感じ。

/* 'css' sample */
h1 {
    font-size: 2em;
    color: #FF0000;
}