通知エリアのメッセージを投稿ごとに変更する方法

Cocoonカスタマイズ集
この記事は約3分で読めます。
記事内に広告が含まれています。

実装手順

以下の手順で実装します。

  • ラベル
    Cocoon設定

    表1に示す項目を設定します。

    Cocoon設定
    設定大項目項目設定値
    通知通知設定通知エリアを表示するオン
    通知メッセージ
    通知URL
  • ラベル
    Gutenbergエディターでの設定
    Gutenbergエディター

    図1に示すメモに、以下のように入力します。
    メモに入力がある場合、メモの内容が優先されて通知エリアに表示されます。

    通知メッセージ, 通知URL
  • ラベル
    PHPを追加

    以下のコードをfunctions.phpに追加します。

    /**
     * 投稿のカスタムフィールドから通知データを取得
     *
     * @param int $post_id 投稿ID
     * @return array|null 通知データの配列
     */
    if (!function_exists('get_notice_data')):
    function get_notice_data($post_id) {
      $memo = strip_tags(get_post_meta($post_id, 'the_page_memo', true));
    
      if (empty($memo)) {
        return null;
      }
    
      return explode(',', $memo);
    }
    endif;
    
    
    // Cocoon設定(通知)の通知メッセージを変更
    add_filter('get_notice_area_message', function ($msg) {
      if (is_single()) {
        $data = get_notice_data(get_the_ID());
    
        // メッセージが存在する場合
        if (isset($data[0])) {
          $msg = stripslashes_deep($data[0]);
        }
      }
    
      return $msg;
    });
    
    
    // Cocoon設定(通知)の通知URLを変更
    add_filter('get_notice_area_url', function ($url) {
      if (is_single()) {
        $data = get_notice_data(get_the_ID());
    
        // URLが存在する場合
        if (isset($data[1])) {
          $target_url = trim($data[1]);
    
          // 正当なURL形式かチェックし、不正なら空文字を返す
          $url = filter_var($target_url, FILTER_VALIDATE_URL) ? $target_url : '';
        }
      }
    
      return $url;
    });

さいごに

今回紹介した方法を使えば、投稿ごとに通知メッセージと通知URLを簡単に変更できます。
ここでは、Cocoonに備わっているメモ(カスタムフィールド名the_page_memo)を利用しています。
これにより、柔軟に通知内容をカスタマイズできるようになります。

タイトルとURLをコピーしました