目次
WordPressを引っ越したらPHPエラー、というトラブル
「Webサイトが表示されていない」というお問い合わせをいただいたので、当該Webサイトを確認したところ、たしかにPHPエラーが発生していました。
事情をお聞きすると、某大手Webサービス会社が提供するWebサーバーがサービスを停止するため、同社内の新しいWebサービスに引っ越しされたとのこと。
引っ越し作業はWebサービス社側で行われているので、特に問題は無いように思われましたが、結果的にPHPエラーが発生しているので、どこかで手違いが発生したのかも。
Webサービス社のサポートからは「容量不足の可能性」と言われたようですが、いやいや、そんなことないでしょ。
というわけで管理アカウントをいただいて調査してみました。
一応ドメインをnslookupしてみる。→サーバーのIPを指しているのでOK。
test.htmlをアップロードしてみる。→表示された、問題なし。
test.phpもアップロードしてみる。→表示された、PHPの問題でもなし。
.htaccessが設置されていなかったので設置してみる。→特に変化なし。
となるとMySQLへのアクセスに失敗している可能性高し。wp-config.phpを見に行く。
すると驚きの事実が。
wp-config.phpが真っ白でした。パスワードが間違っているとかじゃなくて、何も記述されていない。そりゃPHPエラーになりますよね。
というか、これ、Webサービス社の引っ越し作業が失敗してるのでは?
それともWordpressはサポート対象外ということなのか・・・。
ともあれ、原因が判明したので、wp-config.phpを新しく作り直して、MySQLへのアカウントも追加した。
結果、当初とは異なるPHPエラーが発生。おや?
プラグインのPHPが古いようだ。よく見るとプラグインが更新されていない。それが原因のようだ。取り急ぎプラグインを停止すると、正常に稼働しました。
Webサービス社のサポートの対応がマニュアル通りの対応のみにように感じられました。もう少し初心者に優しい対応をしてほしいところ。
WordPressで任意のカテゴリを非表示にする。
WordPressでサイドメニューにカテゴリを表示する際、登録した投稿カテゴリが全て表示されてしまいます。
できれば表示する投稿カテゴリを選びたいんですよね。
WordPressで特定のカテゴリーの投稿・カテゴリー・タグを非表示にするhttps://www.saaria.info/archives/3216
function.php に記述すれば非表示に出来ることは理解できます。
でも、これハードル高くないですか?
私は出来ますが、クライアントが自分でコントロールしたいと考えたとき、function.php に追記するのは難しいと思うんですよね。
Pro Categories Widget で出来そうな感じです。
ですが、最終更新が2019年3月頃。最新のWordpressバージョンには未検証。
まあ、問題はないのでしょうが、できれば「互換性あり」のものを使用したい。
Display Categories Widget を使用することにしました。
最終更新が2019年7月。最新のWordpressのバージョンに互換性あり。
早速インストールして有効化。
ん、表示されない。というか表示が崩れている。
テーマとの相性が良くないのか、ソースは読み込まれているのに、真っ白になる。
どうやらCSSの flort に問題があるようだ。
ul.dcw{display:inline-block;}
上記を追記することで正しく表示されました。
WordPressに固定ページ・投稿ページを表示するショートコードを作成する方法
WordPressでWebサイトを制作すると、トップページに複数の記事を表示させたい時があるんですが、任意の場所に固定ページや投稿ページを自由に呼び出してきて記述するソースが意外と無いので、ショートコードを作成してみました。
自分用に作成したので、ちょっとおかしいところがあるかもしれませんが。
<?php /*子テーマで利用する関数を書く*/
//固定ページ投稿ページをショートコードで呼び出す
function page_func($atts) {
extract(shortcode_atts(array(
'name' => 'defalt',
'post_type' => 'post',
'class' => 'defalt',
'show' => 'content',
'category' => 'default',
), $atts));
$args = array(
'category_name' => $category,
'post_type' => $post_type,
'showposts'=>5,
);
//$blog_posts = query_posts('category_name=top&showposts=5');
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) : $the_query->the_post();
echo '<div class="front_post">';
if($show == 'title'){ //titleだったら「投稿タイトル」を表示させる
$content_title = get_the_title();
echo '<div class="'. $class.'_title"><a href="'. get_permalink($post->ID) .'">' . $content_title . '</a></div>';
}
//それ以外(デフォルト)だったら「投稿本文」を表示させる
$thumbnail = get_the_post_thumbnail();
$content = get_the_content();
$content = preg_replace("/\n/","<br />",$content);
echo $thumbnail;
echo '<div class="'. $class.'">' . $content . '</div>';
echo '</div>';
endwhile;
//wp_reset_postdata();
return ;
//return $html_echo;
}
add_shortcode( 'page_echo', 'page_func', true );
任意の場所に下記のショートコードを記述する
[page_echo name=スラグ名 post_type=post]
オプション
show=title タイトルを表示
class=任意のクラス名 divタグにクラス名をつける
参考サイト
wordpressの特定のページ(投稿・固定ページなど)を呼び出すショートコード - 新潟ホームページ制作【マザーシップ】フリーランス(SOHO)
http://mothershipweb.jp/wordpress/post607/
WordPressを簡単に引っ越しする方法
クライアントから依頼を受けて、WordPressの引越し作業を行いました。
昔は標準機能のエクスポート・インポートを使用したり、データベースをエクスポート・インポートしたり大変でした。
今は引っ越し用のプラグインがあるので、非常に簡単に引っ越しできます。
今回使用したのは上記のプラグイン。
基本的にファイルにエクスポートして、引越し先にWordPressでインポートするだけで引っ越しが完了します。
テーマやプラグインすらも引っ越しできてしまうので、とっても簡単です。
ログインIDすらも引っ越しできる、というか上書きされてしまうので、引越し元のIDでログインし直す必要があります。
なんとも簡単なWordPressの引っ越しですが、それはサーバー環境が同じ場合です。
今回担当したのは、PHP5 → PHP7の環境なので、不具合が出ることが予想されました。
プラグインを実行したところ、予想通り下記のエラーが・・。
Warning: Declaration of description_walker::start_el(&$output, $item, $depth, $args) 〜〜
Fatal error: Uncaught Error: Call to undefined function spliti() in 〜〜
PHP7では使用できない命令です。
使用していたテーマが古いものだったようですね。
「テーマ変更・アップデートは行わない」というクライアントの意向だったので、テーマファイルを修正して対応しました。
軽微な修正で収まってくれて助かりました。
WP Mail SMTP でGmailからメールを送信する
経緯
得意先様のWebサイトを作成した際に、ContactForm7を用いて問い合わせフォームをよく作ります。
サーバーによってはSMTPを用意しなければならないため、Wp Mail SMTP を利用します。
この得意先様の場合は、契約しているメールサーバーのSMTPを利用していました。
トラブル発生
WordPressをアップデートしたためか、プラグインをアップデートしたからか理由は不明ですが、フォームの送信ボタンをクリックしても、くるくる回るだけで、送信完了にならない。
当然メールは送信されない。という状況が発生しました。
ステージングサーバーを設置して状況を確認しましたが、ステージングサーバーでも同様の症状が発生する。
何故かは分かりませんが、どうやらSMTPを利用できていないようだ。
対応
Wp Mail SMTP からGmailを利用する方法に切り替えることにします。
以前はGmailのアカウントを登録したのですが、いまはAPIを利用するらしい。
How to Securely Send WordPress Emails Using Gmail SMTP with WP Mail SMTP
https://wpforms.com/how-to-securely-send-wordpress-emails-using-gmail-smtp/
うーん、どうやらGoogle Cloud Platformを使用するらしい。
こちらのサイトが分かりやすかったので参考にさせていただきました。
解決
Gmailに切り替えたところ、ContactForm7の送信ボタンから送信完了表示に切り替わりました。
無事解決。