WordPressのお問い合わせフォームやメール送信について

問題
WordPressでは、デフォルト/usr/sbin/sendmailコマンドを使用してメールを送信しています。

認証してから送信されるわけではありませんので、
1)迷惑メールになってしまう(迷惑メールフォルダに入ってしまう)ことがある
2)レンタルサーバーによって、送信されないことがある
 例:さくらインターネットのレンタルサーバの場合、sendmailコマンドでは送信できません。
  エラーログ例:malformed header from script ‘index.php’: Bad header: /home/hoge/dead.letter… Sav, referer: http://www.hoge.com/wp/contact-us/

解決策:
WP Mail SMTP プラグインを利用し、SMTPを使って送信します。

WP Mail SMTP プラグインのインストール方法について、ここでは説明を割愛します。

WP Mail SMTP をインストール&有効にし、
設定>WP Mail SMTP よりSMTP設定を行ったあと、
WordPressのメール送信送信がSMTPに経由することになります。

◆参考資料
Contact Form 7で迷惑メールになってしまう問題をWP Mail SMTPで解決

WordPress tax_queryでデータ取得できなかった

検索して結果が0件でした。

$query = new WP_Query($args);
print_r($query);
で確認したところ、
生成されたSQLのWHERE条件に
下記のようなSQLが出力されます。

AND wp_posts.ID NOT IN (32)
AND 0 = 1
AND …

そのおかげで検索結果が0件になります。

どうやら、WordPressでは、
tax_query 条件句を
メインクエリに追加される前に、
tax_query条件で検索し、ヒントしなかった場合、
0 = 1
をメインクエリに追加されるらしい。

私の場合、
タクソノミーの名前に問題があるようで、
定義したタクソノミーの名前:my-taxonomy
そのままの名前で検索を行うと、0件になります。
my_taxonomy
に変更したところで、

うまくいきました。

WordPress メニュー表示(class)をnav_menu_css_classフィルタでカスタマイズ

WordPressでは、wp_nav_menu関数でメニューを簡単に表示することができます。

## メニューの表示例

デフォルトでは、メニュー アイテムが選択されたときに、そのメニュー アイテムのcssのclass属性に「active」がセットされます。
※CSSで「active」を定義することで、アクティブ状態のメニュー アイテムの表示をカスタマイズできます。
 設定方法について、今回の重点ではないので、説明を割愛します。

メニュー アイテムが「アクティブ」になる条件を自前で判定したい場合、nav_menu_css_classフィルタを利用します。

nav_menu_css_classフィルタ

テーマのfunction.phpに下記のようにを定義します。

※判定条件について、ご自身のニーズに合わせてコード修正してくださいませ。

nav_menu_css_classフィルタの
function my_header_menu_item_classes( $classes, $item, $args )
$item, $argsについて、
var_dumpしてみました。

ご参考まで

WordPress wp-config.phpをいじった後管理画面不調になった

現象:
1)プラグイン新規追加画面にて、キーワードを検索してもなかなか帰ってこない。
2)カテゴリーを編集したところ、編集後、管理画面が真っ白になりますが、更新が正しく反映されている
3)メディア管理画面に「画像」が存在しているが、表示されない(検索中マークがずっと表示されている状態)

対処
1)自前のfunction.phpを全て空にしましたが、改善されない
2)使っているプラグインを全て停止にしました。これも改善されない
3)wp-config.phpが 「UTF-8」になっていたことが原因だった。
  wp-config.phpを開き、ANSIに設定して保存!

下記記事を参考になりました。助かりました。ありがとうございました。
WordPressの管理画面が真っ白になったときの対処法

WordPress 更新後管理画面が真っ白になった時の対処方法

このたび、WordPress 本体を更新したとったん、
管理画面を開くと、真っ白になり、アクセスできなくなりました。

■WordPress本体更新する前にご注意いただくこと

1)DBをバックアップしたこと
2)出来れば全てプラグインを停止させること

■それでも管理画面が真っ白になった時の対処方法

1)データベース更新が必要になる場合

※xxxx:WordPressのインストール先
を開き、データベース更新が必要になる場合、
その旨のメッセージが表示されます。
そのメッセージに従って、データベースを更新させます。

データベース更新後、管理画面を開いてみてください。

2)プラグインの影響で、開けなく場合
下記記事をご参考くださいませ。

WordPress get_query_var注意点

WordPress でフォームからの情報を取得する際、get_query_varを利用します。
その注意点がありますので、メモします。

get_query_varを利用する際、
各ページ毎で取得できるクエリ変数が異なります。

取得できないクエリ変数の場合
クエリ変数を登録してあげる必要があります。

■参考記事

WordPressカスタム投稿を検索結果に表示させるためには

カスタム投稿(post_typeがpostやpage以外)を検索結果に含まれたい場合があります。

やり方について、ひと苦労しましたので、メモします。

■方法1
pre_get_postsフィルタを利用し、post_typeを指定する方法。

function.php

search.php
※この方法の場合、search.phpでは、メインクエリを利用しますので、そのまま変更なしでご利用頂けます。

■方法2
posts_searchフィルタを利用し、post_typeを指定する方法。
※おまけに、キーワード指定した場合の検索例

function.php

search.php
※この方法の場合、search.phpでは、メインクエリを利用しますので、そのまま変更なしでご利用頂けます。

■方法3
WP_Query(サブクエリ)を利用する方法

mysearch.php

■方法4
SQL(サブクエリ)を自前で構築する方法。
mysearch.php

通常の場合、
方法1と方法2を利用することをお勧めします。
複雑なクエリを構築する場合、
方法3か方法4を利用します。

WordPressで発行されたSQLを確認する方法

WordPressが発行しているSQLの履歴を確認する方法について

1)wp-config.php編集
下記1行を追加

★  wp-config.phpをANSIに設定して保存することを忘れなく!

2)任意PHPファイルに
下記をファイルの末尾に追加する

4)ページを開く

ページの末尾にこのページに発行されたSQLが表示される。

また、テーマのfunction.phpファイルもOK

参考:
WordPressが発行したSQLの履歴を確認する方法

WordPress var_dump

WordPressで変数の構造とその中身を確認したい時、

var_dumpを利用することで、簡単に確認できます。

$myarray = array( ‘foo’, ‘bar’, ‘hello’, ‘world’ );

//preで囲んで出力することで、整形されます。
echo(‘<pre>’);

var_dump($myarray);   // $myarrayは任意変数、arrayも可能

echo(‘</pre>’);