Moral Hazard!!

ドラマーが音楽やホームページやガラクタを作るよ。

外部WordPressサイトから投稿記事をRSSで読み込み、表示

No Comment wordpress,,

■やりたい事…Wordpressサイト1の投稿記事を、他サーバにあるWordpress2サイトで取得、表示。

同一DBサーバのWPから記事を持ってくる方法は他にあるみたいけど、設定が煩雑なのとDBサーバに外部接続用のユーザを作ったりしないといけないのでレンタルサーバでは荷が重いか。

今回はWordpress自体が出力しているRSSを取得・表示する方法。
(出典・モンキーレンチ様。こことかこことか)

<?php
include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed('http://hogehoge.com/feed'); // RSSの取得元URL
if (!is_wp_error( $rss ) ) : $maxitems = $rss->get_item_quantity(3); // 記事数
	$rss_items = $rss->get_items(0, $maxitems); 
endif;
?>

<ul>
<?php
if ($maxitems == 0): echo '<li>記事はありません</li>';
else :
date_default_timezone_set('Asia/Tokyo');
foreach ( $rss_items as $item ) : ?>

<li><a href="<?php echo $item->get_permalink(); ?>" target="_blank" rel="bookmark"><?php echo $item->get_title(); ?>
<span class="news-date"><?php echo $item->get_date('(Y/m/d)'); ?></span></a>
</li>

<?php endforeach; ?>
<?php endif; ?>
</ul>

で可能。
ただ、上記でRSSを取得した場合、取得した側のWordpressで最大12時間のキャッシュが効いてしまって最新記事が取得できないことがある。
なので、取得先Wordpressサイト1のfunction.phpに追記して、キャッシュ時間を変更する。

return 数値を秒で指定する。30分なら1800を入力することで、30分ごとにRSSキャッシュを更新してくれる。

add_filter( 'wp_feed_cache_transient_lifetime', function(){'return 1800;';});

上記はPHP5.3から使用可能な無名関数を使用。
ちなみにそれ以前のverの場合は

add_filter( 'wp_feed_cache_transient_lifetime', create_function( '$a', 'return 1800;' ) );

と匿名関数(create_functionで定義)を使うか、

function return_rss_num() {
	return 3600;
}
add_filter( 'wp_feed_cache_transient_lifetime' , 'return_rss_num' );

関数を作って入れることになる。

匿名関数と無名関数の違いはこちら

PHP5.3以降を使用している場合は、PHPマニュアルにもあるように無名関数を使用したほうがよさそう。

警告 / この関数は、内部的に eval() を実行しているので、 eval() と同様にセキュリティ上のリスクがあります。 さらに、パフォーマンスやメモリ使用効率の面でも問題があります。
PHP 5.3.0 以降を使っている場合は、この関数ではなく、ネイティブの 無名関数 を使うべきです。(出典・PHPマニュアル)

他にも無名関数は匿名関数の倍の処理速度だそうで。

Dreamweaver CS6ではphp5.4のシンタックスチェックをサポートしない件(雑翻訳)

No Comment html,css,php,

DreamweaverCS6でphp5.4から実装されている配列のショートハンドを書こうとしたらシンタックスエラーが出た。
Adobeのサイトで質問があったけど、要約すると

「CS6ではphp5.4以降はサポートしないからCC買え」

との事。
詳細は以下。

Q:PHPの配列でショートハンド使おうと思ったら構文エラーが出るんだけど?

A:そりゃそうさ、DreamweaverCS6はPHP5.3までしかサポートしないよ。
CCならショートハンドを含むphp5.4構文をサポートしてるよ。

Q:OK、CS6は今後アップデートしないってこと?

A:いいえ。CS6は買い切りで永久ライセンス、CCは期間契約(月額・年額)という違いがある。
貴方はCS6をこれ以上支払うことなく永久に使えるけど、これ以上アップデートしない。
CCはお金を支払い続けている間、アップグレードし続ける。

Q:なるほどね、サンキュー。

…こう考えると古いソフト使ってるなぁ…。
そろそろ環境変えないといけないとは思いつつ…

以下、原文。
https://forums.adobe.com/thread/1393664?tstart=0

If you use the shorthand [] in PHP for arrays, dreamweaver thinks it is syntax error.

That's correct. Dreamweaver CS6 supports only PHP 5.3 syntax.
Dreamweaver CC supports the 5.4 syntax (including shorthand array).

OK, so there will be no update for the CS6 version?

No. That's the difference between buying CS6 on a perpetual licence and CC on a subscription basis. You can use CS6 indefinitely without paying any more, but it will not be updated. CC gets regular updates, but is available only on a subscription basis.

OK, makes sense. Thank you.

wordpressで管理画面に設定しているタイムゾーンとずれる問題

No Comment wordpress,駄日記,

2.7くらいからアップデートして使っているwordpressの管理画面でタイムゾーンの設定を「'UTC+9'」(日本時間)にしているのに、タイムゾーンがUTC(グリニッジ標準時)のまま。query_postsで投稿を直接日時指定しても上手く反映されない困った。

wordpressのフォルダ直下「wp-settings.php」が

// WordPress calculates offsets from UTC.
date_default_timezone_set( 'UTC' );

と、UTCのままになっていることがある。
これを

// WordPress calculates offsets from UTC.
date_default_timezone_set( 'UTC+9' );

にすることで、日本時間になる・・・のだが!

wp-settings.phpはコアファイルなので勿論アップデート時には上書きされてしまう。
なので上記方法はNG。

hetemlなどのtimezoneを変更できない&UTCのレンタルサーバーは、date関数をwordpress内で用意された
「date_i18n」
という関数に置き換える事で解決できる。

【php】user agentでiPhoneを判別する【javascript】

No Comment html,css,php

やりたいこと・・・タイトルまんま。Flashを使っているサイトの場合、iPhone用の表示も作らないと。

↓PHPの場合。

$ua = $_SERVER['HTTP_USER_AGENT'];
if((ereg("iPhone",$ua)) || (ereg("iPod",$ua))) {
//iPhone用の出力;
} else {
//その他用の出力;
}

↓javascriptの場合。

var agent = navigator.userAgent;
if( agent.search(/iPhone/) != -1 ){
document.write('iPhoneだった場合の出力');
}else{
document.write('iPhoneじゃ無い場合の出力');
}