Google マイマップがすごく便利

20151228-pict01

デジタルドリームワークスから比嘉です。

恥ずかしながらGoogle マイマップというサービスがあるのをこの間、発見。
少し触ってみましたが、すごく便利。機能としては以下のような感じ。

・地図を作成
・地図上にライン、シェイプ、目印を描画
・住所、場所の名前、経度と緯度の座標などの地理データをインポート
・レイヤで地図を整理して、さまざまなコンテンツを表示、非表示
・さまざまな色、目印のアイコン、ラインの太さを活用して、コンテンツのスタイルを設定

マイマップより引用

自分の好きな場所にマーカーを記したマップ(複数のマーカーを付与出来る!!)が手軽に作成出来ます。

弊社でもWordpressの投稿をマップでマーカー表示したりすることがありますが、これを使えばかなり便利に導入出来ますね。
外部サービスを利用すると表示や機能の制約は避けられませんが、コストを抑えたい場合や手軽に導入したい場合に便利かもしれません。

情報の間違いやこんな使い方ができますよなど情報がありましたらコメントいただけると嬉しいです。
よろしくお願い致します!

AMP(Accelerated Mobile Pages)の今後に注目!

googlelogo_color_284x96dp.fw

デジタルドリームワークスから比嘉です。
さっとネットサーフィンしていたら興味深い記事が海外SEO情報ブログさんにあったのでメモ…

Google社員がアドバイスする2016年取り組むべきSEOの秘訣
https://www.suzukikenichi.com/blog/seo-tips-for-2016/

この記事に出てくる「AMP」です。

—–

AMPは、Accelerated Mobile Pages (アクセラレイティッド・モバイル・ページ)の略で、モバイル端末でのウェブページの表示を高速化するためのプロジェクト。
GoogleとTwitterが協同して策定したプロジェクトで、その他30社ほどがパートナーとして参加しているとのこと。
モバイルではページの読み込みなどに時間がかかることが多いですが、それを最適化ようという試みのようです。
—–

AMPの実装は、AMP HTML フレームワークに沿ってマークアップしていきます。
AMPの仕様が公開されています。
https://github.com/ampproject/amphtml

主な特徴としては、
・HTML+CSSが基本だけれど、独自の書き方やHTML要素やCSSセレクタの一部に制限
・JavaScriptは使わず、AMPから提供されるものを使用

ページ表示の高速化がされることと、実装しているページはモバイル検索でピックアップしてくれるようです。

デモ(モバイルでアクセス)
https://www.google.com/webhp?esrch=AcceleratedMobilePages::Preview,AcceleratedMobilePagesDesktop::Promo&gws_rd=cr&ei=PnkVVvONIaeomgXh4ouACg&hl=en&pws=0&gl=US

———

———

高速化されるのはすごく良いことだと思いましたが、気になる点もあります。
特にサーバーのキャッシュを利用して高速化するようなので、「実際のページアクセスは残らない」という点。
アクセス解析などはどうなるのか。今後の動向に注目したいところです。

個人的な考えですが、
本体サイトとAMP実装ページは別物として分けて制作。
AMP実装ページから本体サイトに誘導する流れをとっていくのかな。と思ったりもしています。

今年、モバイルフレンドリーの対応がすごい勢いでされてきました。
弊社でもレスポンシブデザインを取り入れ、モバイル対応のサイトを制作してきました。
AMPは新しいモバイル技術として普及するのか。そうなる前にもう少し深く勉強していきます。
情報違いやその他ありましたら、ぜひコメントください!

WooCommerce 支払い方法 追加(その2)

WooCommerce 支払い方法 追加(その2)

さて、「WooCommerce 支払い方法 追加(その1)」の続編です。
前回のプラグイン構造では複数の支払い方法追加がある場合は、支払い方法 毎にプラグインを作成、有効化していかないといけませんでした。
かなり非効率ですし、プラグイン数が多くなるのは好きじゃないので、今回はその部分の改良版のメモとなります。
前回作成した支払い方法追加のクラスはほぼそのまま使えます。

構造は以下のようなイメージになります。

20151127-pict01

woocommerce-higa-pack(フォルダ)
-woocommerce-higa-pack.php
-i18n(フォルダ)
–languages(フォルダ)
-includes(フォルダ)
–class-wc-dependencies.php
–gateways(フォルダ)
—class-wc-gateway-basic-bank-transfer.php
—class-wc-gateway-store.php

ファイル構造はWooCommerce本体を参考にしました。
いくつかのコードをメモ…

20151127-pict02

プラグインメインファイル
woocommerce-higa-pack.php

● 依存関係に対応

WooCommerceの拡張プラグイン 「woocommerce-gateway-amazon-payments-advanced」よりclass-wc-dependencies.phpを丸ごともってきました。
このプラグインはWooCommerceが無いと意味がないプラグインです。上記ファイルを利用する事でWooCommerceの有無をチェック出来ます。

function is_woocommerce_active() {

}

※ 無い場合は注意文章を管理画面内に表示
function wc_higa_pack_notice() {

}

● 複数支払い方法を追加

メインのプラグインファイルから支払い方法追加の部分を切り離して保存することで複数の支払い方法クラスを読み込みします。

private function _includes() {
include_once( plugin_dir_path( __FILE__ ) . ‘includes/gateways/class-wc-gateway-store.php’ );
include_once( plugin_dir_path( __FILE__ ) . ‘includes/gateways/class-wc-gateway-basic-bank-transfer.php’ );
}

各支払い方法のクラスファイル

切り離した支払い方法のクラスファイルは前回のものに少し手を加えるだけで流用出来ました。

1. アクションフックの削除とその関数を外す

削除
add_action( ‘plugins_loaded’, ‘your_payment_function);

関数からクラス部分を取り出して残す
class WC_Gateway_Basic_Bank_Transfer_Higa_Pack extends WC_Payment_Gateway {

}

2. 言語ファイル 指定部分はプラグインメインファイルで指定しているので削除

という感じです。
少し説明が難しく、長くなりましたが、とりあえず支払い方法追加の検証は終了…
どうにかなりそうです。

コードについて、間違っているところや別の方法などがあるという方は、ぜひコメントいただければと思います。

PS:今回でオブジェクト指向の勉強が必要と感じました。 汗… 再勉強中!!!

WooCommerce 支払い方法 追加(その1)

デジタルドリームワークスから比嘉です。
先日に前置きで投稿しましたWooCommerce 支払い方法の追加について、プラグインを作る形で支払い方法を追加する必要があると説明しました。
それではさっそくプラグインを作成していきます。

プラグイン作成の作法はWordpress Codexを確認して下さい。
https://wpdocs.osdn.jp/プラグインの作成

またWooCommerceの支払い方法の追加についての詳細は公式ドキュメントから確認出来ます。
https://docs.woothemes.com/document/payment-gateway-api/

それでは実際に作成したコードが以下となります。
公式ドキュメントといくつかのプラグインを参考にさせていただきました!

※コードが画像のため見えにくいです。拡大して確認下さい。

blog-151113-pict01

さていくつかコードのメモを…

● 17行目 プラグインのアクション

公式ドキュメントを参考にプラグインが読み込まれたら、クラスを実行するコードを記述。

add_action( ‘plugins_loaded’, ‘init_your_gateway_class’);

ーーーーー

● 26行目〜48行目 コンストラクタ

クラスからオブジェクト作成れた際に自動で実行される部分です。
WooCommerceに必要な変数やメソッドが記述されています。

init_form_fields();
※支払い方法の設定ページで設定する項目が定義されています。

$this->init_settings();
※設定を読み込み

add_action( ‘woocommerce_update_options_payment_gateways_’ . $this->id, array( $this, ‘process_admin_options’ ) );
※支払い方法の設定を更新した際に保存する処理

add_action( ‘woocommerce_thankyou_basicbanktransfer’, array( $this, ‘thankyou_page’ ) );
※注文完了ページで支払い方法別の文章を追加

add_action( ‘woocommerce_email_before_order_table’, array( $this, ‘email_instructions’ ), 10, 3 );
※注文が完了した後に送信されるメールにも支払い方法別の文章を追加

と続きます。

また

ーーーーー

● 111行目〜129行目 注文処理の関連

注文が合った場合のプロセス状態を設定したり、在庫更新、カートを空にしたりする処理。

ーーーーー

● 133行目〜138行目 支払い方法の登録

そして最後にWooCommerceへ支払い方法の登録を行います。

以上が大まかな解説!?メモです。

終わりに…

今回のコードでは1つのプラグインで1つの支払い方法しか追加出来ていません。
2つ、3つとある場合はプラグインを増やしていかなくてはいけないですね。(なんて非効率的…)
またWooCommerceがインストールされていない状況での処理なども記述していません。
そこらへんを改良する必要がありますね。
とりあえずベースのコードは出来ましたので次回より改良していきたいと思います。

またこのコード間違っているよ。
別の方法やコードの記述例などがあればぜひコメントいただきたいです。
よろしくお願い致します。 m(_ _)m

WooCommerce 支払い方法 追加(前置き)

デジタルドリームワークスから比嘉です。
WooCommerceの検証が続いているため、WooCommerceネタがしばらく続きます。
しばらくお付き合い下さい。

さて表題通りですが、WooCommerceはWordpressでECショップを運営出来るプラグインです。
ECショップで欠かせないのが支払方法ですね。
デフォルトでは以下の項目が利用可能です。

銀行振込(ダイレクト)
小切手支払い
代金引換
PayPal

上記、銀行振込(ダイレクト)設定画面では、
「BACS(電信振替システム)を許可する。(国際的に一般化している電信振替システムです。日本国内取引では使いません。)」
というような文章が出てきます。
どうも通常の銀行振込とは違う様です。

電信振替システムについて…
預金ネットワーク内でユーザからの支払いを受け取り、資金を送金先に電信振替する自動預金システムを提供すること。

ふーん…
通常の銀行振込とは違う様です。
これとは別に銀行振込の項目を追加した方が良さそうですが、追加する項目が見当たりません。
早速 WooCommerce公式ページから確認すると、支払い方法はプラグインを作成して追加しないといけないようです。
(※英語ページのみで翻訳に自信がありませんが…多分そういうことが記述されている)

https://docs.woothemes.com/document/payment-gateway-api/

blog-151110-pict01

ということで、プラグインの作り方からWooCommerceの支払い方法の流れまでを次回ブログ記事にてアップしてきます。
それではよろしくお願い致します!

WooCommerce 日本語化のメモ

151029-pict01

 

デジタルドリームワークスから比嘉です。
WooCommerceの日本語化を行いました。
方法はいくつかありそうですが、今回はLanguage Packsをダウンロードしてmoファイルを直接プラグインのlanguageフォルダーに設置しました。

【 日本語化の設定でやった事 】

1. ダッシュボード > 設定 > 一般設定から「サイトの言語」が日本語になっているか確認
2. Language Packsをgit repositoryからダウンロードして、WooCommerceのlanguageフォルダーへ設置

———————–

さてさてタイトル通り、以前から気になっていたWooCommerceを本格的に導入しようと検証中。
インストールは他のプラグイン同様、管理画面から検索、もしくは直接アップして簡単に設置出来ます。
基本的なショップ設定などもインストールの際にウィザードに沿って設定していけば問題なく完了できます。
弊社ではこれまでECサイトはEC-CUBEを中心に導入してきましたが、ページの自由度やカスタマイズ性を考慮してWordpress + Pluginをテスト中です。

さて本題…

 

WooCommerceを日本語化する

インストールした際は、すべて英語表記です。
これを日本語化していきます。
WooCommerce 公式サイトでローカライズについて説明がされています。

https://docs.woothemes.com/document/woocommerce-localization/(英語)

英語表記なのでこれから記載する情報に誤りもあるかと思いますが、その際はご指摘いただければ幸いです。
ページを確認すると方法はいくつかありそうです。
今回はWooCommerceの公式 Languages Packsを利用する方法です。

 

1.初めに確認すること

初めにサイトの言語が日本語になっているかを確認します。
ダッシュボード > 設定 > 一般設定から「サイトの言語」の項目を確認。

 

2.Language Packsの設置

サイトの言語が日本語になっていることを確認したら早速Language Packsの設置です。
ここが少し分からなかった事ですが、WooCommerce 2.2からはLanguage Pack downloaderが入っていて翻訳をアップデート出来るとか…
WooCommerceのバージョンも最新だったけれど、これがなぜか自分の環境では出来なかった…
通常は以下のようなアップデートの表示が出るみたいですよ。

151029-pict02

 

 

そこで次に行ったのが、強制的に翻訳をアップグレードするというものです。

WooCommerce > System Status > Tools > Translation Upgrade

から「Force Translation Upgrade」をクリック。
自分の環境ではこれもエラーとなりました。
どうもアップグレード設定を「wp-config.php」に記述しないといけないとか…
これを設定すれば上記の方法で出来る模様(未検証)

151029-pict03

 

 

今回はこれもパス。直接 git repositoryからLanguage Packsをダウンロードして日本語のファイルのみをlanguageフォルダーに設置
https://github.com/woothemes/woocommerce-language-packs/tree/master/packages からダウンロード。
以下に設置します。

/your_plugin_directory/woocommerce/i18n/languages/

これでページのリロードを行うと日本語化完了です。

但し、すべてが日本語化というわけでは無いようです。
翻訳されていないページもありますし、部分的に翻訳されていない部分もあります。
残りは地道にpoEditかな…
でもかなりの部分が翻訳されていますので大助かり。
翻訳をした方に感謝ですね

※2015年12月9日追記
上記のディレクトリではすべての日本語化がされないな…と思ってコアファイルを確認していたら、日本語ファイルの設置場所が間違っていました。
正しくは、

/your_wordpress_directory/wp-content/languages/plugins/ 内でした../ 汗

こちらに日本語ファイルを設置することですべての項目で日本語化が出来ました!
訂正してお詫び申し上げます m(_ _)m

というととでWooCommerce 日本語化についてでした。

151029-pict04

 

151029-pict05

ガイドラインを検討中…

IMG_1687

デジタルドリームワークスから比嘉です。
これまで感覚的に行っていたコーディングですが、スタッフも増えたのでガイドラインを作ろうと検討中。
以前特集されていたWebdesigningを引っ張り出して再度読み返しまーす。

あまり厳密過ぎでも作業効率が悪くなるだろうし、ゆるすぎても意味がないし…結構難しいですね。
コーディングガイドラインって各会社さんによっても違うだろうし、社内の事だからあまり表に出てないだろうって思っていたら、
結構Googleでもヒットする。いくつかの会社さんと本を参考に今年中には決めたいところです。

複雑化する業務の中、メンテナンス性のや効率化とともに、品質維持にも努めます!

EC-CUBE2.12系へのアップグレードはひとまず保留

またEC-CUBEネタです。
前々から気になっていたEC-CUBE2.12系。

色々と改善されているようですが、やはり一番気になるところはプラグイン機能搭載でしょうか。
毎回カスタマイズしていた部分などはプラグインで簡単に機能拡張できるようになりそうですね。
これを気にさらに知識を深めたいところです。

2.4系から2.11系へのアップグレードは試行錯誤しながら出来た!?つもりなので、今回も頑張ろうと思い情報収集してみましたが、これが結構手こずりそうです。
DB構造などガッツリ変更されているようなので、今回は難しいかな…。
フォーラムなどでは、2.12.1辺りの安定板が出る頃には移行プラグインが出るんじゃないかという話がありましたので、ひとまずアップグレードは保留。
それまでにプラグインの勉強したいところ。
勉強することが多いですね。ちょっとずつでも、地道に頑張るしかないかな…

EC-CUBE 2.4系→2.11系へ【インポート編】

すみません。業務も忙しく、かなり遅くなりました。
作業時に残したメモを紛失したこと、確認作業が時間的にすぐは厳しいところですが、
コメントもいくつかいただき、覚えている部分だけでも投稿しようと思います。
コメントいただいた方々有難うございました!

それではインポート編です。

まずエクスポートモジュールで書き出されたzipファイルの内容がちゃんと書き出されているか確認して下さい。
自分の場合は、dtb_products_class.csvを上手く書き出してくれず、少々モジュールを修正しました。
それは「EC-CUBE 2.4系→2.11系へ【エクスポート編】」でご確認下さい。

データを確認できたら、次の作業へ移ります。
この作業は自分の環境で必要だったのか、不必要だったのかうる覚えですが念の為…
以下のようにエラーを回避出来るようです。
↓↓
phpMyAdminなどのツールを使用して以下の2点を変更
・dtb_shippingのdeliv_idのヌル(null)を【はい】にする
・dtb_order_derailのproduct_class_idのヌル(null)を【はい】にする

※変更したnullの許可は作業後に戻すそうです。

参照:http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=7885&forum=15&post_id=43838

次にインポートモジュールを修正します。
インポートモジュールをダウロードして、「LC_Page_Mdl_Upload_Cyber.php」を開きます。

1005行目あたり

変更前
[php highlight_lines=”3″ font_size=”110%”]
if(strlen($sqlval[‘deliv_id’]) > 0){
$sqlval[‘deliv_id’] = ‘1’;
}
[/php]

上記を修正します。

変更後
[php highlight_lines=”3″ font_size=”110%”]
if(strlen($sqlval[‘deliv_id’]) > 0){
$sqlval[‘deliv_id’] = ‘1’;
}else{
$sqlval[‘deliv_id’] = ‘0’;
}
[/php]

1040行目あたり

変更前
[php highlight_lines=”3″ font_size=”110%”]
function lfGetProductClassId($arrList){
$objQuery =& SC_Query_Ex::getSingletonInstance();
//規格ある場合
if($arrList[‘parent_class_name’] != “” && $arrList[‘parent_classcategory_name’] != “”){
$parent_class_id = $objQuery->getOne(“SELECT class_id FROM dtb_class WHERE name = ?”, array($arrList[‘parent_class_name’]));
$classcategory_id1 = $objQuery->getOne(“SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?”, array($parent_class_id,$arrList[‘parent_classcategory_name’]));

$class_combination_id = $objQuery->select(“class_combination_id”, “dtb_class_combination”, “classcategory_id = ?”, array($classcategory_id1));
// where文作成
$where = “”;
$arrval = array();
foreach($class_combination_id as $val){
if($where == “”){
$where = “( parent_class_combination_id = ?”;
}else{
$where .= ” OR parent_class_combination_id = ?”;
}
$arrval[] = $val[‘class_combination_id’];
}
$where .= ” )”;
if($arrList[‘class_name’] != “” && $arrList[‘classcategory_name’] != “”){
$class_id = $objQuery->getOne(“SELECT class_id FROM dtb_class WHERE name = ?”, array($arrList[‘class_name’]));
$classcategory_id2 = $objQuery->getOne(“SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?”, array($class_id,$arrList[‘classcategory_name’]));
$where .= ” AND classcategory_id = ?”;
$arrval[] = $classcategory_id2;

$class_combination_id = $objQuery->getOne(“SELECT class_combination_id FROM dtb_class_combination WHERE “.$where, $arrval);
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id = ?”, array($arrList[‘product_id’], $class_combination_id));
}else{
$where .= ” AND product_id = ?”;
$arrval[] = $arrList[‘product_id’];
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE “.$where, $arrval);
}

//規格無い場合
}else{
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id IS NULL”, array($arrList[‘product_id’]));
}

return $product_class_id;
}
[/php]

上記を修正します。

変更後
[php highlight_lines=”3″ font_size=”110%”]
function lfGetProductClassId($arrList){
$objQuery =& SC_Query_Ex::getSingletonInstance();
//規格ある場合
if($arrList[‘parent_class_name’] != “” && $arrList[‘parent_classcategory_name’] != “”){
$parent_class_id = $objQuery->getOne(“SELECT class_id FROM dtb_class WHERE name = ?”, array($arrList[‘parent_class_name’]));
$classcategory_id1 = $objQuery->getOne(“SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?”, array($parent_class_id,$arrList[‘parent_classcategory_name’]));

$class_combination_id = $objQuery->select(“class_combination_id”, “dtb_class_combination”, “classcategory_id = ?”, array($classcategory_id1));
// where文作成
$where = “”;
$arrval = array();

if($arrList[‘class_name’] != “” && $arrList[‘classcategory_name’] != “”){

foreach($class_combination_id as $val){
if($where == “”){
$where = “( parent_class_combination_id = ?”;
}else{
$where .= ” OR parent_class_combination_id = ?”;
}
$arrval[] = $val[‘class_combination_id’];
}
$where .= ” )”;

$class_id = $objQuery->getOne(“SELECT class_id FROM dtb_class WHERE name = ?”, array($arrList[‘class_name’]));
$classcategory_id2 = $objQuery->getOne(“SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?”, array($class_id,$arrList[‘classcategory_name’]));
$where .= ” AND classcategory_id = ?”;
$arrval[] = $classcategory_id2;

$class_combination_id = $objQuery->getOne(“SELECT class_combination_id FROM dtb_class_combination WHERE “.$where, $arrval);
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id = ?”, array($arrList[‘product_id’], $class_combination_id));
}else{

foreach($class_combination_id as $val){
if($where == “”){
$where = “( class_combination_id = ?”;
}else{
$where .= ” OR class_combination_id = ?”;
}
$arrval[] = $val[‘class_combination_id’];
}
$where .= ” )”;

$where .= ” AND product_id = ?”;
$arrval[] = $arrList[‘product_id’];
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE “.$where, $arrval);
}

//規格無い場合
}else{
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id IS NULL”, array($arrList[‘product_id’]));
}

return $product_class_id;
}
[/php]

兼行したらアップロードして再度移行を実行します。
ここで注意点ですが、移行が途中で終わった場合、すでに一度実行した場合などは、ディレクトリにキャッシュが残っていた記憶があります。
その場合はディレクトリにあるキャッシュデータを削除しないと修正ファイルが上手く反映されなかったような気がします。

以上でデータのインポートはエラーが出ることなく終了できました。
ただインポート終了後のレイアウトが崩れていたり、どうも全てが上手く動いたとは言いがたいです。

そう思っていた矢先、サイトへアクセスするとカテゴリー部分がどうもおかしい!?
どうもカテゴリーのトータル商品数などが上手く移行できていない様子です。
SQLをたたいてなど記事を確認しましたが、商品をテスト登録するか、もしくは登録してある商品を編集、保存でも正しい数が表示されるようになりました。

また以下のブログにも似たような作業で移行が完了している方がいましたので、こちらもご参考になってみて下さい。
http://ryunac.blog135.fc2.com/blog-entry-38.html

作業はバックアップをとって、自己責任でお願いします。

今回はうる覚えの部分も多いです。
間違っている部分や簡単に出来る方法などありましたらぜひコメント下さい。
お願いいたします m(_ _)m

夏が待ち遠しい…

梅雨入りしてもなかなか雨が降らない日々でしたが、ここ1、2週間は梅雨空が続いています。
早く梅雨が終わって、夏空になってほしいですね。
きっと仕事効率も、もっともっと上がるはず!!

写真は前に行った南部の写真