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の送信ボタンから送信完了表示に切り替わりました。
無事解決。