Moral Hazard!!

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

wordpressでタイトルを空白で投稿した時に、自動的にタイトルを挿入する

1 Comment wordpress,

・やりたいこと

WordPressは、記事投稿時に「タイトルと本文が両方空白」の場合は編集が反映されない。
カスタムフィールドのみの記事などを投稿するために、特定の投稿タイプでタイトルが空白の時は自動的にタイトルを挿入して投稿されるようにする。

functions.phpに以下を記載。


function replace_post_title($title) {
    global $post;
    //post_typeを判定(post, page, カスタム投稿)
    if( $post->post_type == '投稿タイプ' ){
        if($title === ""){
                    $title .= '自動投稿するタイトル名';
        }
    }
    return $title;
}
add_filter('title_save_pre', 'replace_post_title');

上記で、タイトルを空白で投稿した場合、自動的にタイトル名が挿入される。

引用元サイト com4tis様

引用元では自動的にカスタムフィールドを入力するようになっているが、そこまでは必要なかったため、簡単に。

wordpressプラグインの設定項目を変更すると403エラーが出る件

No Comment wordpress

あるプラグインの設定項目を変更して保存すると403エラーが出て、設定変更を反映できないことがあった。

僕が使ってたのはwp polesとfancybox for wordpressなんだけど、そのどっちもが同じ挙動で慌てた。

最初は「管理画面でできなければ直接書き換えればいいじゃない!」とマリーアントワネットばりに強引にmysqlを直接書き換えてたんだけど、403が出る原因がレンタルサーバーの「WAF」にある事が分かった。

hetemlやロリポップが導入してるサーバーサイドのセキリュティソフトウェア
「WAF(ウェブアプリケーションファイアウォール)
はデフォルトで有効になってるが、これがたまに誤検知する。

以前ロリポップで共用サーバのDB経由で大量ハッキングを受けたときも「WAFを有効にしてね!」とロリポップさんからお達しがきたが、実際WAFを有効にしてる事でwordpress運用時にトラブルが出るケースが多い。

だからといって面倒だからWAFをオフにする、ってのもアレ。
なのでこちらに書いてあるWAFをONにしたままwordpressを運用する方法などはいかがかと。

あーなるほどね、レンタルサーバが出してる共用SSLのURLにだけWAFをオフにして、htaccessで認証をかけて、管理画面はそこからログインする。
それでサイト自体のSQLインジェクションを防ぐってことね。

さらにXSS(クロスサイトスクリプティング)を防ぐために、更新作業は普段のブラウザと違うブラウザを使えとのこと。
うわー手間!
でも安全ってこうまでしないと手に入らないってことですね。

僕は面倒なので、403が出たときだけWAFを切ります。

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」
という関数に置き換える事で解決できる。

wordpressに挿入したyoutube動画がz-indexを突き破る件

No Comment wordpress,

youtube動画のurlを張り付けるだけでサイトに動画を表示できるwordpressだが、SafariやIEなどのブラウザでは、lightboxでポップアップした画像にyoutube動画が覆いかぶさってしまう。

解決には、ヘッダにでも以下をぶち込む。

<script type="text/javascript">
jQuery(function($){
$('iframe').each(function(){
$(this).attr('src',$(this).attr('src')+'&amp;wmode=transparent');
});
});
</script>

WP-Cycleで透過画像をフェードさせたいのにIE8以下では透過出来てない件を解決する

No Comment wordpress,

とても便利なスライダープラグインWP-Cycleですが、IE8以下ではpng画像が透過しません。(ver.0.1.13現在)

■解決策■

外人さんが頑張ってくれてます。

こちらで、
「wp-cycle.phpの438から446行を書き換えればいいのさHAHA」
と書かれてます。
具体的には以下。

jQuery(document).ready(function($) {
$("#<?php echo $wp_cycle_settings['div']; ?>").cycle({
fx: '<?php echo $wp_cycle_settings['effect']; ?>',
timeout: <?php echo ($wp_cycle_settings['delay'] * 1000); ?>,
speed: <?php echo ($wp_cycle_settings['duration'] * 1000); ?>,
pause: 1,
fit: 1
});
});

を、

jQuery(document).ready(function($) {
$("#<?php echo $wp_cycle_settings['div']; ?>").cycle({
fx: '<?php echo $wp_cycle_settings['effect']; ?>',
timeout: <?php echo ($wp_cycle_settings['delay'] * 1000); ?>,
speed: <?php echo ($wp_cycle_settings['duration'] * 1000); ?>,
cleartypeNoBg: true
});
});

に書き換え。具体的には最後の2項目「pause: 1,fit: 1」を「cleartypeNoBg: true」に置き換えたらOK。

※最終Updateが去年の8月だけど、もしアップデートしたらこの部分を再度修正しないといけない。

これで背景は透過したかに見えたんだけど、今度はフェードの時に透過画像の縁にへんな黒いノイズがのってしまう。

なので今度はVIVID Labs.さんから知恵を拝借、IE用のフィルタ・AlphaImageLoaderを使用して回避する。

<!--[if lte IE 8 ]>
<script language="javascript">
jQuery(function() {
if(navigator.userAgent.indexOf("MSIE") != -1) {
jQuery('img').each(function() {
if(jQuery(this).attr('src').indexOf('.png') != -1) {
jQuery(this).css({
'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' +
jQuery(this).attr('src') +
'", sizingMethod="scale");'
});
}
});
}
});
</script>
<![endif]-->

WP-Cycleのタグ直後にでも、「IE8以下だったらこのフィルタをpng画像に適用する」と指定。
wordpressなので$をjQueryに変更しています。

これでIEでも(多少ジャギるけど)透過でフェード表示させることが出来ました。