Membuat Postingan dan Halaman Wordpress menggunakan PHP - 101
- 1. Sedang Dibaca: Membuat Postingan dan Halaman WordPress Menggunakan PHP – Tutorial 101
2. Kelola Postingan WordPress dengan PHP – Buat dan Perbarui
Pasti Anda pernah melihat Tema dan Plugin WordPress yang mengklaim secara otomatis menginstal 'data tiruan' untuk Anda saat Anda menginstalnya, sehingga Anda segera memiliki situs web yang berfungsi penuh. Saya akan menunjukkan kepada Anda metode untuk mencapai hal ini hanya dengan menggunakan fungsi PHP.
Ini dapat berguna jika:
- Tema atau plugin Anda memerlukan postingan atau halaman tertentu.
- Anda ingin memberikan instalasi tiruan premium seperti dijelaskan di atas.
- Anda ingin mengotomatiskan pembuatan postingan.
- Anda hanya ingin belajar.
Dalam tutorial ini kita akan membuat fungsi pemula sederhana untuk mencapai solusi kerja 'cepat dan kotor'. Nanti di tutorial lain, kita akan mempelajari cara memperluas apa yang belum kita pelajari di sini untuk membuat sistem pengeposan yang kuat dan mudah digunakan.
Bagi Anda yang lebih suka bermain-main dengan kode yang sudah ada daripada membaca seluruh caranya, berikut adalah fungsi terakhir kami beserta contoh penggunaan dan catatannya.
if ( ! function_exists( 'PostCreator' ) ) {
function PostCreator(
$name = 'AUTO POST',
$type = 'post',
$content = 'DUMMY CONTENT',
$category = array(1,2),
$template = NULL,
$author_id = '1',
$status = 'publish'
) {
define( POST_NAME, $name );
define( POST_TYPE, $type );
define( POST_CONTENT, $content );
define( POST_CATEGORY, $category );
define( POST_TEMPLATE, '' );
define( POST_AUTH_ID, $author_id );
define( POST_STATUS, $status );
if ( $type == 'page' ) {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_page( $post_id );
define( POST_TEMPLATE, $template );
} else {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_post( $post_id );
}
function hbt_create_post() {
$post_data = array(
'post_title' => wp_strip_all_tags( POST_NAME ),
'post_content' => POST_CONTENT,
'post_status' => POST_STATUS,
'post_type' => POST_TYPE,
'post_author' => POST_AUTH_ID,
'post_category' => POST_CATEGORY,
'page_template' => POST_TEMPLATE
);
wp_insert_post( $post_data, $error_obj );
}
if ( ! isset( $post ) ) {
add_action( 'admin_init', 'hbt_create_post' );
return $error_obj;
}
}
}
/* All available options for PostCreator()
PostCreator( 'TITLE' , 'POST TYPE' , 'POST CONTENT' , 'POST CATEGORY' , 'TEMPLATE FILE NAME' , 'AUTHOR ID NUMBER' , 'POST STATUS');
TITLE - HTML Stripped Out. Simple String.
POST TYPE - Post type slug. Eg 'post' or 'page'. Custom Post Types are supported.
POST CONTENT - Content of the Post/Page. HTML allowed.
POST CATEGORY - An array of the integer ID's of the category/categories you want to link to your post
TEMPLATE FILE NAME - File name of the template. Only for Pages. In the format 'file_name.php'.
AUTHOR ID NUMBER - Integer value. Default is 1.
POST STATUS - Available options; [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ]
If successful, PostCreator() returns nothing.
If there is an error PostCreator() returns a WP_error object.
*/
PostCreator( 'My Lorem Ipsum', 'page', 'With a sizable serving of Dolor. This was created using Harri Bell-Thomas\'s PostCreator function.' );Panduan Langkah demi Langkah
Kita akan membuat fungsi PHP bernama PostCreator(), dan kita memerlukannya untuk mengambil parameter tertentu. Setiap parameter telah diberikan default, jadi secara teknis saat memanggil fungsi Anda tidak perlu menentukan satupun dari mereka, tapi hei, apa asyiknya itu?
function PostCreator(
$name = 'AUTO POST',
$type = 'post',
$content = 'DUMMY CONTENT',
$category = array(1,2),
$template = NULL,
$author_id = '1',
$status = 'publish'
) {
// function output here
}Selanjutnya saya akan mendefinisikan beberapa konstanta yang diperlukan untuk fungsi tersemat berikut. (Ini dapat ditulis ulang untuk tidak menggunakan konstanta, namun saya telah menggunakannya karena menurut saya konstanta tersebut berguna saat memperluas fungsi dasar PostCreator(), namun itu adalah cerita untuk tutorial lainnya.
define( POST_NAME, $name );
define( POST_TYPE, $type );
define( POST_CONTENT, $content );
define( POST_CATEGORY, $category );
define( POST_TEMPLATE, '' );
define( POST_AUTH_ID, $author_id );
define( POST_STATUS, $status );Oke, sejauh ini bagus. Sekarang, saya telah menyertakan beberapa validasi untuk mencegah duplikat posting/halaman (yang merupakan mimpi buruk, percayalah!). Validasi ini memeriksa apakah postingan/halaman dengan nama yang sama sudah ada. Jika ya, maka ia tidak menciptakan yang baru, tetapi jika tidak, maka ia menciptakannya untuk Anda.
Alasan mengapa saya memilih untuk memeriksa judul postingan adalah karena hanya itu yang diperlukan oleh WordPress untuk menghasilkan halaman (sisanya dibuat secara otomatis). Cara lain untuk melakukan validasi ini termasuk memeriksa 'siput' atau ID kiriman. Semua ini akan kita bahas di tutorial selanjutnya.
Ini sangat berguna jika postingan/halaman diperlukan oleh plugin atau tema Anda. Saya pertama kali mengembangkan ini untuk salah satu plugin saya karena memerlukan halaman dengan templat halaman tertentu. Dengan fungsi ini, saya hanya menyimpan PostCreator() di WordPress ‘admin_init’, artinya jika seseorang mencoba menghapusnya (beraninya mereka!) maka plugin tersebut akan segera dibuat ulang untuk mencegah masalah dengan plugin lainnya.
Ingatlah bahwa tidak seorang pun ingin blognya dibajak, jadi pastikan Anda memberi tahu mereka dengan jelas apa yang terjadi, dan mungkin berikan opsi bagi mereka untuk mematikannya.
Sekarang kembali ke validasi. Ini potongan kode selanjutnya.
if ( $type == 'page' ) {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_page( $post_id );
define( POST_TEMPLATE, $template );
} else {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_post( $post_id );
}Jadi apa yang terjadi di sini?
Ya, ini pada dasarnya adalah proses yang sama yang diulang dua kali. Saya melakukan ini karena cara postingan dan halaman diperlakukan sedikit berbeda. Selain itu, konstanta POST_TEMPLATE hanya ditentukan jika Anda mencoba membuat halaman, karena hanya halaman yang dapat menerima parameter tersebut (misalnya, parameter tersebut akan diabaikan jika Anda mencoba membuat postingan standar).
Pada baris pertama klausa IF (nama teknisnya adalah 'apodosis' jika Anda belum mengetahuinya) variabel $post didefinisikan. Jika ada postingan/halaman dengan nama yang sama dengan yang ingin dibuat, maka $post diisi dengan data entri yang ada (sebagai objek, bukan array, tetapi ini dapat diubah jika benar-benar diperlukan). Variabel ini digunakan untuk menguji apakah judul Anda unik. Dua baris berikutnya saya sertakan karena, sekali lagi, sangat berguna jika Anda ingin memperluas fungsi ini. Contohnya adalah memperbarui postingan yang sudah ada jika sudah ada.
Berikutnya adalah fungsi bertumpuk yang akan ditambahkan ke hook ‘admin_head’. Ini dia;
function hbt_create_post() {
$post_data = array(
'post_title' => wp_strip_all_tags( POST_NAME ),
'post_content' => POST_CONTENT,
'post_status' => POST_STATUS,
'post_type' => POST_TYPE,
'post_author' => POST_AUTH_ID,
'post_category' => POST_CATEGORY,
'page_template' => POST_TEMPLATE
);
wp_insert_post( $post_data, $error_obj );
}Sederhananya, ini menggunakan fungsi bawaan WordPress (wp_insert_post) untuk menghasilkan postingan/halaman kita. Kami mengisi $post_data dengan array parameter kami (Anda dapat melihat konstanta kami digunakan di sini). Ini dibuat dan jika ada kesalahan, itu menghasilkan nilai boolean $error_obj. BENAR=Suatu masalah. SALAH=Semuanya baik-baik saja. Hal terakhir yang harus dilakukan adalah menjalankan fungsi sebelumnya di kepala admin, tetapi hanya jika lolos validasi, dan mengembalikan objek kesalahan.
if ( ! isset( $post ) ) {
add_action( 'admin_init', 'hbt_create_post' );
return $error_obj;
}Besar! Sekarang kita telah membuat fungsi luar biasa kita, ayo gunakan!
Penggunaan
Cukup sertakan fungsi PostCreator() dan jalankan.
Ini akan berjalan menggunakan nilai default, tetapi bagaimana jika kita ingin penyesuaian? Kemudian kami menggunakan parameter kami.
PostCreator(
'TITLE',
'POST TYPE',
'POST CONTENT',
'POST CATEGORY',
'TEMPLATE FILE NAME',
'AUTHOR ID NUMBER',
'POST STATUS'
);Dengan semua opsi ini, berhati-hatilah dalam menggunakan apostrof. Pastikan bahwa jika Anda ingin menggunakan apostrof (kecuali yang mengelilingi parameter itu sendiri), Anda mengawalinya dengan garis miring ke belakang. Misalnya;
PostCreator( 'Alex\'s Post' );Parameter TITLE menerima nilai string. Ini dilucuti dari tag HTML.
Parameter POST TYPE menerima slug dari tipe postingan, misalnya; 'posting' atau 'halaman'. Jenis Posting Kustom didukung.
PostCreator( 'Alex\'s Post', 'page' );POST CONTENT' menerima nilai string. Ini akan menjadi konten postingan/halaman yang dibuat. HTML diperbolehkan di sini.
PostCreator( 'Alex\'s Post', 'page', 'The force is strong with this one…' );POST CATEGORY menerima array bilangan bulat. Bilangan bulat sesuai dengan ID kategori/kategori yang dikaitkan dengan postingan/halaman.
PostCreator( 'Alex\'s Post', 'page' , 'The force is strong with this one…' , array( 1, 2 ) );NAMA FILE TEMPLATE adalah nilai string yang menentukan templat halaman yang diinginkan untuk halaman baru Anda. Ini hanya berfungsi untuk halaman. Formatnya adalah; 'nama_file.php'.
PostCreator(
'Alex\'s Post',
page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php'
);NOMOR ID PENULIS adalah nilai bilangan bulat dari ID penulis.
PostCreator(
'Alex\'s Post',
'page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php',
'1'
);STATUS POST memungkinkan Anda menentukan status postingan/halaman yang dibuat. Secara default, ini 'diterbitkan'.
Pilihan yang tersedia; [ 'draf' | 'terbitkan' | 'menunggu keputusan'| 'masa depan' | 'pribadi' | status terdaftar khusus]
PostCreator(
'Alex\'s Post',
'page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php',
'1',
'publish'
);Membungkus
WordPress adalah alat yang sangat kuat, namun terkadang sulit diatur. Saya harap cuplikan sederhana ini bermanfaat bagi Anda, mungkin mempelajari satu atau dua hal selama prosesnya. Nantikan artikel berikutnya di mana saya akan mengubah apa yang telah kita lakukan di artikel ini menjadi kelas PHP, menambahkan lebih banyak fungsionalitas dan stabilitas. Untuk pratinjau sekilas, lihat kode di Github: PostController
Jika ada pertanyaan, tanyakan saja pada kolom komentar di bawah.
