WordPress – PHPを使う

概要

WordPressでPHPをHTML内に書いても、拡張子phpのファイルにならないため、そのままでは実行されない。

.htaccessを変更することでhtmlファイルでもPHPが呼ばれるようになるらしいが、それよりもPHPを外部ファイルとして持っておいて、HTMLからそこで定義された関数を呼び出す方法の方が、改変部分が少なそう。

方法1:親テーマのfunctions.phpに加える

親テーマディレクトリ下のfunctions.phpにショートコードの関数を書き加え、HTMLから呼び出す方法。

たとえばfunctions.phpの最後に以下を追加。場所は最後の方がよいか。

そして、WordPressのエディタ画面で以下を記述。

これで上記の記述の部分でショートコードが実行され、この部分に”Hello World!”が表示される。

ただしこの方法は、親テーマのfunctions.phpを加工しているので望ましくない。

方法2:子テーマのfunctions.phpに加える

子テーマのfunctions.phpに以下を記述する。今回はコード全体を<?php?>で囲んでいる。

そして方法1と同じように、HTMLからショートコードを呼び出す。

この方法だと、親テーマのバージョンアップなどの影響を受けないのでよい。

ただし、ショートコードが増えると、一つのfunctions.phpファイルで管理をするのが大変になってくる。

方法3:別ファイルのPHPを呼ぶ

functions.phpに以下を記述。

以下の内容のファイルを、ファイル名を”php_in_wp.php”として、functions.phpと同じ場所に置く。

そして、以下のようにHTMLから外部ファイルを呼び出す。

下の行は、実際に上記を実行した結果。

Hello WordPress!

参考リンク

WordPress投稿ページにPHP利用→ショートコードを使おう!

 

WordPress – 子テーマを作る

概要

テーマをカスタマイズしたり、テーマディレクトリ下のfunctions.phpを変更したりした後に、テーマをアップデートすると、カスタマイズや変更の内容が元に戻ってしまう。

これを回避するために、適用しているテーマの「子テーマ」を作って、これをカスタマイズする。

テーマの場所

WordPressのテーマは複数のファイルで構成され、テーマ名と同じディレクトリにそれらが格納されている。

たとえば”First”というテーマはfirstというディレクトリで、その内容は次のようになっている。

子テーマ作成の流れ

  1. 子テーマのディレクトリを作る
  2. ディレクトリ下に必要なファイルを準備する
    • style.css
    • カスタマイズ対象ファイル(header.php、footer.phpなど)
    • functions.php(カスタマイズする場合)
  3. 子テーマを有効化する

子テーマのディレクトリを作る

子テーマのディレクトリの場所は、親テーマと同じwp-content/themes/の下。ディレクトリ名は親テーマ名に接尾辞-childを付けることが推奨されている。Firstというテーマなら、first-child

必要なファイルを準備する

ここでは、必須のstyle.cssだけを準備する。たとえば”First”の子テーマを作る場合は以下を記述。

コメント行のうち必須なのは、TemplateとTheme Nameの2つ。

  • Templateには親テーマのディレクトリ名を設定(テーマ名ではない)
  • Theme Nameには子テーマのテーマ名を設定(ディレクトリ名ではない)

@import文は、url()の内容をインポートして適用する。ここで親テーマのcssを設定することで、親テーマのスタイルのすべてがインポートされる。

その後の行で、必要に応じてスタイルをカスタマイズ。

子テーマを有効化する

ダッシュボードの「外観」→「テーマ」で確認すると、子テーマが加えられているので、これを有効化する。

wp-child-theme

子テーマをオーバーライドする

style.css

@import url()で親テーマのスタイルを継承した以降、独自のスタイル設定を記述することで親テーマのスタイルをオーバーライドできる。

たとえば以下の例では、h1タグの色を青にするよう設定している。

実行結果は以下の通りで、h1タグの内容の前景色が青になっている。

wp-child-theme-override-example

 

 

MySQL – クエリのテーブル保存

SELECT文の結果を、以下の書き方でテーブルに保存できる。

まずSELECTの結果が意図したとおりになっているかどうかを確認した後に、CREATE TABLE文の後ろに書くとよい。

ただし、SELECT *と書くのは要注意。クエリの結果によって、同じフィールド名が繰り返し現れると、テーブル作成時にエラーとなる。

クエリをテーブルに保存するときは、同じフィールド名が重複しないように注意。

 

 

さくらサーバー – MySQL – CSVファイルへのエクスポート

概要

MySQLへのCSVファイルのインポートについては、ターミナル上でのLOAD DATAコマンドによる方法を整理した。

テーブルやSELECTの結果のエクスポートについては、以下の方法がネット上でも一般的。

ただし、さくらレンタルサーバで上記を実行しようとすると、以下のようにエラーになる。

これはレンタルサーバのユーザディレクトリの権限がrwx---r-xとなっていて、MySQLからの書き込みが制限されているためらしく、レンタルサーバでこの権限を変更することは難しい。

phpMyAdminを使ったエクスポートなら、ブラウザ上での操作でテーブルのダウンロードが可能。

phpMyAdminを起動する

さくらレンタルサーバのコントロールパネルを立ち上げ、「データベースの設定」をクリック。

phpmyadmin-start-1

データベースの設定画面で、「管理ツールログイン」をクリック。

phpmyadmin-start-2

新しいタブでphpMyAdminのログイン画面が立ち上がるので、MySQLのユーザ名とパスワードを入力して「実行する」ボタンを押す。

phpmyadmin-login

phpMyAdminでのエクスポート操作

ログイン後の画面の左にデータベースの一覧があるので、エクスポートするテーブルがあるデータベースを選択。

phpmyadmin-select-database

データベース内のテーブル一覧が表示されるので、エクスポートするテーブルにチェックを入れて、「チェックしたものを」のドロップダウンリストから「エクスポート」を選択。

phpmyadmin-table-selection

エクスポート画面の左でCSVを選択すると、右側がCSVのオプション設定になる。

  • フィールド区切りのデフォルト';'','に変更
  • フィールド囲み記号のデフォルト'"'を残すか、必要に応じて削除
  • その他は適当に
  • 「ファイルに保存する」のチェックを外す
  • エンコーディング変換はしない
  • 「実行する」ボタンで、[テーブル名].csvのファイルがダウンロードされる

phpmyadmin-csv-settings

 

QGIS – 政令市区の融合

概要

国土数値情報の行政界データは、政令市の区が他の市町村と同じレベルで「行政区域」として扱われている。たとえば神奈川県を例にとると、横浜・川崎・相模原の3政令市については各区のポリゴンが他の市町村と同じように表示される。

qgis-kanagawa-before-disolve

属性テーブルのフィールドでも、最も細かい名称フィールド”N03_004″で政令市は区単位で、政令市名は郡名と同じフィールド”N03_003″に記録されている。

qgis-designated-city-dissolve-attribute-table-before

 

政令市区の融合

政令市も一般市と並びで扱うケースのために、政令市と他の市町村が同じフィールドになるように再構成する。

神奈川県を例にとると、行政界データは以下のように政令市~一般市~郡部町村という構成になっている(注目しているカラムのみ示している)。

N03_001 N03_003 N03_004 N03_007
神奈川県 横浜市 鶴見区 14101
神奈川県 横浜市 都筑区 14118
神奈川県 川崎市 川崎区 14131
神奈川県 川崎市 麻生区 14137
神奈川県 相模原市 緑区 14151
神奈川県 相模原市 南区 14153
神奈川県 横須賀市 14201
神奈川県 綾瀬市 14218
神奈川県 三浦郡 葉山町 14301
神奈川県 愛甲郡 清川村 14402

このうち同じ政令市の区を地物までまとめて一つの政令市として扱うようにする。

N03_001 N03_007 N03_901
神奈川県 14100 横浜市
神奈川県 14130 川崎市
神奈川県 14150 相模原市
神奈川県 14201 横須賀市
神奈川県 14218 綾瀬市
神奈川県 14301 葉山町
神奈川県 14402 清川村

大まかな手順は以下の通り

  • 政令市を含んだ市町村名を、新たにフィールドを作ってそこに設定
  • 政令市のコードは、従来のコード欄の値を手打ちで修正

市町村欄の生成

  • 神奈川県のレイヤの属性テーブルを表示
  • フィールド計算機を立ち上げる
  • 「新しいフィールドを作る」にチェックし、出力フィールド名、フィールドタイプ、フィールド長を設定
  • 条件式を入力
  • OKボタンを押してダイアログを閉じる
  • レイヤの編集モードを解除

qgis-designated-city-dissolve-field-calculator

条件式は以下の通り。

フィールドN03_003は以下のいずれか

  • N03_004が政令市区の場合は政令市名
  • N03_004が一般市の場合は市名
  • N03_004が町村の場合は郡名

そこで、N03_003が’市’で終わる場合(政令市の場合)はN03_003を、その他(一般市町村)の場合はN03_004を新たなフィールドN03_901にセットする。

実行結果は以下の通り。

qgis-designated-city-dissolve-attribute-table-after

次に、「ベクタ」→「空間演算」→「Dissolve」でN03_901フィールドの値で融合処理。融合後の地物は以下の通りで、政令市が一体化されている。

qgis-kanagawa-after-disolve

属性テーブルを開いてみると3政令市がそれぞれ一つにまとめられているが、各フィールドは各政令市のいずれか一つの区のデータのみが残っている。これらについては、手打ちで修正した。

qgis-designated-city-dissolve-attribute-table-code

 

QGIS – クエリ・式

式の入力について

フィルタやフィールド計算機などで必要になるクエリの式についてまとめる。

クエリビルダでフィールドや演算子などを入力するとき、直接キーボードから入力してもいいし、ダイアログのボタンやドロップダウンから選択してもよい。

関数をドロップダウンから選択しても、括弧閉じの対応はされない。

値の参照

レコード内のフィールド値を参照するにはダブルクォート(")でフィールド名を囲む。

数値リテラルはそのまま数値を書き、文字列リテラルはシングルクォート(')で囲む

LIKEであいまい検索をする場合の任意長の文字列は’%(‘*‘は使えない)。以下は’横浜市’、’横浜’、’浜松’にマッチする。

条件検索

条件の真偽によって結果を変える場合はifを使う。

以下、例示。

 

 

QGIS – 地物の切り出し

たとえば全国の行政界データを持っていて、そこから特定の県だけ抜き出したレイヤを作りたいとき。大まかな手順は以下の通り。

  • 抽出対象の地物をフィルタで抽出
  • 抽出後の状態で「領域またはシングルクリックによる地物選択」ボタンを押す
  • 領域を選択してフィルタ後の地物を全選択
  • メニューの「編集」→「地物のコピー」
  • メニューの「編集」→「新規レイヤへの地物の貼り付け」→「新規ベクタレイヤ」
  • 「空間参照システム」ダイアログで座標系を選択(JGD2000)
  • 新規Shapeファイルの保存先ディレクトリとファイル名を指定してOK

例として国土数値情報の全国の行政界データから神奈川県の市区町村のみ取り出す手順をまとめる。

神奈川県の市区町村のみフィルタリングした状態から「領域またはシングルクリックによる地物選択」ボタンを押す。

qgis-select-porigon1

フィルタリングされた神奈川県全体を覆うようにドラッグして地物を選択し、「編集」→「地物のコピー」。

qgis-select-porigon2

続けて「編集」→「新規レイヤへの地物貼り付け」→「新規ベクタレイヤ」。

qgis-select-porigon3

「空間参照システム選択」ダイアログで座標システムを指定。この場合はデフォルトのJGD2000のまま。

qgis-select-porigon4

OKを押すと「ベクタレイヤに名前を付けて保存」ダイアログが立ち上がるので、「ブラウズ」で新しいフォルダとファイル名を指定してOK。

qgis-select-porigon5

「保存されたファイルを地図に追加する」にチェックが入っていれば、新しく作成されたShapeファイルのレイヤがレイヤパネルに追加されて表示される。

qgis-select-porigon6

 

 

 

 

QGIS – フィルタ~地物の抽出

たとえば国土数値情報の全国行政界データから、特定県のみ取り出したいときなど。

手順は以下の通り。

  • 抽出元の全国レイヤを右クリックして「フィルター」を選択して「クエリビルダ」ダイアログ起動
  • 抽出条件を指定
    • ここでは都道府県名フィールド”N03_001″の内容が’神奈川県’の地物のみ取り出す
    • 文字定数の指定はシングルクォート(‘)で囲うこと
  • OKボタンを押して抽出実行

ただしQGISのクエリ式はクセがあるので注意

qgis-filter-query-builder-dialog

なおこの段階では、元の全国データは残ったまま、神奈川県分だけを表示させている状態なので、もう一度右クリック→フィルターでクエリビルダを表示させると抽出条件が残っている。

ここで「クリア」ボタンを押して条件をクリアすると、元の全国データが表示される。

抽出された地物だけを新しいレイヤとしたい場合は、新規レイヤに地物を貼り付けて保存する必要がある。

 

QGIS – 数値による地図の塗り分け

属性データの数値の大きさによってポリゴンの色を塗り分ける方法をまとめる。

例として、国勢調査の都道府県別人口の増減を平成22年と27年で比べる。以下のような属性データを使用。pop2011とpop2015は国勢調査データをCSV化して結合、pop15-11はこれら二つのフィールドに対してフィールド計算機を使って生成したデータ。

code name pop2011 pop2015 pop15-11
01000 北海道 5506419 5381733 -124686
02000 青森県 1373339 1308265 -65074
03000 岩手県 1330147 1279594 -50553
・・・ ・・・ ・・・ ・・・ ・・・
  • 塗り分けるレイヤを右クリックし、プロパティで「レイヤプロパティ」ダイアログを立ち上げ、「スタイル」タブを選択
  • 一番上のドロップダウンで、「段階に分けられた」を選択
  • 「カラム」で色分けの元となるカラムを選択
  • 「方法」はColor、「色諧調」はそのまま
  • 「分類」ボタンを押して、いったん自動で分類表示
  • 最小値と最大値を確認し、それを適切に分割する階級を検討・設定
    • 右方の「分類数」で階級の数を設定
    • 各階級の「値」エリアをダブルクリックして、階級の下限・上限を入力
    • 各階級の「シンボル」エリアをダブルクリックして、階級の色を指定
  • OKボタンで描画
  • 必要に応じてプロジェクト保存

qgis-population-change-2011-2015-daialog

QGIS – CSVファイルの結合

概要

レイヤの地物に対して属性データを関連付けて追加するのに、CSVファイルを使う方法をまとめる。

大まかな手順としては以下のようになる。

  • CSVファイルとCSVTファイルの準備
  • CSVファイルのレイヤへの追加
  • レイヤへのCSVデータの結合

ここでは、都道府県行政界データに対して国勢調査の人口データを結合し、人口規模に応じた色分けをする例で手順をまとめる。

結合先レイヤの確認

結合先のレイヤとして、国土数値情報の行政界データを都道府県レベルで融合し、簡素化したデータを使う。

フィールドを各種処理後に整理し、以下のような属性データとなっている。

code name
01000 北海道
02000 青森県
03000 岩手県
・・・ ・・・

CSVファイルの準備

総務省統計局の平成27年国勢調査の結果、統計表一覧から都道府県別人口データを入手し、以下のように都道府県名と人口データのみを抽出。

1行目には、結合時の目安となるようなフィールド名を入れておく。このときCSVファイルでフィールド名をダブルクォート(“)で囲まないと認識されないという状況が発生した(QGIS 2.16)。

CSVファイル側の結合キーには都道府県名を使う意図で、地図レイヤのフィールド名と区別するために大文字を使用した。

“NAME” “pop2015”
北海道 5381733
青森県 1308265
岩手県 1279594
・・・ ・・・

CSVTファイルの準備

QGISでCSVファイルを単に読み込むと、数値データも文字列として扱われてしまう。

文字列、数値を明示するため、拡張子csvtのテキストファイルを準備し、1行で各カラムの型を指定する。型指定の種類には”String”、”Integer”、”Real”などがあり、桁数指定も可能。英文の開発者による説明はこちら

これらの型指定子をカンマ(‘)で区切って並べるとき、間にスペースを入れると機能せず全てStringと認識されてしまうという状況が発生した(QGIS 2.16)。

今回は都道府県名と人口の2カラムなので、テキストエディタで以下の内容を作成して、拡張子csvtでCSVファイルと同じディレクトリ下に保存する。

CSVファイルのレイヤへの追加

CSVファイルをQGISのレイヤパネルにドラッグ・アンド・ドロップし、レイヤからCSVファイルへの参照を追加。

qgis-csv-import-adding-layer

CSVファイルの結合

  • 地図レイヤを右クリックし、プロパティでダイアログを立ち上げ、「結合」タブを選択
  • 左下の「+」ボタンを押して、「ベクタ結合の追加」ダイアログ立ち上げ
    • 「レイヤの結合」でCSVファイルを指定
    • 「結合フィールド」でCSV側のキーになるフィールド名を指定
    • 「ターゲットフィールド」で結合される地図レイヤのキーになるフィールド名を指定
    • そのまま進めると、CSVのフィールドにCSVファイル名が接頭辞として付加されてしまい、10文字制限が支障となるので、「フィールド名の接頭辞」にチェックを入れ、その下のファイル名を消す
  • OKボタンを押すと、レイヤプロパティダイアログに結合されたファイルが表示される
  • レイヤプロパティのOKボタンを押して処理完了

qgis-csv-import-binding-dialog

ここでレイヤを右クリックして属性テーブルを表示と、都道府県コード、都道府県名、人口データが並んでいるのが確認できる。

人口規模ごとの段階で都道府県を色分けすると、以下の通り。

qgis-csv-import-map-population

参考:結合データに対する計算

結合後のデータに対してフィールド計算機を使い、新たなフィールドを定義することも可能。手順についてはこちらにまとめている。

以下は、平成22年と27年の国勢調査データを結合し、その差分を計算した人口増減データにより都道府県を塗り分けたもの。

qgis-population-change-2011-2015-map