ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

MW WP Formで登録後に自動で投稿する方法

WordPressのフォーム登録プラグイン「MW WP Form」を使って、登録後に自動で投稿する方法を紹介します。
この記事では、登録フォームの設定方法は割愛し、登録後の自動登録の部分のみ説明します。

環境

WordPress 5.2.4
MW WP Form 4.2.0
任意のテーマ

変更箇所

以下に記載のコードを使用中のテーマにある「function.php」に追加します。

フォームで使用するカスタムフィールドを定義する

管理画面の投稿登録画面に登録フォームで使用するカスタムフィールドの入力欄を追加します。
これを設定することで、投稿時に毎回プルダウンからカスタムフィールドを選択する手間が省かれます。

/**
 * 投稿画面で表示するカスタムフィールドのHTMLを定義します。
 * 第2引数で独自の引数を設定することで、textareaまたはtextを生成するようにしています。
 */
function write_html($post, $args) {
    $field_nm = $args['args'][0];
    $type = $args['args'][1];
	
    if ($type == 'textarea') {
        echo '<textarea name="' . $field_nm . '" style="width: 100%; height: 200px;">' . get_post_meta($post->ID, $field_nm, true) . '</textarea>';	
    }
    if ($type == 'text') {
        echo '<input type="text" name="' . $field_nm . '" style="width: 100%;" value="' . get_post_meta($post->ID, $field_nm, true) . '"/>';
    }

    wp_nonce_field( 'send_field1' , 'nonce_for_field_1' );
}

/**
 * 投稿画面にカスタムフィールドを表示します。
 * 最後の引数に配列で独自の引数を設定することができます。
 */
function add_custom_meta_box() {
    // 第1引数:項目ごとのdivタグにつくid名(被らないように任意の値)
    // 第2引数:登録フォームの各入力項目のname
    // 第3引数:HTMLを生成するコールバック名
    // 第4引数:適用するページの種別(postで)
    // 第5引数:メタボックスの種別(初期値:advanced)
    // 第6引数:メタボックスの優先度(初期値:default)
    // 第7引数:第3引数のコールバックで使う任意の引数(必要であればarrayで定義)
    add_meta_box('custom_field_1','氏名','write_html','post','advanced','default',array('氏名','text'));
    add_meta_box('custom_field_2','メールアドレス','write_html','post','advanced','default',array('メールアドレス','text'));
}
add_action('admin_menu', 'add_custom_meta_box');

フォーム登録後に投稿する

MW WP Formで作成した登録フォームからデータが登録されたら、投稿するようにします。
処理内容は、投稿を新規登録し、カスタムフィールドを別テーブルに登録します。

function update_meta_posts($Mail_admin, $Data) {

    // 登録フォームから入力データを取得
    $form_data = $Data->getInstance();

    // 投稿新規データを作成(タイトルと公開状態の2つの最低限)	
    $post = array(
        'post_title' => $form_data->get('募集タイトル'),
        'post_status' => 'publish'
    );
    // 上記データで投稿を新規登録
    $post_id = wp_insert_post($post, true);

    // 登録フォームのカスタムフィールドを別テーブルに登録
    update_post_meta($post_id, '氏名', $form_data->get('氏名'));
    update_post_meta($post_id, 'メールアドレス', $form_data->get('メールアドレス'));	
}
// アクションフックを追加
//   第1引数:末尾の数字は、登録フォーム作成時のショートコードを設定
//   第2引数:フック実行時の処理
//   第3・4引数:説明がないので用途は不明(固定値??)
add_action('mwform_before_send_admin_mail_mw-wp-form-8', 'update_meta_posts', 10, 2);

参考サイト

mwform_before_send_admin_mail_mw-wp-form-xxx | MW WP Form


エンジニアのためのWordPress開発入門

エンジニアのためのWordPress開発入門