ページ内目次

acf_form()を使って、フロントエンドからカスタム投稿タイプに新規登録する方法

フロントエンドから新規投稿できるようにするには、これまでもACF(Advanced Custom Fields)プラグインから提供されているacf_form()関数を使用してきましたし、あちこちに日本語、英語の解説がありますが、同じことをカスタム投稿タイプに対して行う場合だと、なかなか日本語で解説しているページがなかったので(あっても具体的な方法は省略されてしまっていて)メモメモ♫

まず、acf_form()の基本的な使い方は…

<?php 
acf_form_head();
get_header();
?>
<div id="content">
	<?php
	acf_form(array(
		'post_id'		=> 'new_post',
		'post_title'	=> true,
		'post_content'	=> true,
	));
	?>	
</div>
<?php get_footer(); ?>

get_header()は、WordPressのヘッダーを読み込むおまじないです。

そして、acf_form_head()は、acf_form()を使用するときのおまじないで本家には以下のように解説されています。

This function is used to process, validate and save the submitted form data created by the acf_form() function. This function will also enqueue all ACF related scripts and styles for the acf form to render correctly. This function must be placed before any HTML has been created, preferably above the get_header(); function in your theme file.

この関数は、acf_form()で作成されたフォームデータを処理、検証、保存するために使用され、acfフォームのすべてのACF関連のスクリプトとスタイルをエンキューし、正しくレンダリングします。

この関数は、テーマファイルのHTMLが作成される前に配置する必要があり、get_header()の上に配置すると良いでしょう。

acf_form()の一般的なパラメータについては、Qiita などで詳しく解説されています。

Advanced Custom Fieldでフロントエンドの投稿フォームを作る方法 – Qiita

カスタム投稿にごにょごにょの部分については、こんなふうに使用するとACF本家サイトにかかれています。

<?php 
acf_form_head();
get_header();
?>
<div id="content">
	<?php
	acf_form(array(
		'post_id'		=> 'new_post',
		'post_title'	=> true,
		'post_content'	=> true,
		'new_post'		=> array(
			'post_type'		=> 'event',
			'post_status'	=> 'publish'
		)
	));
	?>
</div>
<?php get_footer(); ?>

acf_form の new_post パラメータとして、post_type を指定すれば良いわけです。

上記は「event」カスタム投稿タイプの新規登録を行う場合の例です。

new_post 配列の中身は、wp_insert_post 関数の第1引数と同じものが指定できます。

その詳細は、以下のページに解説があります。

関数リファレンス/wp insert post – WordPress Codex 日本語版

 

 

これでバッチリです

↑上へまいりま〜す