アップロードする画像の画質を上げる

WordPressで画像アップロードの際、サムネイルが作成されるわけなんだけど、このサムネイル微妙に画質が悪い!
小さいと分かりにくいけど、うちは縦横600px位まで使うので、意外と目立つ。
と、云うことで画質上げ。

wp-include/media.phpの405行目に

1
2
3
4
5
6
7
8
function image_resize(
			$file,
			$max_w,
			$max_h,
			$crop = false,
			$suffix = null,
			$dest_path = null,
			$jpeg_quality = 90 ) {

というのがある。

この、$jpeg_quality = 90がjpgの画質。
これを100にすれば一番良い画質になるんだけど、WordPressのバージョンアップ時に上書きされて90に戻ってしまう。
それは面倒というか、100にするの忘れるのでテーマのfunctions.phpで対応することにする。
プラグイン化も可能だけどね。

テーマのfunctions.phpに以下を追加

1
2
3
4
5
6
/* jpg画質up
*******************************************************************************/
add_action('jpeg_quality', 'custom_jpeg_quality', 10, 1);
function custom_jpeg_quality() {
	return 100;
}

あたりまえだけど、画質を上げるとファイルサイズも大きくなるので注意。

feedにアイコンを

feedにアバターというかアイコンというか、アイコンかな?
まぁ、ちょっとした画像を追加したかったんだ。

dw2010120401 600x494 feedにアイコンを

グーグル先生に聞いたらいい感じの答えが返ってきたので紹介。

wp-include/fedd-rss2.phpにコードを追記すればいいみたい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
/**
 * RSS2 Feed Template for displaying RSS2 Posts feed.
 *
 * @package WordPress
 */
 
header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
$more = 1;
 
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
 
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	<?php do_action('rss2_ns'); ?>
>
 
<channel>
	<title><?php bloginfo_rss('name'); wp_title_rss(); ?></title>
	<atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
	<link><?php bloginfo_rss('url') ?></link>
	<description><?php bloginfo_rss("description") ?></description>
	<lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
	<language><?php echo get_option('rss_language'); ?></language>
	<sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
	<sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
	<!-- コード追加開始 -->
	<image>
		<url><?php bloginfo('template_url') ?>/rss2.png</url>
		<title><?php bloginfo_rss('name'); wp_title_rss(); ?></title>
		<link><?php bloginfo_rss('url') ?>/</link>
	</image>
	<!-- コード追加終了 -->
	<?php do_action('rss2_head'); ?>
	<?php while( have_posts()) : the_post(); ?>
	<item>
		<title><?php the_title_rss() ?></title>
		<link><?php the_permalink_rss() ?></link>

ただ、wordpressのバージョンアップの度に編集するハメになるので、編集しなくていいようにfeed用テンプレートを作る。

使用ているテーマフォルダにあるfunctions.phpに以下コードを追加

1
2
3
4
5
6
7
8
9
10
11
12
/* feed用テンプレート
*******************************************************************************/
remove_filter('do_feed_rss2', 'do_feed_rss2', 10);
add_action('do_feed_rss2', 'custom_feed_rss2', 10, 1);
function custom_feed_rss2( $for_comments ) {
    $template_file = '/feed-rss2' . ( $for_comments ? '-comments' : '' ) . '.php';
    $template_file = ( file_exists( get_template_directory() . $template_file )
        ? get_template_directory()
        : ABSPATH . WPINC
        ) . $template_file;
    load_template( $template_file );
}

そして、テーマフォルダにwp-include/fedd-rss2.phpをコピーすれば、テーマフォルダ内のfedd-rss2.phpをテンプレートとして使用するようになる。
画像ファイルはテーマフォルダにrss2.pngで置いておく。

ちなみに、変更が反映されるのはアクセスした時じゃなくて、feed内の文章に変更が発生した時(投稿など)です。

参考:
wordpressのRSS2.0をプチカスタマイズ – ひかげStyle
各種フィード用テンプレートの変更 : dogmap.jp

WordPressのホームページを変更する

WordPressをwordpressディレクトリにインストールすると、ホームページが/wordpress/index.phpになって、ちょっとURLが不格好になる。

こんな感じに。

http://awgnirzard.dynalias.com/wordpress/

そこで、インストールしたディレクトリ以外の場所をホームにして、ちょっとURLの見栄えを良くしよう。

こんな感じに。

http://awgnirzard.dynalias.com/

やり方

1.index.phpを設置する。

wordpressディレクトリの中にあるindex.phpをwordpressディレクトリと同じ階層(最上層ディレクトリ)にコピーする。

コピーしたindex.phpを変更する。

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */
 
/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);
 
/** Loads the WordPress Environment and Template */
require('./wordpress/wp-blog-header.php');
?>

wp-blog-header.phpはindex.phpと同じ階層でなく、wordpressディレクトリの中にあるので”/wordpress”を追加する。

2.WordPressの設定を変更する

管理画面 -> 設定 -> 一般のサイトのアドレス (URL)を変更する。


変更前:http://awgnirzard.dynalias.com/wordpress
変更後:http://awgnirzard.dynalias.com
※最後に ‘/’ は要らないようです。

「変更を保存」を押下。

3.ページ確認

管理画面の左上のブログタイトルをクリックして、変更したURLでホームページが表示されることを確認する。

たまにはチェック

たまにはAnother HTML-lint gatewayでチェックしてみる。

98点だった。

さて、修正するか。

WPAdsを使わない時のために

広告等をランダム表示できるプラグインWPAdsをテーマに組み込んでいて、その組み込んだゾーンが空になった場合、何も出力されなくなるので、空divになってしまったり、テーマが崩れる事があるので、その対策。

wpadsはprint文が書いてあるだけなので、wpadsの中で呼んでるget_wpadsを使う。
get_wpadsだとhtmlを返してくれるので、これを変数に入れてissetで中身が入ってるかどうかがわかる。

うちの場合はこんな感じ。

1
2
3
4
5
6
7
8
<?php $wpads = get_wpads('header'); ?>
<?php if(isset($wpads)): ?>
<div id="ad">
    <div id="ad_inner">
        <?php echo $wpads; ?>
    </div>
</div>
<?php endif ?>

get_wpads(‘header’)の結果を変数$wpadsに代入。
変数$wpadsが空じゃなかったら、周りのdiv要素とechoで変数$wpadsの中身を出力。

uptime!! v0.3

WordPressプラグインで管理ページ以外のところにフックを使ったことがなかったので、試しにthe_contentにフックしてみた。

とりあえず、記事に書かれた任意のhtmlコメントを置換してみることに。
“<!– uptime!!#uptime –>”で連続稼働時間
“<!– uptime!!#idletime –>”でアイドル時間

ま、実用性はないよねぇ…

uptime!! v0.2

uptimeは/proc/uptimeを参照してるだけなようなので、こっちを見て計算した方がuptimeコマンドのフォーマットに左右されないし、秒まで表示できるのでこっちを使いましょ。

$ cat /proc/uptime
8946563.01 17548528.13

/proc/uptimeを表示してみると、こんな感じ。
稼働時間 アイドル時間となってる。
まぁ、最初見たときはアイドル時間が稼働時間より長くて「なんぞ?」と思ったけど、コア二つ分のアイドル時間を合わせたものだと思うとしっくりくる。

うん、実はデュアルコアなんだ。

てなわけで、60で割ったり24で割ったりと頭がぐちゃぐちゃになりながらもできました。
時間の計算ってメンドイヨネ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
/*
Plugin Name: uptime!!
Plugin URI: http://www.dazzlingworld2.com/post_4177.html
Description: サーバーのアップタイムを表示する。
Version: 0.2
Author: だかね
Author URI: http://www.dazzlingworld2.com/
*/
 
function the_uptime() {
    $uptime = get_uptime();
    echo $uptime[0] . "日 " . $uptime[1] . "時間 " . $uptime[2] . "分 " . $uptime[3] . "秒 " . $uptime[4];
}
function the_idletime() {
    $idletime = get_uptime(1);
    echo $idletime[0] . "日 " . $idletime[1] . "時間 " . $idletime[2] . "分 " . $idletime[3] . "秒 " . $idletime[4];
}
 
 
/*
稼働時間またはアイドル時間を取得する。
$sw = 0 : 稼働時間
$sw = 1 : アイドル時間
*/
function get_uptime($sw = 0) {
    $uptime     = array(0 ,0 ,0 ,0, 0);                                         // 日時分秒㍉
 
    // 引数が0, 1以外の場合は終了する。
    if($sw != 0 && $sw != 1) return $uptime;
 
    // "/proc/uptime" から稼働時間(秒)を取得する
    unset($stdout);                                                             // $stdoutを空にする
    exec('/bin/cat /proc/uptime', $stdout, $rcode);
    $proc_uptime = explode(" ", $stdout[0]);
 
    // 取得に失敗した場合は終了する。
    if($rcode) return $uptime;
 
    // 稼働時間(秒)を日時分秒㍉に変換
    $usec = explode(".", $proc_uptime[$sw]);
    $uptime[4] = $usec[1];                                                      // ㍉
    $uptime[3] = $usec[0] % 60;                                                 // 秒
    $time = ($proc_uptime[$sw] - $uptime[3]) / 60;
    if($time > 0) {
        $uptime[2] = $time % 60;                                                // 分
        $time = ($time - $uptime[2]) / 60;
    }
    if($time > 0) {
        $uptime[1] = $time % 24;                                                // 時
        $time = ($time - $uptime[1]) / 24;
    }
    $uptime[0] = floor($time);                                                  // 日数
 
    return $uptime;
}
?>

<?php the_uptime(); ?>を呼べば稼働時間が、
<?php the_idletime(); ?>を呼べばアイドル時間が表示される。

実行結果

103日 13時間 27分 19秒 73
203日 3時間 11分 2秒 96

CPU:「かなり暇…」

uptime!!

サーバーの連続稼働時間を表示してみたくなったので、ちょろっと作ってみた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
/*
Plugin Name: uptime!!
Plugin URI: http://www.dazzlingworld2.com/post_4166.html
Description: サーバーのアップタイムを表示する。
Version: 0.1
Author: だかね
Author URI: http://www.dazzlingworld2.com/
*/
 
function the_uptime() {
    echo get_uptime();
}
function get_uptime() {
    $uptime = `uptime`;
    $day    = 0;
    $hur    = 0;
    $min    = 0;
 
    // 稼働日数の取得("x day" or "xx days"を検索)
    if(preg_match("/(\d+)\s+days?/", $uptime, $matches)) {
        $day = $matches[1];
    }
 
    // 稼働時間の取得
    if(preg_match("/(up|,)(\s+)(\d{1,2}):(\d{1,2})/", $uptime, $matches)) {
        // "up h:mm" or ", h:mm"
        $hur = $matches[3];
        $min = $matches[4];
    } else if(preg_match("/(up|,)(\s+)(\d{1,2})(\s+)min/", $uptime, $matches)) {
        // "up m min" or ", m min"
        $hur = 0;
        $min = $matches[3];
    }
 
    return $day . "日 " . $hur . "時間 " . $min . "分";
}
?>

uptimeの表示形式が稼働時間によって統一されてないので、表示がおかしくなるかも…

せっかく作ったので

デスクトップにtest.phpってファイル名で置いてたら、消して後悔しそうだったのでここに書いておこうと思う。

id属性”_wp_unfiltered_html_comment”の先頭のアンダーバーを除去するプラグイン。(ただし、手動)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
$initdir    = "/wordpress/";
$ext        = ".php";
$find       = "_wp_unfiltered_html_comment";
$replace    = "wp_unfiltered_html_comment";
 
 
$filelist = get_filelist($initdir, $ext);
foreach($filelist as $key => $filename) {
    // ファイルを読み込む
    $fcontents = @file_get_contents($filename);
 
    // 検索
    $pos = strpos($fcontents, "_wp_unfiltered_html_comment");
    if($pos !== FALSE) {
        // 文字列が存在した場合
        // 置換
        $fout = fopen($filename, "w");
        fwrite($fout, str_replace($find, $replace, $fcontents));
        fclose($fout);
        echo "replace : " . $filename . "\n";
    }
}
 
 
// $initdir以下の$extファイルのリストを取得する
function get_filelist($startDir, $ext) {
    $dir      = $startDir;
    $dirs     = array();
    $filename = array();
    $next     = 0;
    foreach(glob($dir."*".$ext) as $_filename) {
        $filename[] = $_filename;
    }
    while(true) {
        $_dirs = glob($dir."*", GLOB_ONLYDIR | GLOB_MARK);
        if(count($_dirs)) {
            foreach ($_dirs as $key => $_dir) {
                foreach(glob($_dir."*".$ext) as $_filename) {
                    $filename[] = $_filename;
                }
                $dirs[] = $_dir;
            }
        } else {
            break;
        }
        $dir = $dirs[$next++];
    }
    return $filename;
}
?>

_wp_unfiltered_html_comment replacer v0.1

Another HTML-lintで100点を目指せ

現状

dw2009071701 550x364 Another HTML lintで100点を目指せ

すでに、「よくできました。」である。
もうゴールしても良さそうな点数だけど、気になるので修正。

上へ参ります。