タグ: PHP

  • [WP] WordPressの投稿編集画面にカスタムフィールドを配置して同じタグを持つ他の投稿のURLを自動挿入すPHPコード[2023/11/26]

    [WP] WordPressの投稿編集画面にカスタムフィールドを配置して同じタグを持つ他の投稿のURLを自動挿入すPHPコード[2023/11/26]

    はじめに

    表題のように,編集画面のどこかにその投稿につけられたタグと同じタグを持つ投稿のURLを埋め込むPHPコードについて,copilotに教えてもらいました.このコードを使用するには十分に内容を確認して慎重に使用するようcopilotも言っています.

    カスタムフィールドの使い方

    概要

    1. カスタムフィールドは,メタデータのこと.
    2. メタデータは,フィールド名と値で構成される.
    3. 記事内でフィールド名と値を1対として登録する.
    4. 表示させるには,the_meta()テンプレートタグを使用する
      • 表示させるコード : <?php the_meta(); ?> 記事のどこかに配置する必要がある
      • 表示させる場所は,記事の最初/最後のメタデータセッションなどが多い.
      • スタイルシート(styles.css)にて修飾可能 : 追加コード「.post-meta { font-variant: small-caps; color: maroon; } .post-meta-key { color: green; font-weight: bold; font-size: 110%; }」
    5. 高度なテクニック
      • メタデータを取得するコード : get_post_meta( $post_id, $key, $single );
    6. など...
    カスタムフィールドの使い方 – サポートフォーラム – WordPress.org 日本語

    質問1

    「wordpressにおいて投稿の編集画面に自動に表示させるPHPコードを教えて.その際,どのファイルにPHPコードを追加するのかも教えて」

    回答1

    AI で生成されたコード。ご確認のうえ、慎重にご使用ください。FAQ で詳細を確認

    // 投稿の編集画面にカスタムフィールドを追加する関数
    function add_custom_field() {
        // 投稿タイプを指定する(post, page, custom_post_typeなど)
        $post_type = 'post';
        // カスタムフィールドのメタボックスのIDを指定する
        $meta_box_id = 'custom_field';
        // カスタムフィールドのメタボックスのタイトルを指定する
        $meta_box_title = 'カスタムフィールド';
        // カスタムフィールドのメタボックスを表示する場所を指定する(normal, side, advancedなど)
        $context = 'normal';
        // カスタムフィールドのメタボックスの優先度を指定する(high, low, defaultなど)
        $priority = 'high';
        // カスタムフィールドのメタボックスのコールバック関数を指定する
        $callback = 'show_custom_field';
        // カスタムフィールドのメタボックスを追加する
        add_meta_box($meta_box_id, $meta_box_title, $callback, $post_type, $context, $priority);
    }
    
    // カスタムフィールドのメタボックスのコールバック関数
    function show_custom_field() {
        // グローバル変数$postを使えるようにする
        global $post;
        // カスタムフィールドのキーを指定する
        $custom_field_key = 'custom_field_key';
        // カスタムフィールドの値を取得する
        $custom_field_value = get_post_meta($post->ID, $custom_field_key, true);
        // nonceフィールドを生成する(セキュリティ対策)
        wp_nonce_field('save_custom_field', 'custom_field_nonce');
        // カスタムフィールドの入力フォームを表示する
        echo '<label for="custom_field">カスタムフィールドの値</label>';
        echo '<input type="text" id="custom_field" name="custom_field" value="' . esc_attr($custom_field_value) . '" size="25" />';
    }
    
    // カスタムフィールドの値を保存する関数
    function save_custom_field($post_id) {
        // nonceフィールドの値を取得する
        $nonce = isset($_POST['custom_field_nonce']) ? $_POST['custom_field_nonce'] : '';
        // nonceフィールドの値を検証する(セキュリティ対策)
        if (!wp_verify_nonce($nonce, 'save_custom_field')) {
            return $post_id;
        }
        // 自動保存の場合は処理をしない
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return $post_id;
        }
        // ユーザーが投稿を編集できる権限があるかチェックする
        if (!current_user_can('edit_post', $post_id)) {
            return $post_id;
        }
        // カスタムフィールドのキーを指定する
        $custom_field_key = 'custom_field_key';
        // カスタムフィールドの値を取得する
        $custom_field_value = isset($_POST['custom_field']) ? $_POST['custom_field'] : '';
        // カスタムフィールドの値を保存する
        update_post_meta($post_id, $custom_field_key, $custom_field_value);
    }
    
    // アクションフックに関数を登録する
    add_action('add_meta_boxes', 'add_custom_field');
    add_action('save_post', 'save_custom_field');

    このPHPコードを追加するファイルは、テーマのfunctions.phpになります。functions.phpは、テーマの機能やカスタマイズを行うためのファイルです。functions.phpは、テーマフォルダの中にあります。

    1. wp-customize.net 2. ku-su.com 3. webroad.co.jp 4. goworkship.com 5. web.hazu.jp 6. ja.wikipedia.org

    質問2

    「wordpressにおいて投稿の編集画面にカスタムフィールドを設定したとして,このカスタムフィールドに,この投稿につけられたタグと同じタグを持つ投稿のURLを張り付けるPHPコードを教えてください」

    回答2

    まず、カスタムフィールドを追加するには、functions.phpに以下のようなコードを記述します。12

    AI で生成されたコード。ご確認のうえ、慎重にご使用ください。FAQ で詳細を確認

    // カスタムフィールドのメタボックスを追加する関数
    function add_related_posts_field() {
        // 投稿タイプを指定する(post, page, custom_post_typeなど)
        $post_type = 'post';
        // カスタムフィールドのメタボックスのIDを指定する
        $meta_box_id = 'related_posts';
        // カスタムフィールドのメタボックスのタイトルを指定する
        $meta_box_title = '関連記事';
        // カスタムフィールドのメタボックスを表示する場所を指定する(normal, side, advancedなど)
        $context = 'normal';
        // カスタムフィールドのメタボックスの優先度を指定する(high, low, defaultなど)
        $priority = 'high';
        // カスタムフィールドのメタボックスのコールバック関数を指定する
        $callback = 'show_related_posts_field';
        // カスタムフィールドのメタボックスを追加する
        add_meta_box($meta_box_id, $meta_box_title, $callback, $post_type, $context, $priority);
    }
    
    // カスタムフィールドのメタボックスのコールバック関数
    function show_related_posts_field() {
        // グローバル変数$postを使えるようにする
        global $post;
        // カスタムフィールドのキーを指定する
        $custom_field_key = 'related_posts';
        // カスタムフィールドの値を取得する
        $custom_field_value = get_post_meta($post->ID, $custom_field_key, true);
        // nonceフィールドを生成する(セキュリティ対策)
        wp_nonce_field('save_related_posts_field', 'related_posts_nonce');
        // カスタムフィールドの入力フォームを表示する
        echo '<label for="related_posts">関連記事のURLを入力してください(複数ある場合は改行で区切ってください)</label>';
        echo '<textarea id="related_posts" name="related_posts" rows="5" cols="50">' . esc_textarea($custom_field_value) . '</textarea>';
    }
    
    // カスタムフィールドの値を保存する関数
    function save_related_posts_field($post_id) {
        // nonceフィールドの値を取得する
        $nonce = isset($_POST['related_posts_nonce']) ? $_POST['related_posts_nonce'] : '';
        // nonceフィールドの値を検証する(セキュリティ対策)
        if (!wp_verify_nonce($nonce, 'save_related_posts_field')) {
            return $post_id;
        }
        // 自動保存の場合は処理をしない
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return $post_id;
        }
        // ユーザーが投稿を編集できる権限があるかチェックする
        if (!current_user_can('edit_post', $post_id)) {
            return $post_id;
        }
        // カスタムフィールドのキーを指定する
        $custom_field_key = 'related_posts';
        // カスタムフィールドの値を取得する
        $custom_field_value = isset($_POST['related_posts']) ? $_POST['related_posts'] : '';
        // カスタムフィールドの値を保存する
        update_post_meta($post_id, $custom_field_key, $custom_field_value);
    }
    
    // アクションフックに関数を登録する
    add_action('add_meta_boxes', 'add_related_posts_field');
    add_action('save_post', 'save_related_posts_field');
    次に、このカスタムフィールドに、この投稿につけられたタグと同じタグを持つ投稿のURLを自動で張り付けるには、以下のようなコードをfunctions.phpに追加します。3
    
    PHP
    AI で生成されたコード。ご確認のうえ、慎重にご使用ください。FAQ で詳細を確認。
    
    // カスタムフィールドに関連記事のURLを自動で張り付ける関数
    function auto_related_posts_field($post_id) {
        // カスタムフィールドのキーを指定する
        $custom_field_key = 'related_posts';
        // カスタムフィールドの値を取得する
        $custom_field_value = get_post_meta($post_id, $custom_field_key, true);
        // カスタムフィールドの値が空の場合のみ処理をする
        if (empty($custom_field_value)) {
            // この投稿につけられたタグのIDの配列を取得する
            $tags = wp_get_post_tags($post_id, array('fields' => 'ids'));
            // タグがある場合のみ処理をする
            if ($tags) {
                // この投稿と同じタグを持つ投稿のクエリを作成する
                $query = new WP_Query(array(
                    'tag__in' => $tags, // タグのIDの配列
                    'post__not_in' => array($post_id), // この投稿を除外する
                    'posts_per_page' => 5, // 最大5件取得する
                    'orderby' => 'rand', // ランダムに並べる
                    'no_found_rows' => true, // ページネーションをしない
                ));
                // クエリにマッチした投稿がある場合のみ処理をする
                if ($query->have_posts()) {
                    // 関連記事のURLの配列を作成する
                    $related_posts = array();
                    // クエリのループを開始する
                    while ($query->have_posts()) {
                        // 投稿データをセットする
                        $query->the_post();
                        // 投稿のURLを取得して配列に追加する
                        $related_posts[] = get_permalink();
                    }
                    // クエリのループをリセットする
                    wp_reset_postdata();
                    // 配列を改行で区切って文字列にする
                    $related_posts = implode("\n", $related_posts);
                    // カスタムフィールドの値として保存する
                    update_post_meta($post_id, $custom_field_key, $related_posts);
                }
            }
        }
    }
    
    // save_postフックに関数を登録する
    add_action('save_post', 'auto_related_posts_field');

    次に、このカスタムフィールドに、この投稿につけられたタグと同じタグを持つ投稿のURLを自動で張り付けるには、以下のようなコードをfunctions.phpに追加します。3

    AI で生成されたコード。ご確認のうえ、慎重にご使用ください。FAQ で詳細を確認
    // カスタムフィールドに関連記事のURLを自動で張り付ける関数
    function auto_related_posts_field($post_id) {
        // カスタムフィールドのキーを指定する
        $custom_field_key = 'related_posts';
        // カスタムフィールドの値を取得する
        $custom_field_value = get_post_meta($post_id, $custom_field_key, true);
        // カスタムフィールドの値が空の場合のみ処理をする
        if (empty($custom_field_value)) {
            // この投稿につけられたタグのIDの配列を取得する
            $tags = wp_get_post_tags($post_id, array('fields' => 'ids'));
            // タグがある場合のみ処理をする
            if ($tags) {
                // この投稿と同じタグを持つ投稿のクエリを作成する
                $query = new WP_Query(array(
                    'tag__in' => $tags, // タグのIDの配列
                    'post__not_in' => array($post_id), // この投稿を除外する
                    'posts_per_page' => 5, // 最大5件取得する
                    'orderby' => 'rand', // ランダムに並べる
                    'no_found_rows' => true, // ページネーションをしない
                ));
                // クエリにマッチした投稿がある場合のみ処理をする
                if ($query->have_posts()) {
                    // 関連記事のURLの配列を作成する
                    $related_posts = array();
                    // クエリのループを開始する
                    while ($query->have_posts()) {
                        // 投稿データをセットする
                        $query->the_post();
                        // 投稿のURLを取得して配列に追加する
                        $related_posts[] = get_permalink();
                    }
                    // クエリのループをリセットする
                    wp_reset_postdata();
                    // 配列を改行で区切って文字列にする
                    $related_posts = implode("\n", $related_posts);
                    // カスタムフィールドの値として保存する
                    update_post_meta($post_id, $custom_field_key, $related_posts);
                }
            }
        }
    }
    
    // save_postフックに関数を登録する
    add_action('save_post', 'auto_related_posts_field');

    1. ja.wordpress.org 2. shu-sait.com 3. miya-system-works.com 4. qiita.com

    まとめ

    プログラミング・コードに関する質問に対する答えは,短い質問であるものの回答はしっかりしてそうです.今後,実装して検証しますが,真に受けて安易に使用しないでくださいね.何時になるかわからんけど^^;

    編集履歴

    2023/11/26, MR.HARIKIRI
    2023/11/28, 追記 (カスタムフィールドの使い方)

  • [WP] WordPressからメールを飛ばすphpコードを書く  [2023/11/24]

    [WP] WordPressからメールを飛ばすphpコードを書く <情報収集まで> [2023/11/24]

    はじめに

    WordPressには沢山のpluginがあります.e-mailを飛ばすにもWP Mail SMTPというpluginがあります.現在,このプラグインを使っていますが,自分でもphpを書けないかと思い立ちました.

    blogを始めた当初は,珍しさもあって必要以上に複数のpluginを並行してつかっていました.有料のpluginも4つほど試しました.

    月日が経つと飽きてきます.セキュリティ的にも複数のpluginは,それぞれでリスクがあるため,pluginのスンストール数が増えれば増えるほどリスクが高まります.例えば,1つのプラグインにリスクがあるため,安全性が99%だと仮定します.1つでも安全性がとこなわれると,それはもう安全ではないので直列のイメージで計算します.すなわち,4つのプラグインがあると99%の4乗が安全率になります.1つのプラグインの場合99%安全,2つのプラグインの場合99^2% = 98%,同様に3つで97%,4つで96%というように,プラグイン数が多くなると安全性が低下していくのが理解できます.

    「Simple is best」がやかりよろしかろう,ということですね.すでに,pluginは極力減らすという方針を立てているので実践していきましょうか.今日は,情報収集まで...

    構築手順の概要

    1. メールサーバーのsmtp設定
      • MRHARIKIRのサイトは,Synology NASなのでそれを立ち上げるか,gmailでもいい
    2. phpコードを書く
      • phpにはsmptに関するAPIがあるので,それを使う.
    3. それを使ってメールを送信
      • phpコードにメッセージを送ってもらう.

    1. smtp設定

    コードは,functions.php内に配置する.

    Developer Resources / by Steven Lin

    phpmailer_init | Hook | WordPress Developer Resources

    WordPressからsmtpでメール送信する2つの設定方法を解説

    WordPressからsmtpでメール送信する2つの設定方法を解説 | Fukuro Press (fukuro-press.com)

    2. メール送信phpコード

    メールとして送信したい文字列をwp_mail()を使ってコードを書く

    wp_mail()関数の書式

    メール送信コード

    Developer Resources

    wp_mail() | Function | WordPress Developer Resources

    編集履歴

    2023/11/24 MRHARIKIR (情報収集のところまで)

  • [WP] WordPressの機能/表示を追加/変更するには,どのファイルにコードを書くの? 今は昔![2023/11/11]

    [WP] WordPressの機能/表示を追加/変更するには,どのファイルにコードを書くの? 今は昔![2023/11/11]

    アイキャッチ : DALL:E3

    今は昔、

    WordPressにはテーマを使用すれば機能や表示を変えることができます。選んだテーマでは,自分の思うようになっていないことが殆どでしょう。そんな時は,あるファイルにコードを追加して機能追加や表示を好みのものに変えることもできます.

    さて,何を知らなければならないでしょうか.

    WordPressのテーマ: Twenty Twentyまでは,「content.php」が存在していました. でも,どうやらTwenty Twenty Oneからは,「content.php」が存在しないようです.

    最近のテーマ(新しいWordPress)では,関数をフックして機能を追加するのがトレンドらしい.従って,以下の「関わるファイルたち」に示したphpファイルが存在しないテーマが最近のテーマのトレンド構造となっている・・・らいしい.

    フックのタイミング

    • the_title()が実行されたタイミング
    • wp_head()が実行されたタイミング
    • 記事が公開されたタイミング

    関わるファイルたち

    どのファイルの内容を編集すればよいか.WordPressでは,固定ページ,投稿ページがあります.また,投稿ページは,カテゴリとタグで分類できるようになっています.固定ベージを表示させる場合は,page.phpというファイルが使用されます.投稿ページを表示させる場合は,singular.phpというファイルが使用されます.カテゴリ別に表示させる場合,content.phpというファイルが使用されます.タグ別に表示させる場合は,archive.phpというファイルが使用されます.以上の構造は,テーマによって異なることもあるようですが,一般的なテンプレートファイルたちです.

    表示させるページ処理をしてくれるファイル
    固定ページpage.php
    投稿ページsingular.php
    カテゴリ別の投稿ページcontent.php
    タグ別の投稿ページarchive.php
    以上以外index.php

    WordPressで子テーマを作成する方法(詳細ガイド)-kinsta

    https://kinsta.com/jp/blog/wordpress-child-theme/

    指示役のファイル

    前述のファイルたちを指定する役割を持っているファイルが,function.phpです.

    最近のテーマでも,function.phpは健在です.実は,ここにフックのコードを書いてあげるのが,以前のテーマも含めて共通解です.

    WordPressで子テーマを作成する方法(詳細ガイド)- kinsta

    https://kinsta.com/jp/blog/wordpress-child-theme/#create

    最近のテーマでは

    最近のテーマでは,content.phpやpage.phpなどのファイルを存在せず,phpの機能であるフック(hook)を使って,関数を実行させるようです.ということは,自作の関数も同様にフックを使うのがスマートです.

    例えば,headerにgoogle analyticsなどのコードを自分のサイトのページ/投稿に埋め込むことも,このフックを使用するしかなないと言うことです.

    1. 以下の2つのフックを使う.
    2. アクションフック (action hook)
      • 登録: add_action(‘アクションフック名’, ‘フックされる関数名’), 複数行のコードで複数定義が可能.
      • 実行: do_action(‘アクションフック名’)
      • アクション
        • 記事の公開というアクション
        • 記事の更新というアクション
        • などなど
    3. フィルターフック (filter hook) : add_filter()

    フックコード

    WordPressには,既に”wp_head”というアクションフック名が定義されています.それに便乗する形でフックコードを書きます.

    アクションフックコードの例

    以下に示したコード例は,アクションフックの説明です.

    (1) add_actionにより,wp_headのアクションフック名のフックを呼び出します.その時,google_analyticsという関数をフックしてもらいます.

    (2) function google _analytics()には,実行したいコードを書きます.これで,WordPressが,通常運転中でwp_headを実行した時,google_analyticsも実行されることになります.

    (3)もしも,どこかの任意のタイミングがあって,そこでフックを実行したいときには,do_actionを使用します.

    add_action('wp_head','google_analytics');
    function google_analytics() {
      if( !is_user_logged_in() ) {  //ユーザーがログインしていない場合に実行する
      ?>
      <script>
        ・
        ・
      </script>
      <?php 
      }
    }

    フィルターフックの例

    フィルターフックの例は,また今度^^)

    WordPressのテーマTwenty Twenty-TwoにGoogle AdSenseの自動広告を設置してみた話し

    https://www.5cho-me.com/archives/193076

    WordPress のフック(Hooks)

    https://www.webdesignleaves.com/pr/wp/wp_func_hook.html

    参考文献

    WordPressのthe_categoryをフィルターフックする (2013)

    https://worklog.be/archives/2032

    多様なスタイルバリエーションのデフォルトテーマ「Twenty Twenty-Three(2023年)」- デフォルトテーマ –

    https://st7-wp.com/twenty-twenty-three/

    コミュニティから生まれたWordPressの新デフォルトテーマ「Twenty Twenty-Three」- kinsta –

    https://kinsta.com/jp/blog/twenty-twenty-three-theme/

    編集履歴

    2023/11/11, Mr.HARIKIRI
    2023/11/12, アクションフックの例の文言整備

  • [WP] Synology NASのWordPressにおけるWebサイトのPHPをPHP8.0へ移行する [2023/02/01]

    [WP] Synology NASのWordPressにおけるWebサイトのPHPをPHP8.0へ移行する [2023/02/01]

    はじめに

    サイトの反応速度をあげるには,PHPのバージョンを最新にしましょう.PHP7シリーズよりもPHP8の方が高速に処理できるようです

    移行手順

    PHP8.0の適用手順の要点は,プロファイルを新規に作るようにして,エラーが生じた場合に前バージョンのPHPに戻せるようにします.

    今日はここまでです.実際に作業をしてから結果報告します.

    具体的な作業手順は,以下のリンクを辿ってください.

    SYNOLOGY NAS WORDPRESS WEBサイトPHP8の適用

    https://masao-tec.com/apply-php8-0-for-synology-nas-wordpress-website/

    編集履歴

    2023/02/01 Mr. Harikiri

  • [PHP] プログラミング – include, require – パス [2020/07/08]

    [PHP] プログラミング – include, require – パス [2020/07/08]

    外部の関数を使うには

    プラグインの関数チェック

    プラグインの削除/停止で、使いたい関数がなくなったことも考慮して存在をチェックします

    if ( function_exists( ‘function_in_plugin’ )){ function_in_plugin(); }

    phpファイルを挿入

    • include(), require()の機能
      • include(), include_once(): ファイルが無い場合、警告するが実行停止しない
      • require(), require_once(): ファイルが無い場合、実行停止する
      • その位置に単純挿入
      • 両者で変数を共有できる
    • include(/hoge/hoge/file.php), require(/hoge/hoge/file.php)でのパスの設定
      • dirname(__FILE__) : 現在パス
      • $_SERVER[‘DOCUMENT_ROOT’] : blogのルートパス
      • 相対パス : ‘../path/file.php’) : ‘..’はパスを1つ戻ってfile.phpを探す。ない場合は、元パスも探す(らしい)。
      • SERVERの設定
        • include_path変数の変更/設定
        • set_include_path(hoge/hoge);で初期値を変更可能
        • ini_set(‘include_path’, ‘/hoge/hoge’);でも可能

    PHPの挙動に関するセッティング

    サーバー側の設定です。キャッシュや使用するメモリー容量、その他の細かな設定が可能なようです。僕の場合は、Synology NAS のDSMからWebStationを起動して、script language settingのcoreタグで数値の設定をします。

    今現在では、その設定の仕方がよく理解できていません。以下には専門用語(キーワード)を抽出してどのような内容な内容なのか理解を進めている途中です(2021/11/26)。

    FPM

    FastCGI Process Manger (FPM)は、Synology NASのWebStationからパラメータを設定できます。

    FastCGI Process Manager

    https://www.php.net/manual/ja/install.fpm.php

    APC

    APC

    https://havelog.aho.mu/develop/php/e167-php-apc-install.html

    https://www.php.net/manual/ja/apcu.configuration.php

    編集履歴

    2020/08/25 Mr.HARIKIRI
    
  • [Synology] NAS – WordPressからサイト外にメールを送信する  [2020/09/13]

    [Synology] NAS – WordPressからサイト外にメールを送信する [2020/09/13]

    この記事は、少し古いです。代わりに以下の記事をご覧ください。この記事は、参考資料として「Appendix」を保存するために、このまま維持することにしました。
    代わりの記事では、2020/09の時点において、Synology NASに立ち上げているWordPressから、外にメールを送れるように、「WP Mail SMTP by WPForms」プラグインとGMAIL APIを使って可能にする内容です(2020/09/13)。

    概要

    メール送信の手段は、以下のとおり2つある。

    1. SMTPにるメール発信

    このSMTPとは、WordPressが導入されてるいサーバーで可動しているSMTPである。SynologyもGoogleのgmailの仕様が変更されたことで、少し混乱しているかもしれない。サイトに行っても解決策が古かったりしているので、今、現在は、どうなのか不明だ。

    現状では、SMTPを使用したサイト外への発信は断念した。そもそも、Synology NASのSMTPからWordPressのメールを飛ばせるのかどうかすら、よく理解できていない。

    SMTPを使用する場合、DNSの設定とMailPlus Severの設定をそれぞれ整合させなければならないと思われるが、DNSの設定については、以下で述べているように、なかなかハードルが高く僕の技術と知識レベルでは、現状断念せざるを得なかった。

    2. PHPによるメール発信

    色々調べていく過程で、WordPressのプラグインを使用して、その基本プログラム言語であるPHPからメール配信をコントールできることが分かった。まず、最初に試した”WP mail SMTP by WPForms”は、配信の成否が分かるものの、配信できない場合の解決策を提案してくれなかった。

    Synology: WordPress not Sending Emails (Solved)

    そこで、次に試した”Post SMTP Mailer/Email Log”は、GmailアカウントとGoogle API consoleの設定により、メールをWordPress(厳密にはPHP)からサイト外に発信できるようにするプラグイン (作者: Yehuda Hassineさん)。これを使って、且つ、blogにある設定方法:“How to Set up and Configure Postman SMTP on WordPress”に従い設定を進めてた。

    その結果、サイト外へのメール発信がこれまでできなかったが、無事に発信できるようになった。

    3. 設定方法

    基本的には、同設定方法に従えばよい。Google API Consoleの体裁が若干の変更があり混乱するが、図1のように、設定する項目は、左側のタグのように、後ほど確認できる。設定し忘れても、このページに戻ってから設定すれば問題ない。以下に、Google API Consoleでの作業における特記事項を示す

    • ドメイン(harikiri.diskstation.me)の承認には、Google API Consoleでの作業でダウンロードしたhtmlファイルを、Google API Consoleが指定する、ドメインにコピペする
    • クライアントIDとクライアント シークレットを、当該プラグインの入力領域にコピペすれば良い。

    設定項目は、以下の図のようなタグ(左側)がある。

    今回の作業で全体として分かったこと

    • Synology NASのメールシステム(SMTP)を使用できるようにするには、DNSの設定が完全でないといけない。
    • DNSの設定の検証には、MX TOOLBOXを使用できる。このツールは、Synologyサイトにも使用の記載があり、DNS, SMTP, MXなどをはじめ、サイトにおける多数のサーバーの設定の適切性を調べてくれる。
    • DNSの設定には、A RECORD, NS RECORDに加えて、メール配信に関わるMX RECORDの正しい記載が必要である。
    • 更に、近年のSPAMメール対策のために、多数の認証方法が取られており、SPF RECORDについても正しい記述が必要である。
    • 以上のように、SMTPを使えるまでには、まだ、知識・技術が不足している。今後の自助努力によるSMTPの設定の完了に期待する。時期バージョンのDSMにも期待。
    編集履歴
    2019/12/14 はりきり(Mr)
    2020/09/13 修正 (新しいくプラグインを変更したので、その記事への誘導、この記事は、Appendixほ保存するために、このまま維持する)
    (さらに…)