WordPressで半角カナ・全角英数字を変換するのを、functions.phpに書く。

2014年05月27日 18時00分 正午の月齢:28.2  月名:二十九日月  潮汐:大潮 月齢:28.2[二十九日月] 潮汐:大潮
(最終更新日:2019年09月17日)
11年前に投稿 | WordPress | コメントはありません

2分ぐらいで読めます。

半角カナもさることながら、全角英数字が大っっっっ嫌いなのです。で、普段からWordPressの投稿時に使うことはないはずなのですが、万一混じりこんでしまったらイケナイ。

そんなわけで、半角カナや全角英数字(全角スペースも)を全角カナや半角英数字にするべく、今までformatting.phpに次の記述を加えて、美を追求してきました。

$curl = mb_convert_kana($curl,"asKV"); //全角英数字と半角カナを排除

ただこの方法だと、アップデートのたびに修正しなくてはならないので、なんとかならないものかなぁと思っていたのも事実。(アップデート自体はそんなに頻繁にあるわけじゃないんですけどね。)

いろいろと探してみた結果、テーマファイル内のfunctions.phpに記述することで解決できるようなので早速実装してみました。参考にしたサイトは「WordPressの記事投稿時に半角カナ、全角英数字を全角カナ、半角英数字に変換する」

function convert_content( $data ) {
$convert_fields = array( 'post_title', 'post_content' );
foreach ( $convert_fields as $convert_field ) {
$data[$convert_field] = mb_convert_kana( $data[$convert_field], 'asKV', 'UTF-8' );
}
return $data;
}
add_filter( 'wp_insert_post_data', 'convert_content' );

オリジナルは「aKV」ですが、ここでは「asKV」にしています。なんのこっちゃ? という人は「全角文字/半角文字を変換する mb_convert_kana()」を見てネ。

これでブサイクな全角英数字撲滅がより確実なものとなりましたー。

Firefoxで、ウェブフォントの表示と「Webページが指定したフォントを優先」しないことを両立させる。

2014年05月24日 18時00分 正午の月齢:25.2  月名:二十六夜  潮汐:若潮 月齢:25.2[二十六夜] 潮汐:若潮
(最終更新日:2019年09月02日)
11年前に投稿 | ウェブ・IT関係 | コメントはありません

3分ぐらいで読めます。

普段からFirefoxを使っているわけですが、「Webページが指定したフォントを優先する」のチェックは外しています。

firefoxfont

これで、ウェブサイトから押し付けられたフォントを使うことなく、長年親しんでいるMS Pゴシックを使えているわけですが、最近問題が出てきました。詳しい内容は「WordPress3.8をどうしても使えない理由」を見てください。とにかく、見出し程度ならともかく本文にまで「デザイナーの俺様が指定する美しいフォントを使って閲覧しやがれ。」っていう傲慢な態度が気に入らない。

とまぁ、そんなこんなでMS Pゴシックでの閲覧に統一していたわけですが、だんだんウェブフォント(「Webフォント」って書いたほうがGoogleの検索件数は多いんですけど、なんか混ぜて書くのがイヤなのですよ。)の使用率が高まってきてあちこちで使われてきたので、無視できないようになってきました。それでも見た目のコントロールだけのウェブフォントだったらガン無視できていたのですが、そういうわけにもいかないのが「WordPress3.8をどうしても使えない理由」に挙げたWordPress。ま、自分は3.6.1を使い続けるとしても、お客さんに「ウェブフォントってうざいですよね。バージョンアップなんてしなくていいですよ。」とは言えない。そんなわけで否応なしにWordPress3.8以上の管理画面とのふれあいの場が増殖していきます。そのつど「Webページが指定したフォントを優先する」のチェックを入れて作業する(メニューのアイコンくらい無視できるのですが、ビジュアルリッチエディタはアイコンが見えないとどうしようもない)のもどうかと思います。

「なんとかWordPressのウェブフォントアイコンと他のウェブサイトの本文をMS Pゴシックで表示されることを両立できないかな」ということで、試行錯誤の上ほぼ両立できるようになったので、ちょっと紹介しておきますネ。

Firefoxのオプションから設定したのではうまくいかないので、プロファイルフォルダにCSSファイルを作ります。場所がわからなければ「プロファイルフォルダの場所(Firefox / Thunderbird)」を参考に。今回は「"%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\"」を「ファイル名を指定して実行」欄に入力して、直接場所にたどり着きました。その中の「*******.default」フォルダを開きます。chromeフォルダがある場合はそれを開きます。ない場合はchromeフォルダを作ります(Firefox 4.0 からは、chromeフォルダが無くなった)。

その中に「userContent.css」を作ってUTF-8で保存(もともとあれば開いて追記)。CSSの中には、

body {font-family:"MS Pゴシック" !important;}

と記入します。

さて、Firefoxを再起動してみると…

wordpresswebfonticon

特殊な開き方をするウィンドウや変に埋め込まれたブロック等はMS Pゴシックにはならないものの、とりあえずほとんどのサイトの文章はMS Pゴシックで表示されるようになりました。さらにWordPressのアイコンも表示されています。これでようやく自分自身のサイトもWordPress3.8以上を心置きなく使えそうです。

EC-CUBE 0円商品のPayPal決済を回避する。

2014年05月23日 18時00分 正午の月齢:24.2  月名:二十五日月  潮汐:長潮 月齢:24.2[二十五日月] 潮汐:長潮
(最終更新日:2019年09月02日)
11年前に投稿 | ウェブ・IT関係 | コメントはありません

1分ぐらいで読めます。

引き続きのEC-CUBE&PayPalネタ。

ま、記事にするほどでもないのですが、内部をゴニョゴニョといじって0円商品を登録したり、1円以上の価格の商品だけどポイントを利用して支払額が0円になったりしたときにPayPal決済を選択していたらちょっとマズいなー、と思ったのですが、自己解決しました。

billsetting

「管理画面」→「基本情報管理」→「支払方法設定」→「支払方法登録・編集」と進んで、「利用条件(円)」を「1円~」にすれば、PayPal決済を選べなくなるんですね。

payform

とまぁ、こんな感じで0円だとPayPalが使えなくなりますー。よくできてるなぁ。

EC-CUBE ダウンロード商品で通常モードのPayPal決済に対応させる。

2014年05月22日 18時00分 正午の月齢:23.2  月名:真夜中の月  潮汐:小潮 月齢:23.2[真夜中の月] 潮汐:小潮
(最終更新日:2019年09月02日)
11年前に投稿 | ウェブ・IT関係 | コメントはありません

6分ぐらいで読めます。

月々の使用料無料でクレジットカード決済を導入できるのがPayPal決済のメリット。PayPal決済を導入するには「PayPalビジネスアカウント」の取得が必要ですが、これも無料で手続きできます。で、決済方法にもいろいろな種類があってまた迷うわけですが、ペイパルアカウントを持っていない一見のお客さんにもクレジットカードを使ってもらおうと思うと、「ウェブペイメントスタンダード」しかないようです。(「エクスプレスチェックアウト」は画面遷移が少なくて魅力的なのですが、お客さんがペイパルアカウントを持っているか、決済時にアカウントを作るかしなければならないんです。)

このウェブペイメントスタンダードは、「自サイトで購入手続き→PayPal決済画面に遷移→自サイトに戻る」という流れになります。この流れを実現するために必要なモジュールが「ペイパルエクスプレス チェックアウト決済モジュール」。エクスプレスとついていますが、スタンダードもこのモジュールで対応できます。

早速テストしてみて最初にハマッたのが、パーミッションの設定。public_html/user_data内のpaypal_cancel.phppaypal_recv.php666になっているとうまく動かないようなので644にしてやります。ただこの症状、必ず発生するってわけでもなくて、3サイトで試したところ1箇所だけで発生しました。いずれにしても導入時には確認しておいたほうがいいかも知れません。

特に問題がなければ、以上で設定は終了。クレジットカードに対応したショッピングサイトの完成です。(ホントは決済完了のステイタスをEC-CUBEに連携するとか、いろいろと課題はあるんですケド。)

…さて。

ここからが本題なのですが、通常発送の商品のみを扱うのだったら問題ないのですが、ダウンロード商品を扱う場合に大変なことがおこります。

paypal-link

通常なら、この画面がしばらく表示された後に「PayPal決済サイトへ遷移しています。しばらくお待ち下さい。」の文字とともにPayPalの画面に遷移するのですが、ダウンロード商品の場合はここで止まってしまい、先に進めません。仕方がないので「戻る」ボタンで戻るのですが、これじゃあPayPalでダウンロード商品を購入できません。

調べてみてもなかなか情報が見つからなかったのですが、ようやくそれっぽい情報を見つけることができました。

この中にあった回答

ウェブペイメント・スタンダードでは、セラープロテクション(売り手保護 https://www.paypal.com/jp/cgi-bin/webscr?cmd=xpt/Marketing/securitycenter/sell/SellerProtection-outside) の対応に伴って、配送先住所の入力が必須になっているため、ダウンロード商品の場合だとエラーになるようです。

data/downloads/module/mdl_paypal/LC_Page_Mdl_Paypal_Helper_Link.php の 147行目付近以降の EXIST_CHECK をはずしてみるといかがでしょうか。

とのことなので、早速該当する箇所を修正してみます。LC_Page_Mdl_Paypal_Helper_Link.phpの145行目からペイパルスタンダードのパラメータの記述が始まるのですが、「city」「address1」「state」「zip」「first_name」「last_name」の「array("EXIST_CHECK"), 」を消してやります。

$objFormParam->addParam("amount", "amount", STEXT_LEN, "n", array("NUM_CHECK", "EXIST_CHECK", "MAX_LENGTH_CHECK"), $arrOrder['payment_total']);

$objFormParam->addParam("undefined_quantity", "undefined_quantity", 1, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"), PAYPAL_UNDEFINED_QUANTITY);

$objFormParam->addParam("city", "city", MTEXT_LEN, "KVa", array("EXIST_CHECK"), $arrShipping[$min]['shipping_addr01']);

$objFormParam->addParam("address1", "address1", MTEXT_LEN, "KVa", array("EXIST_CHECK"), $arrShipping[$min]['shipping_addr02']);

$objFormParam->addParam("state", "state", MTEXT_LEN, "KVa", array("EXIST_CHECK"), $this->arrPref[$arrShipping[$min]['shipping_pref']]);

$objFormParam->addParam("zip", "zip", MTEXT_LEN, "KVa", array("EXIST_CHECK"), $arrShipping[$min]['shipping_zip01'] . $arrShipping[$min]['shipping_zip02']);

$objFormParam->addParam("first_name", "first_name", MTEXT_LEN, "KVa", array("EXIST_CHECK"), $arrShipping[$min]['shipping_name02']);

$objFormParam->addParam("last_name", "last_name", MTEXT_LEN, "KVa", array("EXIST_CHECK"), $arrShipping[$min]['shipping_name01']);

これで、ダウンロード商品をPayPal決済できるようになりました。

ただ、副作用というか、ちょっと新たな問題が発生しました。上記のデータチェックはずしを行うとダウンロード商品が購入できるようになる代わりに、遷移した後の画面でPayPalアカウントを使わずにクレジット決済をしようとするときに表示される入力フォームの項目すべてを手で埋めなければなりません。ちなみに改造前のファイルの場合はこんな感じで、会員登録したときの氏名・住所等が最初から入っています。

paypal-reg

これをお客様サービスの低下と捉えるかどうかは微妙ですが、今のところどちらかを犠牲にしなければならない状態です。もっと核の部分をいじれば解決するんでしょうけど。

今回のファイル修正は、「ダウンロード商品を扱いたい」かつ「ペイパルウェブペイメントスタンダードを導入したい」場合に限ってのことなので、ダウンロード商品を扱わないのであればまったく関係のないお話なのでした。

 

CSSでヘッダ・フッタを固定してみる。IE6にも対応(いまさら?)。

2014年05月17日 18時00分 正午の月齢:18.2  月名:寝待月  潮汐:中潮 月齢:18.2[寝待月] 潮汐:中潮
(最終更新日:2019年09月02日)
11年前に投稿 | ウェブ・IT関係 | コメントはありません

11分ぐらいで読めます。

最近の自分の中でのウェブデザインのワンパターン化(高さ100px程度のヘッダ、右メニュー2カラム。WordPressのテーマばかりいじっていたので。)を打破するべく、いろいろ考えてみた結果、ヘッダ・フッタを天地に固定してみようと考えました。他人の知恵を借りつつ、自分でいろいろ試してみると結構興味深いものがあったので、ちょっとまとめてみます。

まずは先人の知恵を覗いてお勉強。

サイドメニューの有無等によってCSSの記述に違いはあるものの、まぁだいたい想定内。これを元にベースとなるCSSとHTMLを書いてみました。まずはCSS。

body {
padding: 30px 0 30px 0;
overflow-y: scroll;
}

#header {
background-color: #000000;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 30px;
}

#footer {
background-color: #000000;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 30px;
}

#header p {
margin: 0px;
padding: 5px;
color: #FFFFFF;
}

#footer p {
margin: 0px;
padding: 5px;
text-align: center;
color: #FFFFFF;
}

それからHTML。

<body>

<div id="contents">
<h1>1</h1>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<h2>11</h2>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
<p>18</p>
<p>19</p>
<p>20</p>
<h3>21</h3>
<p>22</p>
<p>23</p>
<p>24</p>
<p>25</p>
<p>26</p>
<p>27</p>
<p>28</p>
<p>29</p>
<p>30</p>
</div>

<div id="header">
<p>ヘッダ固定のhtml&amp;cssサンプル</p>
</div>

<div id="footer">
<p>フッタ固定のhtml&amp;cssサンプル</p>
</div>

</body>

SEOにどれくらい効果があるかわかりませんが、ヘッダのdiv要素を下に置いてみました。これで十分、FirefoxやInternet Explorer8では表示されます。もちろん、ヘッダのdiv要素を上に配置しても同じように表示されます。ファイルにしたのがこれ。

で、ここからが本題みたいなものでして。実は上記の記述では、Internet Explorer6(IE6)で見たときにグチャグチャに表示されてしまいます。もう今さらIE6なんてどうでもいいよなーと思いながら、とりあえず対応してみたいと思います。参考になったのは次のサイト。

CSSハックでIE6用には別のCSSを適用してうまく表示できています。ところがよく見ると、ヘッダもフッタもコンテンツもdiv要素を3階層の入れ子にしていて、どうもそれが気になってしまうのです。できるだけシンプルにしたい…。そこでdivの入れ子は2階層にとどめて、CSSでコントロールできるかどうか試してみました。まずはHTML部分を2種類用意します。

<body>

<div id="contents_wrap">
<div id="contents">
<h1>1</h1>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<h2>11</h2>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
<p>18</p>
<p>19</p>
<p>20</p>
<h3>21</h3>
<p>22</p>
<p>23</p>
<p>24</p>
<p>25</p>
<p>26</p>
<p>27</p>
<p>28</p>
<p>29</p>
<p>30</p>
</div>
</div>

<div id="header">
<div id="head">
<p>ヘッダ固定のhtml&amp;cssサンプル</p>
</div>
</div>

<div id="footer">
<div id="foot">
<p>フッタ固定のhtml&amp;cssサンプル</p>
</div>
</div>

</body>

これがヘッダを下に持ってきて、SEOに効くかもしれない版。次はヘッダをコンテンツの上に置いた普通っぽい版。

<body>

<div id="header">
<div id="head">
<p>ヘッダ固定のhtml&amp;cssサンプル</p>
</div>
</div>

<div id="contents_wrap">
<div id="contents">
<h1>1</h1>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<h2>11</h2>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
<p>18</p>
<p>19</p>
<p>20</p>
<h3>21</h3>
<p>22</p>
<p>23</p>
<p>24</p>
<p>25</p>
<p>26</p>
<p>27</p>
<p>28</p>
<p>29</p>
<p>30</p>
</div>
</div>

<div id="footer">
<div id="foot">
<p>フッタ固定のhtml&amp;cssサンプル</p>
</div>
</div>

</body>

こんな感じで、ヘッダもフッタもコンテンツを設定します。div要素contents_wrapは、IE6が使います。次にCSSを2種類用意しました。1つ目はIE6非対応版。

body {
padding: 30px 0 30px 0;
overflow-y: scroll;
}

#header {
background-color: #000000;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 30px;
}

#footer {
background-color: #000000;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 30px;
}

#header p {
margin: 0px;
padding: 5px;
color: #FFFFFF;
}

#footer p {
margin: 0px;
padding: 5px;
text-align: center;
color: #FFFFFF;
}

それからIE6対応版。

body {
margin: 0;
padding: 0;
}

#header {
position: fixed;
top: 0;
width: 100%;
}

#head {
background-color: #000000;
height: 30px;
}

#contents {
overflow: auto;
margin: 0 auto;
padding: 38px 8px 38px 8px;
}

#footer {
position: fixed;
bottom: 0;
width: 100%;
}

#foot {
background-color: #000000;
height: 30px;
}

#header p {
margin: 0px;
padding: 5px;
color: #FFFFFF;
}

#footer p {
margin: 0px;
padding: 5px;
text-align: center;
color: #FFFFFF;
}

/* for IE6 */
html, body {
_height: 100%;
_overflow: hidden;
}

#header, #footer {
_position: absolute;
_margin-right: 17px; /* IE6 scroll bar space */
}

#head, #foot {
_margin-right: 17px; /* IE6 scroll bar space */
}

#contents_wrap {
_width: 100%;
_height: 100%;
_overflow: auto;
}

この2つのHTMLと2つのCSSで4パターンのファイルを作ってみました。CSSの値等はなるべくどのファイルも同じように表示されるようにしてみました。

いかがでしょうか。Firefox12とIE8で確認したところ、どれも同じように表示されました(我が家の環境では)。少なくともぐちゃぐちゃでわけがわからないということはないと思います。さて、IE6非対応のファイルがどのように表示されるのかIE6があれば試してほしいのですが、もうIE6なんて断捨離執行済みの人のためにスクリーンショットを載せておきますネ。

non-ie6 non-ie6_seo

あちゃー。1つめの画像が「ヘッダ・フッタ固定のhtml&cssサンプル(IE6非対応・ヘッダ上に配置)」で次が「ヘッダ・フッタ固定のhtml&cssサンプル(IE6非対応・ヘッダ下に配置)」なのですが、どちらもスクロールに対してヘッダ・フッタが固定されていないし、コンテンツ部分のスクロールバーが2重になっているし、ひどいもんです。「乱れ初めにし我ならなくに」って感じ(?)ですかね。

div要素を入れ子にしなくてもできないかなーといろいろ試してみたのですが、今のところこれが精一杯です。でもIE6はもう対応しなくてもいいんじゃないかなって改めて思いましたー。

EC-CUBE デフォルトテンプレートのセンタリングのズレを直す。

2014年05月06日 18時00分 正午の月齢:7.2  月名:弓張月(上弦)  潮汐:小潮 月齢:7.2[弓張月(上弦)] 潮汐:小潮
(最終更新日:2019年09月02日)
11年前に投稿 | ウェブ・IT関係 | コメントはありません

1分ぐらいで読めます。

ここ最近いろいろと試しているEC-CUBE。2.13系のテンプレート作りにハマっています。2.12系の構築には「デザインテンプレート・シンプルバージョン(2.11系・無料)」を元に作りこむことができたのですが、さすがに2.13系ではうまく動いてくれないので、2.13系のデフォルトテンプレートを使って構築することにしました。

さて、今まで気づかなかったデフォルトテンプレートの気になる部分。今回はそれを直してみようと思います。

デフォルトテンプレート修正前

お気づきでしょうか。トップ画面から現在のカゴの中に移動すると、全体のデザインがずれてしまうのです。最初はCSSのバグかなと思ったのですが、よく見るとスクロールバーの表示・非表示で画面中心が移動しているのが原因みたい。

スクロールバーが表示されない高さのときもバーの領域を確保しておくことで、この現象を回避できそうです。さっそく、common.cssに以下の記述を追加してみました。

html {
overflow-y: scroll;
}

さてさて、

デフォルトテンプレート・修正後

これで、気色悪い動きがなくなりましたー!!

Translate »