未分類

WordPressの自動更新を止めるには

スクリーンショット 2014-01-30 14.33.41
日本語版ではこの3.8から機能が有効になったもので、3.8以降に更新した後、管理画面のダッシュボードの「更新」を開くと

最新バージョンの WordPress をお使いです。 今後のセキュリティ更新は自動的に適用されます。

と表示される。
セキュリティの面や更新手間を考えると便利な機能だが、いろいろなプラグインでカスタマイズしている場合など、知らないタイミングでバージョンアップによる不具合が生じてしまう可能性も考えられる。

自動更新についての情報は

WordPress Codex 日本語版
http://wpdocs.sourceforge.jp/自動バックグラウンド更新の設定

に以下の記載があり

WordPress には4種類の自動更新機能があります。
コアファイル更新
プラグイン更新
テーマ更新
翻訳ファイル更新

WP_AUTO_UPDATE_CORE
の定数を以下の3つのいずれかの方法で定義することで、コア更新の包括的有効化・無効化を一度に行うことができます。
WP_AUTO_UPDATE_CORE は以下の3つの値いずれかを使って定義できます。それぞれ異なる動作をします。

true – 開発版、マイナー、メジャーアップグレードをすべて有効化
false – 開発版、マイナー、メジャーアップグレードをすべて無効化
minor – マイナーアップグレードのみを有効化し、開発版・メジャーアップグレードを無効化

微調整用のフィルタとして

add_filter( ‘allow_dev_auto_core_updates’, ‘__return_true’ );

等のサンプルも掲載されている。

おススメの方法とし、テーマファイルの変更等に影響されない「wp-config.php」ファイルに設定を追加するのが良いだろう。

wp-config.phpファイル内に以下を追加

define(‘AUTOMATIC_UPDATER_DISABLED’,true);

追加する場所はどこでも構わないと思うが、

/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */

の上に追加

これにより、コアファイルを含むすべての自動更新を完全に無効化出来る。

wp-config.php修正後に管理画面のダッシュボードの「更新」を開くと

スクリーンショット 2014-01-30 14.43.19
最新バージョンの WordPress をお使いです。

となり、「 今後のセキュリティ更新は自動的に適用されます。」の文が表示されなくなっていることで確認出来る。

当然のことながら、これにより自動での更新がされないことから、自分で必要な更新をすることを忘れないように。

Chromeで自動的に頻繁に訪れているサイトが表示されるのを非表示にする方法

現在のChromeではウィンドウを開くと、過去に訪れていたサイトがスクリーンショットのサムネイルと共に複数表示されるのが標準となっています。
いつも同じサイトにアクセスする人にとっては手間いらずの便利な機能かも知れませんが、いろいろなサイトを見る機会の多い人にはかえって邪魔だったり、訪れたページを周りの人に見られたくない場合もあるでしょう。
その場合、Google Chromeの設定では非表示にすることが出来ないため以下の方法で非表示にします。

1. アドレスバーに chrome://flags と入力

2. 「これらの試験運用版は問題が発生する可能性があるため、ご利用の際には十分ご注意ください」という警告の下に多数のオプション設定が表示される。

3. 『Instant Extended APIを有効にする』の項目「既定」または「有効」を「無効」にして、画面下部にある「Chromeを再起動」をクリック。

これで再起動後は表示されなくなります。

※変更したい項目は『Instant Extended APIを有効にする』で項目全体の1/3あたりにあるが、見つけるのが面倒なのでページ内検索で『Instant Extended APIを有効にする』を探すといい。

CSSのみで簡単にテーブルの表示をレスポンシブルデザインにしたい時

Javascriptも使わず、スタイルシートのみで簡単にテーブルのデザインを変更して、スマートフォン等でも見やすくすることが可能です。

CSS

/* 通常時の設定 */
#list-tbl{
	border-collapse: collapse;
}
#list-tbl th{
	width: 180px;
}
	#list-tbl th,
	#list-tbl td{
	border: 1px solid #ccc;
}

/* 800px以下になった場合の設定 */
@media only screen and (max-width:800px){
	#list-tbl th,
	#list-tbl td{
		width: auto;
		display: list-item;
		list-style-type: none;
		border: none;
	}
	#list-tbl th{
		color: #fff;
		background: #ccc;
	}
}

HTML

<table id="list-tbl">
<tbody>
<tr><th>1月3日</th><td>南方週末社説差し替え事件。同月7日より出版の自由を求めるデモが行われた。</td></tr>
<tr><th>1月13日</th><td>シボレー・コルベット7代目モデル(C7型)がアメリカの「デトロイトモーターショー13」プレビューイベントにて発表される。</td></tr>
<tr><th>1月16日〜20日</th><td>アルジェリア南部イナメナスの天然ガス関連施設をイスラム系武装勢力が襲撃し、日本人技術者を始めとする多数の死傷者が発生した。(詳細→アルジェリア人質拘束事件)</td></tr>
<tr><th>1月17日</th><td>ソマリアを正式承認。国交を樹立</td></tr>
<tr><th>1月20日</th><td>アメリカ合衆国大統領就任式。2012年11月の選挙の結果により、バラク・オバマ大統領が続投でアメリカ大統領に就任した。</td></tr>
<tr><th>1月22日</th><td>ロシアの小型衛星BLITSがスペースデブリに衝突。BLITSは衛星としての機能を喪失。当初は2007年1月11日に破壊された中国の気象衛星風雲1号Cの破片と思われていた。<br />スマトラ島の北部、アチェ州直下でマグニチュード(M)5.9の地震が発生、14歳の少女1人が死亡、15人が負傷した。(詳細→スマトラ島地震 (2013年1月))</td></tr>
</tbody>
</table>

PC(ウィンドウサイズ800px以上の場合の表示)
スクリーンショット 2013-06-21 14.41.57

スマートフォン等(ウィンドウサイズ800px未満の場合の表示)
スクリーンショット 2013-06-21 14.43.34

WordPressの投稿記事内でjavascriptを使いたい時

通常、WordPressでは記事内に書かれたjavascriptは、たとえテキストモードで入力しても自動的にエスケープされ動かない仕様となっている。

記事内でjavascriptを使いたい場合の解決策としてはカスタムフィールドを使用したりプラグリンを追加する等いくつかの方法があるが、最も簡単なのは inline-javascript というプラグインを導入する方法。
使い方はいたって簡単。
inline-javascript をインストールしてプラグインを有効化。
あとは使いたいjavascriptの前後を
[inline]〜[/inline]
で囲むだけでいい。

例えばページを読み込んだら任意のページに自動的にジャンプさせたい時は
テキストモードにして以下のように記載する。

[inline]
<script LANGUAGE="JavaScript">
function autoLink(){
	location.href='https://www.digital-gate.com/';
}
setTimeout('autoLink()',0); 
</script>
[/inline]

実際に上記を入力・保存すると分かるが、scriptのタグは自動的に [ ] に置き換わる。

[inline]
[script LANGUAGE="JavaScript"]
function autoLink(){
	location.href='https://www.digital-gate.com/';
}
setTimeout('autoLink()',0); 
[/script]
[/inline]

もちろんこのままできちんと動作するからこのままで良い。

Dreamweaver + PhoneGapで作成したアプリの権限を変えたい時

Adobe Dreamweaver 5.5から採用されたPhoneGapを使ってのアプリ作成は、特別な知識が無くてもハイブリッドアプリの作成を可能にしたが、

[サイト] → [モバイルアプリケーション] → [ビルド] → [Android](Androidアプリの場合)

から書き出されるアプリには無条件で多くの権限が付いてしまっている。
実際に様々な情報を端末から得ているのであれば当然だが、特にそんな機能を持たせていないのにインストールの際に余分が権限で利用者を不安にさせるのは好ましくない。

Dreamweaverからのビルドの変更(設定)できないアプリの権限を変えたい場合は以下の手順で行えば良い。

必要なのはEclipse
Eclipseのインストールや設定は既に済ませてあるとして話を進める。

まずはDreamweaverで

[サイト] → [モバイルアプリケーション] → [ビルド] → [Android](Androidアプリの場合)

の手順でビルドを済ませておく。

次に、Eclipse

[ファイル] → [新規] → [その他…] と進み

[Android] → [既存コードからの Android プロジェクト] → [次へ >] をクリック

[ルート・ディレクトリー] → [参照…] をクリック

Dreamweaverでビルドしたファイルのフォルダを選択して [開く] をクリック

プロジェクト:
[Project to Import] と[新規プロジェクト名](DefaultActivity)が入っていることを確認
左にチェックが付いていることを確認
(※新規プロジェクト名(DefaultActivity)はこの時点で変更することも可能)

[プロジェクトをワークスペースにコピー] にチェックを付ける

[完了] をクリック

これでパッケージ・エクスプローラーにDefaultActivityが表示される。
DefaultActivityをダブルクリック
直下にあるAndroidManifest.xmlをダブルクリックして開く
(binの中にもAndroidManifest.xmlがあるが直下のファイルを開く)
中身を見るとandroid.permissionで様々な権限が設定されているのが確認できる。

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />   
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />

この中で、作成したアプリで必要なものを残し削除する。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.INTERNET" />

上記の例は、位置情報を取得して情報を表示するアプリ
位置情報の取得と、データをネットから取得するため、
ACCESS LOCATION類やINTERNETが必要

不要なuses-permissionを削除したら、パッケージ・エクスプローラーのDefaultActivityを選択した状態で

[実行] → [実行] → [Androidアプリケーション] [OK] をクリック

エラーがなければエミュレータが立ち上がり
workspaceのDefaultActivity内のbinフォルダ内にDefaultActivity.apkが作られる。

.apkファイルをサーバにアップロードして、Android端末のブラウザでアクセス

[ダウンロード] → [インストール](事前に設定 セキュリティで「提供元不明のアプリ」のインストールを許可しておくこと)

[設定] → [アプリ] 該当のアプリの情報を見ると

権限が減ったことが確認できる。

あとは実際に必要な権限を削除してしまっていないかアプリの機能を確かめて終了。

URoad-HomeはWM3500Rよりも使えるか

光の固定回線からWiMAXに変更し、モバイルWiMAXルータ AtermWM3500R + クレードルを使って運用してきたが、WiMAXのサイトに行ったら無料で最新ルーターに変更出来るキャンペーンをやっていた。
130215bigcampaign03-b
無料で手に入る機種の中に家庭内で据え置きするのに向いたURoad-Homeが含まれていたから、さっそく電話をして発送手続き。

DSC_0027

数日で到着

DSC_0029

中身も黒でお洒落なパッケージ


DSC_0030

本体を取り出すと、本体に取り付ける足とACアダプターとLANケーブル
本体にLANポートが2個あるから無線を積んでいないテレビ等にも使えて便利。

気になるのは電波強度と速度。
今まではWM3500Rでは全ての部屋には届かなかったため、有線で無線ルーターに接続して飛ばしていたが、URoad-Homeでは単体で全ての部屋に届くようになった。
無駄な機器も減りコンセントの消費も減って一石二鳥。
速度もWM3500Rと変わらない。

無料キャンペーンは3月で終了するが、購入しても十分活用できるお薦め機種と言える。

URoad-Home

ローカルストレージで複数の値を保存したい時(JSON)

ローカルストレージで複数の値を保存したい時、最も簡単なのはそれぞれの名前で複数のデータを保存すること
例えば以下の方法。

Javascript

<script type="text/javascript">
//複数のローカルストレージに保存
function setConfig(){
	var n = document.getElementById("na").value;
	var t = document.getElementById("te").value;
	var a = document.getElementById("ad").value;
	localStorage.setItem('onamae',n);
	localStorage.setItem('tel',t);
	localStorage.setItem('address',a);
	alert("保存しました");
}
</script>

上記の方法は、保存データがそれぞれ多い場合はそれでも構わないが、少ないデータで無駄に多種類のデータを保存するのは好ましい方法とは言えない。

ローカルストレージに複数の値を保存するにはいくつか方法があるが、今後の展開をふまえてJSON形式で保存する方法を紹介する。
そのまま使えるサンプルになっているから、適所にコピーして自由に改造して使ってもらいたい。

なお、今回も以下のサンプルではjqueryを使うことを前提としているから、まずはヘッダーでjqueryを読み込んでおくこと。

html

<script type="text/javascript" src="https://code.jquery.com/jquery-1.8.2.min.js"></script>

Javascript
<script type="text/javascript">
//ローカルストレージに保存
function setConfig(){
	var n = document.getElementById("na").value;
	var t = document.getElementById("te").value;
	var a = document.getElementById("ad").value;
	//保存データ
	var datalist = {onamae:n,tel:t,address:a}
	//ローカルストレージに保存
	localStorage.setItem('config', JSON.stringify(datalist));
	alert("保存しました");
}
//ローカルストレージを削除
function removeConfig(){
	na.value = '';
	te.value = '';
	ad.value = '';
	localStorage.clear();
	alert("削除しました");
}
//ローカルストレージから取得
function getConfig(){
	if(localStorage.getItem("config")){
		var d = JSON.parse(localStorage.getItem("config"));
		na.value = d.onamae;
		te.value = d.tel;
		ad.value = d.address;
	}
}
//ページ読み込み時にローカルストレージから取得
$(document).ready(function(){
	getConfig();
});
</script>

html
お名前<input type="text" id="na" />
電話番号<input type="text" id="te" />
住所<input type="text" id="ad" />
<button id="button" onclick="setConfig()">保存</button>
<button id="button" onclick="removeConfig()">すべて削除</button>

html5の機能、ローカルストレージを使いたい時

html5のローカルストレージはとても簡単に使えて便利。わざわざ仕組みを解説するより、なるべく単純でそのまま使えるサンプルを記載しておくから、コピーして必要な箇所を変更して使ってもらいたい。
PCから試す時はGoogleのChrome等、html5に対応したブラウザを使うこと。下のサンプルの場合、好きな名前を入力して保存ボタンをクリックした後、リロードしたり別のページを読み込んだ後に戻るとデータが保存されていることが確認できる。

なお、以下のサンプルではjqueryを使うことを前提としているから、まずはヘッダーでjqueryを読み込んでおくこと。

html

<script type="text/javascript" src="https://code.jquery.com/jquery-1.8.2.min.js"></script>

ローカルストレージは同じ名前で空の内容を上書きすることで見かけ上削除された状態には出来るが、完全に削除したいと思うユーザーもいるから、削除ボタンのサンプルも一緒に載せておく。

Javascript

<script type="text/javascript">
//ローカルストレージに保存
function setConfig(){
	var na = document.getElementById("na").value;
	localStorage.setItem('name',na);
	alert("保存しました");
}
//ローカルストレージを削除
function removeConfig(){
	na.value = '';
	localStorage.clear();
	alert("削除しました");
}
//ローカルストレージから取得
function getConfig(){
	config_na = localStorage.getItem('name');
	na.value = config_na;
}
//ページ読み込み時にローカルストレージから取得してテキストボックスに表示
$(document).ready(function(){
	getConfig();
});
</script>

html

お名前<input type="text" id="na" />
<button id="button" onclick="setConfig()">保存</button>
<button id="button" onclick="removeConfig()">すべて削除</button>

なお、スマートフォンなどHTML5に対応している可能性が高い環境はこれだけで良いが、PC環境の場合は、まだローカルストレージに対応していないブラウザでアクセスされることが多いだろう。
そんな時は下のようなサンプルで、アラートを出すか、サンプルを参考に条件分けをして処理を分岐するといい。

Javascript

if(typeof localStorage == 'undefined'){alert("ローカルストレージが使えません");}

 

Javascriptで引数からセレクトメニュー(プルダウンメニュー)を選択状態にしたい時

前回、Javascriptでセレクトメニュー(プルダウンメニュー)が変更されたらGETで送信する方法を書いたが、引数付きでジャンプした際、セレクトメニューはデフォルトの一番上が選択された状態に戻ってしまう。

PHP等の場合は、セレクトメニューを書き出す際にselectedを付加して書き出せば良いが、.htmlの場合はJavascriptで処理する。
例えば以下URLの場合

https://www.digital-gate.com/?c=2&g=1

下のHTMLを見れば分かるが、通常何もしない状態ではそれぞれのプルダウンは「全クラス表示」「全グループ表示」となるが、それでは表示されているであろう内容と合わないから「c」のプルダウンが「2組」、「g」のプルダウンが「グループ1」が選択された状態にしたい。

URLの引数を取得して、プルダウンメニューが選択された状態になるようにする方法は以下のサンプル

Javascript

function getVars(){
	var vars = [], hash;
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	for(var i = 0; i <hashes.length; i++){
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	return vars;
}

上記Javascriptを使うと引数から設定値を簡単に取得出来る。

class = getVars()["c"];
group = getVars()["g"];

使い方はこんな感じ。

あとはjqueryを使ってプルダウンの選択を変更するだけ。
※別途jqueryを読み込んでおくこと。

$('#class-items').val(class);
$('#group-items').val(group);

具体的にはこんな感じ。

HMTL

<form method="get" action="" name="form">
	<select name="class" onChange="multipleNavi()" id="class-items">
		<option value="0">全クラス表示</option>
		<option value="1">1組</option>
		<option value="2">2組</option>
	</select>
	<select name="group" onChange="multipleNavi()" id="group-items">
		<option value="0">全グループ表示</option>
		<option value="1">グループ1</option>
		<option value="2">グループ2</option>
	</select>
</form>

Javascript複数のセレクトメニュー(プルダウンメニュー)どちらかが変更されたらGETで送信したい時

表示の絞り込み等で複数のセレクトメニューを使用している時、送信ボタンをクリックしなくてもセレクトメニューに変更があった時点で送信してくれると便利な場合がある。

ちなみにセレクトメニュー(プルダウンメニュー)が1個の場合は

Javascript

function navi(c){
var class = c.options[c.selectedIndex].value;
location.href = '?c=' + class;
}

HTML

<form method="get" action="" name="form">
	<select name="class" onChange="navi(this)" id="class-items">
		<option value="0">全クラス表示</option>
		<option value="1">1組</option>
		<option value="2">2組</option>
	</select>
</form>

上記ではクラスのプルダウンを変更すると同ページにGETで引数が付いた状態でジャンプする。

例 https://www.digital-gate.com/?c=3

セレクトメニュー(プルダウンメニュー)が2個の場合は

Javascript

function multipleNavi(obj){
var class = document.form.class.value;
var group = document.form.group.value;
location.href = '?c=' + class + '&g=' + group;
}

HTML

<form method="get" action="" name="form">
	<select name="class" onChange="multipleNavi()" id="class-items">
		<option value="0">全クラス表示</option>
		<option value="1">1組</option>
		<option value="2">2組</option>
	</select>
	<select name="group" onChange="multipleNavi()" id="group-items">
		<option value="0">全グループ表示</option>
		<option value="1">グループ1</option>
		<option value="2">グループ2</option>
	</select>
</form>

上記ではクラスまたはグループいずれかのプルダウンを変更すると同ページにGETで両方の引数が付いた状態でジャンプする。

例 https://www.digital-gate.com/?c=2&g=1