MWWP Formのフォームの内容を投稿化して自動で公開する仕様

MWWP Formのフォームの内容を投稿化して自動で公開する仕様

先日、某案件で写真投稿SNSのように、ユーザーが画像とコメントをフォームから投稿して、それを一覧ページに表示する仕様を実装しました。

やりたいことのイメージ

お問い合わせフォーム と カスタム投稿 の仕様

  1. カスタム投稿「news」を作成する
  2. newsに画像登録用のカスタムフィールド「acf_news_thumb」を作成する
  3. お問い合わせフォームは3つのフィールドを作成する
  • news_form_post_title: 投稿タイトル用フィールド(テキストフィールド)
  • news_form_post_content: 投稿コメント用フィールド(テキストエリアフィールド)
  • news_form_thumb: 画像用フィールド(画像フィールド)

functions.php

テーマ内のfunctions.phpに下記の関数を作成し、フィルターフックでMWWP Formのフォームデータ保存時に関数を発動させます。

  
    <?php
    function save_media_field_datas($mail_post_id){
    
        $new_post = [
            'post_type' => 'news', // カスタム投稿「お知らせ」を指定
            'post_status' => 'publish', // 公開ステータス は「公開」にする
            'post_title' => get_post_meta($mail_post_id, 'news_form_post_title', true), // フォームの入力内容 → 投稿タイトル に登録
            'post_content' => get_post_meta($mail_post_id, 'news_form_post_content', true) , // フォームの入力内容 → 投稿コンテンツ に登録
        ];
        $news_post_id = wp_insert_post( $new_post, true ); // 新規投稿を作成
    
        // お問い合わせデータのpost_metaをコピー
        $meta_keys = [
            'news_form_thumb' => 'acf_news_thumb', // フォームの入力内容 → 投稿に登録
        ];
    
        foreach ( $meta_keys as $form_key => $news_key ) {
            $value = get_post_meta($mail_post_id, $form_key, true);
            if($value) {
                update_field($news_key, $value, $news_post_id);// ACFを使っているので、一応update_fieldで保存しておく
            }
        }
    
    }
    add_filter( 'mwform_contact_data_save-mwf_xxxx', 'save_media_field_datas', 10, 2 ); // xxxx はMWWP FormのID
  

wp_insert_post() は テーマ側から投稿を作成できる関数です。
update_filed() はACFの関数で、既存の投稿のフィールドの値を変更できます。

そして、MWWP Formのフィルターフック関数では、フォームの送信内容が変数化されていて使えるので、これらを使って、フォームの送信内容を新規投稿に登録して公開させます。

SNSシェア

WP TECH WordPress技術専門 Tips

コーポレートサイトへ

WP TECH WordPress技術専門 Tips

採用サイトへ