-
-
Generate Content Dummy
+
+
-
-
Cleanup / Rollback
-
Total data dummy aktif:
-
+
+
'Created by',
+ 'plugin_doc' => 'Plugin Documentation',
+ 'msg_generated' => 'dummy posts generated successfully!',
+ 'msg_purged' => 'dummy items deleted successfully!',
+ 'form_title' => 'Generate Dummy Content',
+ 'lbl_count' => 'Post/Page Count',
+ 'lbl_type' => 'Content Type',
+ 'opt_post' => 'Post',
+ 'opt_page' => 'Page',
+ 'lbl_content_lang' => 'Content Language',
+ 'lbl_status' => 'Post Status',
+ 'opt_publish' => 'Publish',
+ 'opt_draft' => 'Draft',
+ 'opt_pending' => 'Pending Review',
+ 'opt_private' => 'Private',
+ 'lbl_cats' => 'Categories',
+ 'desc_cats' => 'Categories created automatically if not present. Comma-separated. Ignored for Pages.',
+ 'lbl_tags' => 'Additional Tags',
+ 'desc_tags' => 'Optional, comma-separated.',
+ 'lbl_author' => 'Author',
+ 'opt_random_author' => 'Random from all users',
+ 'lbl_date' => 'Post Date',
+ 'opt_date_now' => 'Current time',
+ 'opt_date_past' => 'Random in past few days',
+ 'opt_date_future' => 'Future date (Scheduled)',
+ 'desc_date' => 'If future date, post status will automatically set to "Scheduled".',
+ 'lbl_length' => 'Article Length',
+ 'opt_len_short' => 'Short (2-3 paragraphs)',
+ 'opt_len_medium' => 'Medium (4-6 paragraphs + heading)',
+ 'opt_len_long' => 'Long (7-10 paragraphs + heading, quote)',
+ 'lbl_image' => 'Featured Image',
+ 'opt_use_img' => 'Include random image from Picsum Photos',
+ 'opt_img_small' => 'Small (800x600)',
+ 'opt_img_med' => 'Medium (1200x800)',
+ 'opt_img_large' => 'Large (1600x1000)',
+ 'lbl_extra' => 'Additional Options',
+ 'opt_comments' => 'Include dummy comments',
+ 'opt_sticky' => 'Make first post sticky (Post type only)',
+ 'btn_generate' => 'Generate Dummy Data',
+ 'purge_title' => 'Cleanup / Rollback',
+ 'purge_active' => 'Active dummy items',
+ 'purge_desc' => 'Permanently deletes all posts, pages, and media attachments created by DummyLab.',
+ 'btn_purge' => 'Delete All Dummy Data',
+ 'guide_title' => 'Quick Usage Guide',
+ 'guide_step1' => 'Select total count and content type (Post/Page).',
+ 'guide_step2' => 'Choose generated text language and length.',
+ 'guide_step3' => 'Check image box to auto-fetch thumbnails from Picsum.',
+ 'guide_step4' => 'Click Purge anytime to completely clean test data.',
+ 'safety_title' => 'Safe Development',
+ 'safety_item1' => 'All dummy posts are tracked via unique metadata key.',
+ 'safety_item2' => 'Clean purge removes featured images from Media Library.',
+ 'safety_item3' => 'Safe for staging and local theme testing.',
+ ];
+ }
+
+ return [
+ 'created_by' => 'Dibuat oleh',
+ 'plugin_doc' => 'Dokumentasi Plugin',
+ 'msg_generated' => 'konten dummy berhasil dibuat!',
+ 'msg_purged' => 'data dummy berhasil dibersihkan!',
+ 'form_title' => 'Generate Content Dummy',
+ 'lbl_count' => 'Jumlah Post/Halaman',
+ 'lbl_type' => 'Tipe Konten',
+ 'opt_post' => 'Post',
+ 'opt_page' => 'Halaman (Page)',
+ 'lbl_content_lang' => 'Bahasa Konten',
+ 'lbl_status' => 'Status Post',
+ 'opt_publish' => 'Publish (terbit)',
+ 'opt_draft' => 'Draft',
+ 'opt_pending' => 'Pending Review',
+ 'opt_private' => 'Private',
+ 'lbl_cats' => 'Kategori',
+ 'desc_cats' => 'Kategori dibuat otomatis jika belum ada. Pisahkan dengan koma. Tidak berlaku untuk Halaman.',
+ 'lbl_tags' => 'Tag Tambahan',
+ 'desc_tags' => 'Opsional, pisahkan dengan koma.',
+ 'lbl_author' => 'Penulis',
+ 'opt_random_author' => 'Acak dari semua pengguna',
+ 'lbl_date' => 'Tanggal Post',
+ 'opt_date_now' => 'Waktu sekarang',
+ 'opt_date_past' => 'Acak dalam beberapa hari terakhir',
+ 'opt_date_future' => 'Rentang tanggal tertentu (Future/Scheduled)',
+ 'desc_date' => 'Jika tanggal di masa depan, status otomatis "Scheduled".',
+ 'lbl_length' => 'Panjang Artikel',
+ 'opt_len_short' => 'Pendek (2-3 paragraf)',
+ 'opt_len_medium' => 'Sedang (4-6 paragraf + heading)',
+ 'opt_len_long' => 'Panjang (7-10 paragraf + heading, quote)',
+ 'lbl_image' => 'Gambar Unggulan',
+ 'opt_use_img' => 'Sertakan gambar acak dari Picsum Photos',
+ 'opt_img_small' => 'Kecil (800x600)',
+ 'opt_img_med' => 'Sedang (1200x800)',
+ 'opt_img_large' => 'Besar (1600x1000)',
+ 'lbl_extra' => 'Opsi Tambahan',
+ 'opt_comments' => 'Sertakan komentar dummy',
+ 'opt_sticky' => 'Jadikan post pertama sebagai sticky post (khusus Post)',
+ 'btn_generate' => 'Generate Data Dummy',
+ 'purge_title' => 'Cleanup / Rollback',
+ 'purge_active' => 'Total data dummy aktif',
+ 'purge_desc' => 'Tindakan ini akan menghapus permanen seluruh post, page, dan gambar yang dibuat oleh DummyLab.',
+ 'btn_purge' => 'Hapus Semua Data Dummy',
+ 'guide_title' => 'Panduan Penggunaan',
+ 'guide_step1' => 'Pilih jumlah data dan tipe konten (Post atau Halaman).',
+ 'guide_step2' => 'Atur bahasa dan panjang artikel yang akan dihasilkan.',
+ 'guide_step3' => 'Centang opsi gambar untuk mengunduh thumbnail dari Picsum.',
+ 'guide_step4' => 'Gunakan tombol Purge untuk menghapus semua data pengujian.',
+ 'safety_title' => 'Pengembangan Aman',
+ 'safety_item1' => 'Setiap postingan dummy dilindungi metadata internal unik.',
+ 'safety_item2' => 'Fitur Purge juga membersihkan berkas gambar dari Media Library.',
+ 'safety_item3' => 'Aman digunakan pada lingkungan staging maupun lokal.',
+ ];
+ }
+
public function handle_generate() {
if (!current_user_can('manage_options') || !check_admin_referer('dummylab_generate_action', 'dummylab_nonce')) {
wp_die('Akses ditolak.');
@@ -213,6 +368,7 @@ class DummyLab {
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
+ $ui_lang = isset($_POST['ui_lang']) ? sanitize_text_field($_POST['ui_lang']) : 'id';
$count = isset($_POST['post_count']) ? min(50, max(1, intval($_POST['post_count']))) : 5;
$post_type = isset($_POST['post_type']) && in_array($_POST['post_type'], ['post', 'page']) ? $_POST['post_type'] : 'post';
$lang = isset($_POST['content_lang']) ? sanitize_text_field($_POST['content_lang']) : 'id';
@@ -227,7 +383,6 @@ class DummyLab {
$add_comments = isset($_POST['add_comments']) ? true : false;
$make_sticky = isset($_POST['make_sticky']) ? true : false;
- // Process categories
$cat_ids = [];
if ($post_type === 'post' && !empty($categories_raw)) {
$cat_names = array_map('trim', explode(',', $categories_raw));
@@ -243,17 +398,12 @@ class DummyLab {
}
}
- // Process tags
$tag_names = !empty($tags_raw) ? array_map('trim', explode(',', $tags_raw)) : [];
-
- // Users pool
$user_ids = get_users(['fields' => 'ID']);
for ($i = 0; $i < $count; $i++) {
- // Determine Author
$author_id = ($author_opt === 'random') ? $user_ids[array_rand($user_ids)] : intval($author_opt);
- // Determine Date
$post_date = current_time('mysql');
$final_status = $status;
if ($date_opt === 'random_past') {
@@ -265,7 +415,6 @@ class DummyLab {
$final_status = 'future';
}
- // Build Content & Title
$title = $this->get_sample_title($lang, $i);
$content = $this->get_sample_content($lang, $content_length);
@@ -291,7 +440,6 @@ class DummyLab {
if ($post_id && !is_wp_error($post_id)) {
update_post_meta($post_id, $this->meta_key, '1');
- // Featured Image via Picsum
if ($use_image) {
$image_url = 'https://picsum.photos/' . $image_size . '?random=' . rand(1, 9999);
$tmp = download_url($image_url);
@@ -309,12 +457,10 @@ class DummyLab {
}
}
- // Sticky option
if ($i === 0 && $make_sticky && $post_type === 'post') {
stick_post($post_id);
}
- // Add comments
if ($add_comments) {
$comment_count = rand(1, 3);
for ($c = 0; $c < $comment_count; $c++) {
@@ -330,7 +476,7 @@ class DummyLab {
}
}
- wp_redirect(admin_url('tools.php?page=dummylab&status=generated&count=' . $count));
+ wp_redirect(admin_url('tools.php?page=dummylab&ui_lang=' . $ui_lang . '&status=generated&count=' . $count));
exit;
}
@@ -339,6 +485,8 @@ class DummyLab {
wp_die('Akses ditolak.');
}
+ $ui_lang = isset($_POST['ui_lang']) ? sanitize_text_field($_POST['ui_lang']) : 'id';
+
$query = new WP_Query([
'post_type' => ['post', 'page', 'attachment'],
'posts_per_page' => -1,
@@ -357,7 +505,7 @@ class DummyLab {
}
}
- wp_redirect(admin_url('tools.php?page=dummylab&status=purged&count=' . $purged_count));
+ wp_redirect(admin_url('tools.php?page=dummylab&ui_lang=' . $ui_lang . '&status=purged&count=' . $purged_count));
exit;
}