---
# System prepended metadata

title: "\U0001F50D如何使用前端表單在後台建立文章？\U0001F44A"
tags: [ajax, wordpress, 前台建立文章]

---

###### tags: `wordpress` `ajax` `前台建立文章`
# 🔍如何使用前端表單在後台建立文章？👊
---
## 1. 前端表單基本程式碼樣貌與執行方式：
# index.php
```php=
<form id="postPost" method="post" action="" enctype="multipart/form-data">
	<input type="text" name="title">
	<textarea name="content"></textarea>
	<input id="files" type="file" name="thumbnail" accept="image/png, image/gif, image/jpeg">
	<input id="pdf" type="file" name="thumbnail" accept=".pdf">
	<input type="submit" name="submit">
</form>
```
💬說明：基本表單結構 
# JavaScript.js
```javascript=
jQuery(function ($) {
// get post 測試
    
// 監聽
  let postName = document.querySelector("[name='title']");
  let postContent = document.querySelector("[name='content']");
  let postThumbnail = document.querySelector("[name='thumbnail']");
    
  let nameValue = "";
  let contentValue = "";

  postName.addEventListener("change", (e) => {
    nameValue = postName.value;
  });
  postContent.addEventListener("change", (e) => {
    contentValue = postContent.value;
  });

    // 點擊 submit 時，建立formData並將需要 ajax 的資料附加上去
  $("#postPost").submit(function (event) {
    //console.log(postName);
    event.preventDefault();
    var formData = new FormData();
      
      // set_posts 為後端 funtions.php 執行的 function 名稱
    formData.append("action", "set_posts");
    formData.append("name", nameValue);
    formData.append("content", contentValue);
    formData.append("file", document.getElementById("files").files[0]);
    formData.append("pdf", document.getElementById("pdf").files[0]);
    //console.log(formData);
      
      // 將資料藉由 ajax 送去後端
    $.ajax({
      type: "POST",
      url: DHHU_vars.ajaxurl,
      // url:"https://www.goh.org.tw/gohadmin/admin-ajax.php",
      data: formData,
      // dataType: "json",
      processData: false,
      contentType: false,
      success: function (res) {
        //console.log(res);
        if (res.error) {
          console.log("錯誤");
        } else {
          console.log("正確");
        }
      },
    });
  });
    
  // jQuery結尾
});
```
💬說明：使用 ajax 將表格資料傳送至後端處理 
# funtions.php
```php=
<?php
// ajax
add_action('wp_ajax_set_posts', 'set_posts');
add_action('wp_ajax_nopriv_set_posts', 'set_posts');


// 執行
function set_posts()
{
	global $wpdb;
	require_once ABSPATH . 'wp-admin/includes/image.php';
	require_once ABSPATH . 'wp-admin/includes/file.php';
	require_once ABSPATH . 'wp-admin/includes/media.php';

	// 前端獲取資料
	$post_name = $_POST['name'];
	$post_content = $_POST['content'];

	// error_log(print_r($post_name, 1));
	// error_log(print_r($post_content, 1));

	// 寫入文章
	$new_post = array(
		'post_title' => $post_name,
		'post_type' => 'post',
		'post_staus' => 'draft',
		'post_content' => $post_content,
		'post_excerpt' => '',
		'post_category' => array(21),//加入分類=>arry(分類ID)
		'tax_input'    => array(
			"post_tag" => 'tag test',//加入標籤=>tag 名稱
		),
	);


	// 建立與抓取文章 ID
	$postID = wp_insert_post($new_post);


    // 圖片添加程式碼
	if (!empty($_FILES['file'])) {
		// wp_die('No files selected.');
		$upload = wp_handle_upload(
			$_FILES['file'],
			array('test_form' => false)
		);

		// 上傳的圖片添加到 WordPress 媒體庫
		$attachment_id = wp_insert_attachment(
			array(
				'guid'           => $upload['url'],
				'post_mime_type' => $upload['type'],
				'post_title'     => basename($upload['file']),
				'post_content'   => '',
				'post_status'    => 'inherit',
			),
			$upload['file']
		);

		if (is_wp_error($attachment_id) || !$attachment_id) {
			wp_die('Upload error.');
		}

		// 更新元數據，重新生成圖像大小
		wp_update_attachment_metadata(
			$attachment_id,
			wp_generate_attachment_metadata($attachment_id, $upload['file'])
		);

		// 重新定向上傳文件
		wp_safe_redirect($upload['url']);

		// 設定特色圖片
		// set_post_thumbnail(文章 ID, 媒體 ID);
		set_post_thumbnail($postID, $attachment_id);
		// exit;
	}

    // PDF 添加程式碼
	if (!empty($_FILES['pdf'])) {
		$upload_pdf = wp_handle_upload(
			$_FILES['pdf'],
			array('test_form' => false)
		);

		// 上傳的 PDF 添加到 WordPress 媒體庫
		$attachment_id_pdf = wp_insert_attachment(
			array(
				'guid'           => $upload_pdf['url'],
				'post_mime_type' => $upload_pdf['type'],
				'post_title'     => basename($upload_pdf['file']),
				'post_content'   => '',
				'post_status'    => 'inherit',
			),
			$upload_pdf['file']
		);

		if (is_wp_error($attachment_id_pdf) || !$attachment_id_pdf) {
			wp_die('Upload error.');
		}

		wp_update_attachment_metadata(
			$attachment_id_pdf,
			wp_generate_attachment_metadata($attachment_id_pdf, $upload_pdf['file'])
		);

        // 上傳 ACF 欄位資料
	// 後台需開設好 ACF 檔案欄位
	// update_field(欄位名稱, 上傳資料, 文章 ID);
		update_field('pdf', $attachment_id_pdf, $postID);

		wp_safe_redirect($upload_pdf['url']);
	}


	update_field('test_1', $post_content, $postID);


	// 建立 ajax 回傳檔案內容
	$array_result = array(
		'data' => 'your data',
		'message' => 'your message'
	);

	wp_send_json($array_result);
	wp_die();
};
```
💬說明：functions.php 將收到資料後在後台建立文章與特色圖片，並將 PDF 檔案附加上已開設好的 ACF 檔案欄位。