カテゴリー: WordPress

  • [WP] Synolgoy NASのサイトヘルスでいつも問題のままだった永続キャッシュ(パーマネントキャッシャ)をNASにredis serverをインストールして解決する方法

    [WP] Synolgoy NASのサイトヘルスでいつも問題のままだった永続キャッシュ(パーマネントキャッシャ)をNASにredis serverをインストールして解決する方法

    サイトヘルス

    は,WordPressの状態を示してくれます.いつも「永続キャッシャ」が問題であると出てくる.どうすればいいのだ.ここ数年で何度となくGoogle検索したものの解決策は見つけられずにいた.今日,Google検索してみたら,redis serverを使えとあったので,それを実行してみた.以下,その要約を示す.

    1. Synology NAS -> パッケージ -> Container Manager」をインストール
    2. (dockerはcontainer managerにパッケージ名が変わった)
    3. Container Manager -> レジストリ(Registry)画面で「redis」を検索
    4. 表示された「redis/redis-stack」をダウンロード(latest).
    5. イメージ(image)画面 -> 「redis-stack」をクリックで選択し,起動する
    6. (設定画面が現れるので,portのみ入力して他の環境変数は削除),次に行く.
    7. (確認画面が現れるので),完了で起動する.
    8. Synology NASのWordPressにプラグイン「redis object cache」をインストールし,キャッシュを有効にすれば完了.

    サイトヘルスには永続キャッシャの問題は綺麗に消えたのだが,果たしてパフォーマンスは実際に改善しているのだろうか? パフォーマンスの改善があれば,Google検索におけるサイトの序列があがり閲覧数が増えるはずなので,それで確認ができるのかな.

    参考

    永続キャッシャ(パーマネントキャッシャ)するには,redis serverをSynology NASで稼働させる方法で良いようだ.以下のサイトを参考にした.

    Synology NAS WordPress Redisサーバと「Redis Object Cache」プラグインのインストールおよび設定 | masao-Tec-blog

    自動ロードオプション

    というものがWordPressにはあるらしい.この数が多いとページを読み込むたびに自動ロードされるためパフォーマンスが落ちるのだが,永続キャッシャを有効にすれば問題なくなるようだ.今回,永続キャッシャを有効化できたので,この「自動ロードオプション」とやらも小さくして推奨されている800kb未満を目指してメンテナンスしてみようと思う.その報告はまた今度.

    編集履歴

    2024/08/11 ミスターはりきり

  • [物価高] HDDも買えないヨ.

    [物価高] HDDも買えないヨ.

    物価高でNASの稼働も大変だ

    コロナが落ち着いてきたと思ったら,世界情勢の問題で日本でも昨年の夏頃から物価高が進んでいる.加えて円安だから物価高は根が深い.

    当サイトはSynology NASにWordPressを導入して運営しているが,故障した時のために昨年7月に8T HDDを1台確保しているものの,もう一台予備でもと思いAmazonでWD HDDの価格を見てみたところ,WD Red Plus 8TBで(CMR)の価格は34,140円だった.昨年2023/07の購入額は,26,919円だったので,約1.3倍に値上がりしたことになる.下表には12TB HDDの価格も併せて示した.

    DateWD Red 8TB 税込み取得価格WD Red Plus 12TB 税込み取得価格
    2020/05/28(?????, ???), 27,800円n/a
    2021/12/13(?????, ???), 23,380円n/a
    2022/09/28n/aPlus (7,200rpm, CMR), 41,527円
    2022/10/13Plus (5,640rpm, CMR), 28,961円n/a
    2023/07/06Plus (5,640rpm, CMR), 26,919円n/a
    2024/08/11Plus (5,640rpm, CMR), 34,140円(Amazonから)Plus (7,200rpm, CMR), 54,050円(Amazonから)

    どうしようか.まだ,待つか! 円安が落ち着いてくるのを待ってからにするか,年末くらいは最低でも待つことになるだろうな.

    編集履歴

    2024/08/11 Mr.Harikiri

  • [WP] 投稿を並び替えて表示させる: WordPress Popular Postsプラグインを使う [2024/08/11]

    [WP] 投稿を並び替えて表示させる: WordPress Popular Postsプラグインを使う [2024/08/11]

    WordPressの投稿を人気順で表示させるには

    このサイトを立ち上げてからもうかれこれ6年くらいになりますが,当時はいろんなプラグインをインストールして楽しんでいました.最も楽しかった時期だったのかも知れません.

    今日は,しばらく投稿やサイトのメンテナンスに遠ざかっていましたので,少し気を引き締めて,これからはもう少しは楽しく投稿したりメンテナンスをしたりできるようにと思っています.

    沢山の投稿を書いてもどれが人気であるのか知ることは,投稿活動にも身が入ると言うものです.今回は,当サイドでも人気順に投稿を表示させようと思います.参考となる以下の記事を参考にした.

    結局,自分でコードを書くのは,まだしんどいのでプラグインだけで「人気順の投稿表示」ができる「WordPress Polular Posts」というプラグインをインストールすることにしました.

    昨日は,インストールしただけで終わってしまったが,今日は,ページに「WordPress Popular Posts」を挿入してみた.

    WordPress標準のブロックエディタを使っているなら,「+」から「WordPress Popular Posts」ブロックを好きなページの好きな場所に追加する.追加した場所には各種設定項目が入力可能となっているので,必要な項目を入力すれば完成.保存してページをブラウザで見てみよう.

    参考文献

    1. プラグインだけによる : プラグイン「WordPress Popular Posts」の使い方!人気記事の表示やカスタマイズ方法を解説 | PicoWeb
    2. 独自コードも含めた方法 : 【【Wordpress】 人気順(閲覧数順)に投稿を並び替える方法 (to-ko-s.com)
    3. cssファイルを追加する方法 : WordPressでCSSを編集する方法(編集、追加、サイト外観のカスタマイズ) (kinsta.com)

    編集履歴

    2024/08/11 Mr.Harikiri
    2024/08/12 追記(ページへのWordPress Popular Postsの埋め込み)

  • [WP] 2024年,WordPressサイトにメンバーシッププラグインを選らぶ

    [WP] 2024年,WordPressサイトにメンバーシッププラグインを選らぶ

    以前に

    自分のblogのWordPressサイトでmember shipプラグインを導入してメンバーシップサイトを作れないか実験的に検討をしていた時期がありました.AMP対応のためのプラグインとのコンフリクトを解消できずに止めてしまっていました.

    最近,AMP対応をやっと断念することに至ったのでもう一度チャレンジしようと思っています.

    member shipとは,

    会員制ということです.サイトにあるユーザーが登録すると,例えば会員レベルに応じて未登録では見れなかったページや<more>のブロック部分を閲覧できたり,定期購読のメールが飛んできたりできます.

    再度チャレンジ

    今回,再度チャレンジしたいと思い,どのmember shipプラグインが良いかを調べることにしましたが,kinstaに良い記事があったので,リンクを張っておきます.

    やはり,Ultimate Membership (UM)が良いようです.以前も最初に検討したのが,このUMでした.

    当時は,AMP対応を模索していたので,コンフリクトがあったため,UMを含むそのたのmember shipプラグインの検討・導入を終了させていました.

    今回は,もう一度UMを導入してみようと思います.有料版も29ドルとこれらのプラグインの名では,お手頃との評価です.

    経常収益獲得のためのWordPress用会員制サイトプラグイン24選 (2023/08)

    https://kinsta.com/jp/blog/wordpress-membership-plugins/#1-ultimate-membership-pro–29

    編集履歴

    2024/01/25 Mr.Harikiri

  • [WP] あるページのある位置に他のページを遅延表示させるには[ただいま情報収集中]

    [WP] あるページのある位置に他のページを遅延表示させるには[ただいま情報収集中]

    blog

    のレスポンスをなるべく落とさずWordPressの機能を強化するにはどうしたらというお話です.

    例えば,ページが表示される際に他のページを挿入したい時,単純に挿入すると表示速度は追加されたページの大きさだけ遅くなってしまいます.

    画像の遅延表示についてはプラグインもあったり,最近のWordPress 5.5からはHTML5として実装されているとも聞きます.対応しているブラウザでは遅延表示が可能となっているようです.

    遅延表示

    のphpコードの書き方について以下調査しました.調査した範囲ではimageの遅延表示についてがほとんどでした.今回はここまで.

    編集履歴

    2024/01/23 Mr.Harikiri

    Is any way to call lazyblock from PHP code?

    ここに記載の機能は,単純にページの挿入するためのコードのように思う by Mr.H

    https://wordpress.org/support/topic/is-any-way-to-call-lazyblock-from-php-code/

    WordPress Lazy Loading using Pagination

    記載のコードは,ページネーションの表示ブロックを遅延表示させるようだ by Mr.H

    https://stackoverflow.com/questions/56637182/wordpress-lazy-loading-using-pagination

    Build Your Own Simple Lazy Loading Functionality in WordPress

    javascriptであるLozadというライブライを使ってimageを遅延表示

    https://macarthur.me/posts/build-your-own-simple-lazy-loading-functionality-in-wordpress

    How to Lazy Load in WordPress (Images & Videos) – JetPack –

    Jetpackプラグインの使用や,プラグインを使用しないでfunctions.phpにコードを書く方法など詳細な説明あり by Mr.H

    https://jetpack.com/blog/wordpress-lazy-loading/
  • [WP] テーマ: Twenty Twenty-Fourを導入したのでカスタマイズのための情報収集

    [WP] テーマ: Twenty Twenty-Fourを導入したのでカスタマイズのための情報収集

    WordPress

    の標準テーマの最新は,「Twenty Twenty-Four」です.標準テーマの毎年発表されています.このサイトで最初に使いだしたのは「Twenty Seventy」でした,その後,「Twnety Twenty」,「Twenty Twenty-Tree」,「Twenty Twenty-Four」と切り替えてきました.Twenty Twentyでは,「content.php」が存在していたので,投稿のカスタマイズに修正を加えて行っていました.

    最新の「Twenty Twenty-Four」では「content.php」が存在しません.別記事に書きましたが,どうやって投稿のカスタマイズをしたらいいのかしばらく悩みました.結論は,「functions.php」にadd_actionやadd_filterを使用することに至りました.

    今回は,投稿やページのカスタマイズにfunctions.phpなどに直接コードを書くことなく可能にするために,標準機能でできることを第一の優先事項として情報を収集することにしました.

    今後,随時情報を追加していきます.

    Twenty Twenty-Four─新たなシンプル&多目的デフォルトWordPressテーマ| Kinsta®(新しいタブで開く)

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

    編集履歴

    2024/01/07, Mr.HARIKIRI

  • [WP] Contact Form 7とreCAPTCHAの設定で「お問合せ」フォームを構築 [2024/01/05]

    [WP] Contact Form 7とreCAPTCHAの設定で「お問合せ」フォームを構築 [2024/01/05]

    「お問合せ」の

    ページを再開するにことにしました.以前使っていたContact Form 7を再度インストールして,スパムが来ないようにGoogleのreCaptchaを設定しました.

    Contrac Form 7の

    blogの立ち上げ当初は,色々なプラグインをインストールして遊んでいましたが,サイトの反応が遅くなっていたことに気づいてからは,少しずつプラグインを減らしてきました.その結果,だいぶシンプルな構成になっています.

    今回,「問い合わせ」対応のために「Contact Form 7」を再度インストールして新春を迎えたいと思います.インストールは簡単です.設定も簡単ですが,問い合わせの内容を受けるEメールアドレスは,”<>”の中に記載する必要があります.あとの設定は,そのままでOKです.

    reCAPTCHAの

    設定は,以下のサイトを参照しました.事前に必要なことは,Googleのアカウントです.

    1. reCAPTCHA 管理コンソールに移動
    2. reCAPTCHA (v3)を選択
    3. サイトのドメインを追加
    4. キーを受け取る
      • site key
      • secret key
    5. Contact Form 7のインテグリティ設定
      • site key入力
      • secret key入力

    インテグレーションの設定が完了すると下図のように「reCAPTCHAはこのサイトで有効化されています」がチェックされます.

    reCAPTCHA (v3) – Form 7 –

    https://contactform7.com/ja/recaptcha/

    編集履歴

    2024/01/05, Mr.HARIKIRI

  • [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, アクションフックの例の文言整備