WPのContactForm7が文字化けする

スマイルサーバのver4に移動してから、WordpressのContactForm7で送ったメールが文字化けするという現象が起こりました。

正確には、メールフォームで入れた項目が「????」という文字化けをし、そのほか設定した文字(たとえば、「このメールは●●サイトのお問い合わせから送っています」などのテンプレートの文字)は文字化けしていません。

ContactForm7の文字化けについては、いろいろと記事がありましたが、そのうちの

Contact Form 7で送るメールの文字化けが直らない

php.iniのmbstring.encoding_translation = OnをOffにしたら文字化けしなくなりました。

が参考になりました。

実際に、phpinfoでサーバ情報を見ると、「mbstring.encoding_translation」は「On」でした。

ただ、その設定をするとうまくいくのですが、「On」になっていたのを「Off」にするのは少々抵抗があります。

そのほか見ていて、

mbstring.encoding_translationが原因で文字化け

での設定がよさそうです。

スマイルサーバの「php.ini」は「.user.ini」である必要があるので、そのファイルに

mbstring.http_input = UTF-8

mbstring.internal_encoding = UTF-8

mbstring.substitute_character = "?"

を記入して、文字化けは防げました。

WordPress4.8にアップデートしたらFailed to load content css: (省略)editor-style.cssと出る件

WordPress4.8から、テーマとブラウザによっては、投稿用のビジュアルエディターにしたときに

「Failed to load content css: (省略)editor-style.css」と出るようになった。

ビジュアルエディターにスタイルシートを効かせたい場合、function.phpに

add_editor_style(‘editor-style.css’);

と記述して、適応させるthemeのフォルダにいれたeditor-style.cssを読み込ませたり、「tinymce-advanced」の設定で「editor-style.css」を読み込ませたりしていたのだけども、それがどちらの方法でも引っかかる。

また、ブラウザはGoogleChromeのときに出るような気がしている。

手っ取り早い解決方法として、「editor-style.css」に「import」を利用して、相対パスで別のcssファイルを読み込ませていたので、それを絶対パスに変更した。

ブラウザやサーバやテーマの作り方によって出たりでなかったりするというところは、まったく解決していないが、とりあえず。

wordpressでスラッグからページのURLを取得する

function.phpに以下を追加

function slugtourl($slugname){
	//固定ページのスラッグからページを取得
	$page = get_page_by_path($slugname);
	//ページIDからURLを取得
	return get_permalink( $page->ID );
}

URLを表示したいところに以下を追加

<?php echo slugtourl('access');?>

echoを付けるかつけないかの判別を入れてもよかったけど……。
それ自体は難しくないので……。

function slugtourl($slugname,$display = 1){
	//固定ページのスラッグからページを取得
	$page = get_page_by_path($slugname);
	//ページIDからURLを取得
	$url = get_permalink( $page->ID );

	if($display){
	   echo $url;
	}else{
	   return $url;
	}
}

という感じでしょうか。

xamppのphpmyadminで「Unknown collation: ‘utf8mb4_general_ci’」と出たら。

他のバージョンのxamppを起動させたりしているうちに、
いつも使うxamppのphpmyadminに
「Unknown collation: ‘utf8mb4_general_ci’」
とうエラーが出ました。

ブラウザのキャッシュやクッキーを削除したら治りましたので、報告しておきます。

WordPressのマルチサイトの検証

【サイト構成】

メインサイト(example.com)

├ Aブログ (example.com/a/)

├ Bブログ (example.com/b/)

└ Cブログ (example.com/c/)

メインサイトではA~Cの投稿の最新情報を引っ張って掲載。

 

【確認すること】

このサイト構成で、「WPアプリ」が使用できるか。

 

1.マルチサイトにする。

テスト環境のさくらインターネットを使用。
テスト環境なので、ドキュメントルートではなく、「test」フォルダの中の「wp」というフォルダに、サブドメインをかぶせて使用中。
・・・・・・これがのちのちのエラーに響くとは、予想だにしなかったというか、しとけって感じだけども。

とても親切に説明されている以下のブログ記事を参考にしました。

WordPressのマルチサイトの設定方法|1つのWPで複数のブログを管理しよう(〜ver.4.0)

ディレクトリでマルチサイトにする場合は、「define(‘SUBDOMAIN_INSTALL’, false);」にすることを注意すること以外は、上記記事の説明でさくさく設定できました。

 

2.管理画面にログインしてみる。

メインに、メイン管理者のIDとパスワードでログインすることはできました。

サブサイト(Aブログ)では、まずパソコンからログインしようとすると

googlechromeで「このウェブページにはリダイレクト ループが含まれています」と表示されます。

WordPressをマルチサイトに対応させる場合の注意点

など検索結果の上位にくるいくつかは、「.htaccessの設定は、追加ではなくて上書き」で治ったと。

しかし、それは最初から上書きしてる。でも、「.htaccess」の問題なんだろうなぁ……。

ためしにもう一度、「ネットワークの設置」の「.htaccess」の記述を見ると微妙に違う。

そういえば、.htaccessを入れてから、サブドメインを使うかディレクトリを使うかの設定を変えてしまった気がする。

 

define(‘SUBDOMAIN_INSTALL’, true);(サブドメインを使用する)だったとき

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) test/wp/$1 [L]
RewriteRule ^(.*\.php)$ test/wp/$1 [L]
RewriteRule . index.php [L]

define(‘SUBDOMAIN_INSTALL’, false);(ディレクトリを使用する)のとき

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) test/wp/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ test/wp/$2 [L]
RewriteRule . index.php [L]

で、再度やってみるけど同じ……。WP提供のソースのまま入れたけど、そこが間違ってるんだろう。

WordPress 3.5 をマルチサイト化したらループ地獄に陥ったので直す。

を参考にしました。

つまり、私の特殊な環境「test/wp」にサブドメインかぶせてテスト環境にして実行が、ネックになっていて、RewriteRuleの「test/wp」は本来はいらないということです。

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) test/wp/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ test/wp/$2 [L]

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]

にして、解決。

3.アプリでログインしてみる

あとは、アプリでログインをためしてみるだけ。

ここで私が引っかかったのは、

サイト設定時の「インストール型Wordpressのアドレス」というところ。

ここに、管理画面のアドレス(http://example.com/wp-admin/)を入れてはいけません。

まんまURL(http://example.com/)を入れます。

また、マルチサイトの場合はマルチサイトのURL(http://ecample.com/a/ )を入れます。

これでOK。

WordPress4.3.0にしたらウィジェットが消えた

WordPress4.3.0にしたらトップページに表示していたウィジェット(WP125)が消えました。
デバックをonにしてみたら、

Notice: 呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています! 代わりに
__construct()
を使ってください。 in /usr/home/yabuk864/www/htdocs/wp-includes/functions.php on line 3457

となっています。

WordPress 4.3 Notice Error

↑の記事を読んでいたら、PHP4形式のコンストラクタの記述が非推奨となるため、コンストラクタの記述を__constructに変更するようにということらしいです。

詳しくは↓

https://make.wordpress.org/core/2015/07/02/deprecating-php4-style-constructors-in-wordpress-4-3/

で該当する場所を調べて、

class WP125_Widget extends WP_Widget {

  function WP125_Widget() {
     parent::WP_Widget(
     'wp125',
     'WP125',
     array( 'description' =&gt; 'Displays your ads' )
   );
}

となっているのを

class WP125_Widget extends WP_Widget {

  function __construct() {
    parent::__construct(
    'wp125',
    'WP125',
    array( 'description' =&gt; 'Displays your ads' )
  );
}

これでエラーは消えるのだけど、ウィジェットは表示されない。

困っていたら、直接テーマファイルに書きこむ方法が親切にプラグインに書いてあったので、そっちに変更しました。

残りのウィジェットの書き方、他のプラグインのソースと見比べたりしたけど、間違ってないように思えるんだけどなあ……。

ContactForm7の4.2が、絵文字プラグインの表示に影響

絵文字プラグイン「TypePad 絵文字 for TinyMCE」を利用させていただいているのですが、編集時に絵文字のアイコンをクリックしても、絵文字リストの表示に500エラーがでます

いろいろ調べていましたら、過去に「ContactForm7」のバージョンアップで出たエラーと状況が似ていました。

ここに書き込みあり→http://www.picmo.net/blog/linux/wp-plugin/typepad-tinymce/

「ContactForm7」は6/7に4.2にバージョンアップしていて、確かにそれに合わせてバージョンアップしました。

確かに「ContactForm7」を入れていないWordpressでは「絵文字リスト」は問題なく表示されます

ためしにダウングレードしたら「絵文字リスト」は表示されるようになりました。

取りあえず時間ないので、ContactFormのバージョンアップの何がひっかかったのかとかは、調べてませんが「ContactForm7」の次のバージョンアップで、忘れないように検証せねば……

※絵文字って使ってみると、やっぱり雰囲気変わるなぁ 技術系の記事にはうっとうしいだけか

とにもかくにも正規表現

正規表現サンプル集
http://www.megasoft.co.jp/mifes/seiki/index_s5.html

すぐ使える!正規表現サンプル集
http://hodade.adam.ne.jp/seiki/

サルにもわかる正規表現入門
http://www.mnet.ne.jp/~nakama/

PHPの正規表現 (regular expression)
http://so-zou.jp/web-app/tech/programming/php/grammar/data-type/string/regular-expression.htm#no3

WordPressでスマートフォン表示時の投稿記事内画像をテキストリンクに置き換える方法

[PHP]携帯サイト用にIMGタグをAタグへ変換する。

HTML内の参照画像パスをPHPの正規表現を使って取得しましょう
http://marunouchi-tech.i-studio.co.jp/350/

 

簡単だと歌われようが、何をしようが、さっぱりわからん。
パズルのようだと思う。

そして、これで何がしたかったかというと、後ろの3つぐらい見てもらったら察してもらえると思う……。

でも、すべてが全て画像リンクにしたかったわけじゃないんだ!

WPのメディア機能使っているのは、サムネイルが出来てるからサムネイルに大きな画像をリンクという置換を。
バナー画像みたいに使ってるのは、alt抜き出して、外部リンクをはり、
リンクもなーんも貼られていない画像だけ、altがあるならaltの内容をピックアップして、画像にリンクを貼る。

そんなこんなをやってたら、
ものすごいスクリプトになってしまった……。

美しくない。

公開するなら、美しくしてから……。

数年たつけど、正規表現は本当未だにわからない。一日一個勉強するぐらいの気持ちでないと、頭が毎回リセットされてしまうし、本当苦手や……。

Types1.6.5.1で日付のバリデーションが効かない

Types1.6.5.1のカスタムフィールドで、日付を使っている場合、「有効なデータをご入力下さい」というのにチェックを入れている場合、いくらカレンダーの機能を使ってデータを入れても「有効なデータでない」というエラーが出ます。

この日付のバリデーションのチェックを外すとうまくいくので、検証のプログラムで何か問題が発生しているのかなと思います。

同じことが掲示板にもありました。

Date field not working anymore on 1.6.4

wordpressのデータベースエラー表示について

最近、とあるレンタルサーバに入れているwordpressがしょっちゅう「データベース接続確立エラー」とでかでかと出る様になってしまいました。

レンタルサーバの不安定さが問題だとは思うんですが、このでかでかと出る感じに、お客様も不安でしょう……。

データベース接続確立エラーの画面を変更したいなぁと思いいろいろと調べてみました。

まず、データベースの接続確立のエラーがでると、

wp-includes/function.phpのL2793にある「dead_db()」が動くもようです。

ここに、「if file_exists( WP_CONTENT_DIR . ‘/db-error.php’ )」とありますので、
WP_CONTENT_DIR . ‘/db-error.php’ が存在すると、そちらを取得して表示し、なければ、<h1>タグで「データベース接続確立エラー」と出してくれるようです。

WP_CONTENT_DIR だいたいの設定でwp-contentフォルダのことです。

wp-contentフォルダにdb-error.phpを作成して入れると、任意のエラー表示画面を出すことができます。

テーマを引っ張ってくるわけではないので、ヘッダーもフッターも全て書く必要はあります。