style(ui): redesign dashboard with modern WP admin aesthetics, responsive grid, custom CSS, and pill switcher

This commit is contained in:
idtemankampus-creator
2026-09-17 22:51:52 +07:00
parent b32a036e52
commit 593d39ffe6
+189 -148
View File
@@ -3,7 +3,7 @@
* Plugin Name: DummyLab Dummy Post & Content Generator * Plugin Name: DummyLab Dummy Post & Content Generator
* Plugin URI: https://apps.masbudikusuma.my.id/dummylab-wp * Plugin URI: https://apps.masbudikusuma.my.id/dummylab-wp
* Description: Advanced dummy content generator for WordPress development with safety controls and bulk purge features. * Description: Advanced dummy content generator for WordPress development with safety controls and bulk purge features.
* Version: 1.0.0 * Version: 1.1.0
* Author: masbudikusuma * Author: masbudikusuma
* Author URI: https://masbudi.my.id * Author URI: https://masbudi.my.id
* Text Domain: dummylab * Text Domain: dummylab
@@ -62,167 +62,208 @@ class DummyLab {
$t = $this->get_translations($ui_lang); $t = $this->get_translations($ui_lang);
?> ?>
<div class="wrap"> <style>
<div style="display: flex; justify-content: space-between; align-items: center;"> .dummylab-wrap { max-width: 1200px; margin: 20px 20px 0 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; }
.dummylab-header { background: #fff; border: 1px solid #c3c4c7; border-radius: 8px; padding: 20px 24px; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 1px 3px rgba(0,0,0,0.04); margin-bottom: 24px; }
.dummylab-header h1 { margin: 0 0 6px 0; font-size: 22px; font-weight: 600; color: #1d2327; display: flex; align-items: center; gap: 8px; }
.dummylab-header p { margin: 0; color: #646970; font-size: 13px; }
.dummylab-lang-switch { background: #f0f0f1; padding: 4px; border-radius: 20px; display: flex; gap: 4px; border: 1px solid #dcdcde; }
.dummylab-lang-btn { text-decoration: none; padding: 5px 14px; border-radius: 16px; font-size: 12px; font-weight: 600; color: #50575e; transition: all 0.2s ease; }
.dummylab-lang-btn.active { background: #2271b1; color: #fff; box-shadow: 0 1px 2px rgba(0,0,0,0.1); }
.dummylab-container { display: flex; gap: 24px; align-items: flex-start; }
.dummylab-main-card { flex: 2; background: #fff; border: 1px solid #c3c4c7; border-radius: 8px; padding: 24px; box-shadow: 0 1px 3px rgba(0,0,0,0.04); min-width: 550px; }
.dummylab-sidebar { flex: 1; display: flex; flex-direction: column; gap: 20px; min-width: 320px; }
.dummylab-section-title { font-size: 15px; font-weight: 600; color: #1d2327; margin: 20px 0 14px 0; padding-bottom: 8px; border-bottom: 1px solid #f0f0f1; display: flex; align-items: center; gap: 8px; }
.dummylab-section-title:first-of-type { margin-top: 0; }
.dummylab-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
.dummylab-field { display: flex; flex-direction: column; gap: 6px; }
.dummylab-field.full-width { grid-column: span 2; }
.dummylab-field label { font-size: 13px; font-weight: 600; color: #2c3338; }
.dummylab-field input[type="text"],
.dummylab-field input[type="number"],
.dummylab-field select { width: 100%; border: 1px solid #8c8f94; border-radius: 6px; padding: 7px 10px; font-size: 13px; background-color: #fff; box-shadow: 0 0 0 transparent; transition: border-color 0.15s ease-in-out; }
.dummylab-field input:focus, .dummylab-field select:focus { border-color: #2271b1; box-shadow: 0 0 0 1px #2271b1; outline: none; }
.dummylab-field .description { margin: 2px 0 0 0; font-size: 12px; color: #646970; line-height: 1.4; }
.dummylab-checkbox-group { display: flex; flex-direction: column; gap: 10px; padding: 12px; background: #f6f7f7; border-radius: 6px; border: 1px solid #dcdcde; }
.dummylab-checkbox-group label { font-weight: 500; font-size: 13px; color: #1d2327; display: flex; align-items: center; gap: 8px; cursor: pointer; }
.dummylab-side-card { background: #fff; border: 1px solid #c3c4c7; border-radius: 8px; padding: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.04); }
.dummylab-side-card.purge-card { border-top: 4px solid #d63638; }
.dummylab-side-card h3 { margin: 0 0 12px 0; font-size: 15px; font-weight: 600; color: #1d2327; display: flex; align-items: center; gap: 8px; }
.dummylab-badge-count { display: inline-block; background: #fcf0f0; color: #d63638; font-weight: 700; font-size: 16px; padding: 4px 12px; border-radius: 20px; border: 1px solid #f5c6cb; margin-left: 6px; }
.dummylab-guide-list { margin: 0; padding-left: 20px; color: #3c434a; font-size: 13px; line-height: 1.6; }
.dummylab-guide-list li { margin-bottom: 8px; }
.dummylab-guide-list li:last-child { margin-bottom: 0; }
.dummylab-safety-list { margin: 0; padding-left: 18px; color: #3c434a; font-size: 13px; line-height: 1.6; list-style-type: square; }
.dummylab-safety-list li { margin-bottom: 6px; }
.dummylab-btn-primary { background: #2271b1 !important; border-color: #2271b1 !important; border-radius: 6px !important; padding: 6px 18px !important; font-size: 14px !important; height: auto !important; }
.dummylab-btn-danger { background: #d63638 !important; border-color: #d63638 !important; color: #fff !important; border-radius: 6px !important; padding: 6px 18px !important; font-size: 13px !important; height: auto !important; width: 100%; text-align: center; }
.dummylab-btn-danger:disabled { background: #f6f7f7 !important; border-color: #dcdcde !important; color: #a7aaad !important; cursor: not-allowed; }
</style>
<div class="dummylab-wrap">
<!-- Header Banner -->
<div class="dummylab-header">
<div> <div>
<h1>🧪 DummyLab Post & Page Generator</h1> <h1>🧪 DummyLab <span style="font-size: 14px; font-weight: 400; color: #646970;">v1.1.0</span></h1>
<p><?php echo $t['created_by']; ?> <a href="https://masbudi.my.id" target="_blank">masbudikusuma</a> | <a href="https://apps.masbudikusuma.my.id/dummylab-wp" target="_blank"><?php echo $t['plugin_doc']; ?></a></p> <p><?php echo $t['created_by']; ?> <a href="https://masbudi.my.id" target="_blank" style="text-decoration: none; font-weight: 600; color: #2271b1;">masbudikusuma</a> &bull; <a href="https://apps.masbudikusuma.my.id/dummylab-wp" target="_blank" style="text-decoration: none; color: #2271b1;"><?php echo $t['plugin_doc']; ?></a></p>
</div> </div>
<!-- UI Language Switcher --> <!-- UI Language Switcher -->
<div style="background: #fff; border: 1px solid #ccc; padding: 6px 12px; border-radius: 4px;"> <div class="dummylab-lang-switch">
<strong>UI Language: </strong> <a href="<?php echo esc_url(add_query_arg('ui_lang', 'id')); ?>" class="dummylab-lang-btn <?php echo $ui_lang === 'id' ? 'active' : ''; ?>">🇮🇩 ID</a>
<a href="<?php echo esc_url(add_query_arg('ui_lang', 'id')); ?>" style="font-weight: <?php echo $ui_lang === 'id' ? 'bold' : 'normal'; ?>;">🇮🇩 ID</a> | <a href="<?php echo esc_url(add_query_arg('ui_lang', 'en')); ?>" class="dummylab-lang-btn <?php echo $ui_lang === 'en' ? 'active' : ''; ?>">🇬🇧 EN</a>
<a href="<?php echo esc_url(add_query_arg('ui_lang', 'en')); ?>" style="font-weight: <?php echo $ui_lang === 'en' ? 'bold' : 'normal'; ?>;">🇬🇧 EN</a>
</div> </div>
</div> </div>
<hr />
<?php if (isset($_GET['status'])): ?> <?php if (isset($_GET['status'])): ?>
<div class="notice notice-success is-dismissible"> <div class="notice notice-success is-dismissible" style="border-radius: 6px; margin-bottom: 20px;">
<p> <p style="font-size: 14px;">
<?php <?php
if ($_GET['status'] === 'generated') { if ($_GET['status'] === 'generated') {
echo esc_html(intval($_GET['count'])) . ' ' . esc_html($t['msg_generated']); echo '🎉 <strong>' . esc_html(intval($_GET['count'])) . '</strong> ' . esc_html($t['msg_generated']);
} elseif ($_GET['status'] === 'purged') { } elseif ($_GET['status'] === 'purged') {
echo esc_html(intval($_GET['count'])) . ' ' . esc_html($t['msg_purged']); echo '🧹 <strong>' . esc_html(intval($_GET['count'])) . '</strong> ' . esc_html($t['msg_purged']);
} }
?> ?>
</p> </p>
</div> </div>
<?php endif; ?> <?php endif; ?>
<div style="display: flex; gap: 20px; align-items: flex-start; margin-top: 20px;"> <div class="dummylab-container">
<!-- Left Main Form --> <!-- Left Main Form -->
<div class="card" style="flex: 2; min-width: 500px; padding: 20px;"> <div class="dummylab-main-card">
<h2><?php echo $t['form_title']; ?></h2>
<form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>"> <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
<?php wp_nonce_field('dummylab_generate_action', 'dummylab_nonce'); ?> <?php wp_nonce_field('dummylab_generate_action', 'dummylab_nonce'); ?>
<input type="hidden" name="action" value="dummylab_generate"> <input type="hidden" name="action" value="dummylab_generate">
<input type="hidden" name="ui_lang" value="<?php echo esc_attr($ui_lang); ?>"> <input type="hidden" name="ui_lang" value="<?php echo esc_attr($ui_lang); ?>">
<table class="form-table"> <!-- Section 1: Core Settings -->
<tr> <div class="dummylab-section-title">⚙️ <?php echo $t['sec_general']; ?></div>
<th scope="row"><label for="post_count"><?php echo $t['lbl_count']; ?></label></th> <div class="dummylab-grid">
<td><input type="number" id="post_count" name="post_count" value="5" min="1" max="50" class="small-text" required></td> <div class="dummylab-field">
</tr> <label for="post_count"><?php echo $t['lbl_count']; ?></label>
<tr> <input type="number" id="post_count" name="post_count" value="5" min="1" max="50" required>
<th scope="row"><label for="post_type"><?php echo $t['lbl_type']; ?></label></th> </div>
<td> <div class="dummylab-field">
<select name="post_type" id="post_type"> <label for="post_type"><?php echo $t['lbl_type']; ?></label>
<option value="post"><?php echo $t['opt_post']; ?></option> <select name="post_type" id="post_type">
<option value="page"><?php echo $t['opt_page']; ?></option> <option value="post"><?php echo $t['opt_post']; ?></option>
</select> <option value="page"><?php echo $t['opt_page']; ?></option>
</td> </select>
</tr> </div>
<tr> <div class="dummylab-field">
<th scope="row"><label for="content_lang"><?php echo $t['lbl_content_lang']; ?></label></th> <label for="content_lang"><?php echo $t['lbl_content_lang']; ?></label>
<td> <select name="content_lang" id="content_lang">
<select name="content_lang" id="content_lang"> <option value="id">🇮🇩 Bahasa Indonesia</option>
<option value="id">Bahasa Indonesia</option> <option value="en">🇬🇧 English</option>
<option value="en">English</option> </select>
</select> </div>
</td> <div class="dummylab-field">
</tr> <label for="post_status"><?php echo $t['lbl_status']; ?></label>
<tr> <select name="post_status" id="post_status">
<th scope="row"><label for="post_status"><?php echo $t['lbl_status']; ?></label></th> <option value="publish"><?php echo $t['opt_publish']; ?></option>
<td> <option value="draft"><?php echo $t['opt_draft']; ?></option>
<select name="post_status" id="post_status"> <option value="pending"><?php echo $t['opt_pending']; ?></option>
<option value="publish"><?php echo $t['opt_publish']; ?></option> <option value="private"><?php echo $t['opt_private']; ?></option>
<option value="draft"><?php echo $t['opt_draft']; ?></option> </select>
<option value="pending"><?php echo $t['opt_pending']; ?></option> </div>
<option value="private"><?php echo $t['opt_private']; ?></option> </div>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="categories"><?php echo $t['lbl_cats']; ?></label></th>
<td>
<input type="text" name="categories" id="categories" class="regular-text" placeholder="Teknologi, Berita, Hiburan">
<p class="description"><?php echo $t['desc_cats']; ?></p>
</td>
</tr>
<tr>
<th scope="row"><label for="tags"><?php echo $t['lbl_tags']; ?></label></th>
<td>
<input type="text" name="tags" id="tags" class="regular-text" placeholder="wordpress, dummy, test">
<p class="description"><?php echo $t['desc_tags']; ?></p>
</td>
</tr>
<tr>
<th scope="row"><label for="post_author"><?php echo $t['lbl_author']; ?></label></th>
<td>
<select name="post_author" id="post_author">
<option value="random"><?php echo $t['opt_random_author']; ?></option>
<?php foreach ($users as $user): ?>
<option value="<?php echo esc_attr($user->ID); ?>"><?php echo esc_html($user->display_name); ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="date_option"><?php echo $t['lbl_date']; ?></label></th>
<td>
<select name="date_option" id="date_option">
<option value="now"><?php echo $t['opt_date_now']; ?></option>
<option value="random_past"><?php echo $t['opt_date_past']; ?></option>
<option value="future"><?php echo $t['opt_date_future']; ?></option>
</select>
<p class="description"><?php echo $t['desc_date']; ?></p>
</td>
</tr>
<tr>
<th scope="row"><label for="content_length"><?php echo $t['lbl_length']; ?></label></th>
<td>
<select name="content_length" id="content_length">
<option value="short"><?php echo $t['opt_len_short']; ?></option>
<option value="medium" selected><?php echo $t['opt_len_medium']; ?></option>
<option value="long"><?php echo $t['opt_len_long']; ?></option>
</select>
</td>
</tr>
<tr>
<th scope="row"><?php echo $t['lbl_image']; ?></th>
<td>
<label><input type="checkbox" name="use_featured_image" value="1"> <?php echo $t['opt_use_img']; ?></label><br><br>
<select name="image_size" id="image_size">
<option value="800/600"><?php echo $t['opt_img_small']; ?></option>
<option value="1200/800" selected><?php echo $t['opt_img_med']; ?></option>
<option value="1600/1000"><?php echo $t['opt_img_large']; ?></option>
</select>
</td>
</tr>
<tr>
<th scope="row"><?php echo $t['lbl_extra']; ?></th>
<td>
<label><input type="checkbox" name="add_comments" value="1"> <?php echo $t['opt_comments']; ?></label><br>
<label><input type="checkbox" name="make_sticky" value="1"> <?php echo $t['opt_sticky']; ?></label>
</td>
</tr>
</table>
<?php submit_button($t['btn_generate'], 'primary', 'submit'); ?> <!-- Section 2: Taxonomy & Author -->
<div class="dummylab-section-title">🏷️ <?php echo $t['sec_taxonomy']; ?></div>
<div class="dummylab-grid">
<div class="dummylab-field full-width">
<label for="categories"><?php echo $t['lbl_cats']; ?></label>
<input type="text" name="categories" id="categories" placeholder="Teknologi, Berita, Hiburan">
<p class="description"><?php echo $t['desc_cats']; ?></p>
</div>
<div class="dummylab-field full-width">
<label for="tags"><?php echo $t['lbl_tags']; ?></label>
<input type="text" name="tags" id="tags" placeholder="wordpress, dummy, test">
<p class="description"><?php echo $t['desc_tags']; ?></p>
</div>
<div class="dummylab-field">
<label for="post_author"><?php echo $t['lbl_author']; ?></label>
<select name="post_author" id="post_author">
<option value="random"><?php echo $t['opt_random_author']; ?></option>
<?php foreach ($users as $user): ?>
<option value="<?php echo esc_attr($user->ID); ?>"><?php echo esc_html($user->display_name); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="dummylab-field">
<label for="date_option"><?php echo $t['lbl_date']; ?></label>
<select name="date_option" id="date_option">
<option value="now"><?php echo $t['opt_date_now']; ?></option>
<option value="random_past"><?php echo $t['opt_date_past']; ?></option>
<option value="future"><?php echo $t['opt_date_future']; ?></option>
</select>
</div>
</div>
<!-- Section 3: Content Structure & Media -->
<div class="dummylab-section-title">📝 <?php echo $t['sec_content']; ?></div>
<div class="dummylab-grid">
<div class="dummylab-field">
<label for="content_length"><?php echo $t['lbl_length']; ?></label>
<select name="content_length" id="content_length">
<option value="short"><?php echo $t['opt_len_short']; ?></option>
<option value="medium" selected><?php echo $t['opt_len_medium']; ?></option>
<option value="long"><?php echo $t['opt_len_long']; ?></option>
</select>
</div>
<div class="dummylab-field">
<label for="image_size"><?php echo $t['lbl_image_size']; ?></label>
<select name="image_size" id="image_size">
<option value="800/600"><?php echo $t['opt_img_small']; ?></option>
<option value="1200/800" selected><?php echo $t['opt_img_med']; ?></option>
<option value="1600/1000"><?php echo $t['opt_img_large']; ?></option>
</select>
</div>
<div class="dummylab-field full-width">
<div class="dummylab-checkbox-group">
<label><input type="checkbox" name="use_featured_image" value="1" checked> 🖼️ <?php echo $t['opt_use_img']; ?></label>
<label><input type="checkbox" name="add_comments" value="1"> 💬 <?php echo $t['opt_comments']; ?></label>
<label><input type="checkbox" name="make_sticky" value="1"> 📌 <?php echo $t['opt_sticky']; ?></label>
</div>
</div>
</div>
<div style="margin-top: 24px;">
<?php submit_button($t['btn_generate'], 'primary dummylab-btn-primary', 'submit', false); ?>
</div>
</form> </form>
</div> </div>
<!-- Right Sidebar Column --> <!-- Right Sidebar Column -->
<div style="flex: 1; min-width: 300px; display: flex; flex-direction: column; gap: 20px;"> <div class="dummylab-sidebar">
<!-- Rollback Card --> <!-- Rollback Card -->
<div class="card" style="border-left: 4px solid #dc3232; padding: 20px; margin: 0;"> <div class="dummylab-side-card purge-card">
<h2 style="color: #dc3232; margin-top: 0;"><?php echo $t['purge_title']; ?></h2> <h3>🗑️ <?php echo $t['purge_title']; ?></h3>
<p><?php echo $t['purge_active']; ?>: <strong><?php echo esc_html($dummy_count); ?></strong></p> <p style="font-size: 13px; color: #50575e; margin: 0 0 12px 0;">
<?php echo $t['purge_active']; ?>: <span class="dummylab-badge-count"><?php echo esc_html($dummy_count); ?></span>
</p>
<form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>"> <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
<?php wp_nonce_field('dummylab_purge_action', 'dummylab_nonce'); ?> <?php wp_nonce_field('dummylab_purge_action', 'dummylab_nonce'); ?>
<input type="hidden" name="action" value="dummylab_purge"> <input type="hidden" name="action" value="dummylab_purge">
<input type="hidden" name="ui_lang" value="<?php echo esc_attr($ui_lang); ?>"> <input type="hidden" name="ui_lang" value="<?php echo esc_attr($ui_lang); ?>">
<p class="description"><?php echo $t['purge_desc']; ?></p> <p class="description" style="margin-bottom: 14px;"><?php echo $t['purge_desc']; ?></p>
<?php submit_button($t['btn_purge'], 'delete', 'submit', true, ['disabled' => ($dummy_count === 0)]); ?> <?php submit_button($t['btn_purge'], 'delete dummylab-btn-danger', 'submit', false, ['disabled' => ($dummy_count === 0)]); ?>
</form> </form>
</div> </div>
<!-- How to Use Documentation Card --> <!-- How to Use Documentation Card -->
<div class="card" style="padding: 20px; margin: 0;"> <div class="dummylab-side-card">
<h3 style="margin-top: 0;">📖 <?php echo $t['guide_title']; ?></h3> <h3>📘 <?php echo $t['guide_title']; ?></h3>
<ol style="padding-left: 18px; line-height: 1.6;"> <ol class="dummylab-guide-list">
<li><?php echo $t['guide_step1']; ?></li> <li><?php echo $t['guide_step1']; ?></li>
<li><?php echo $t['guide_step2']; ?></li> <li><?php echo $t['guide_step2']; ?></li>
<li><?php echo $t['guide_step3']; ?></li> <li><?php echo $t['guide_step3']; ?></li>
@@ -231,9 +272,9 @@ class DummyLab {
</div> </div>
<!-- Safety & Features Info Card --> <!-- Safety & Features Info Card -->
<div class="card" style="padding: 20px; margin: 0; background-color: #f8f9fa;"> <div class="dummylab-side-card" style="background-color: #f8fafc;">
<h3 style="margin-top: 0;">🛡️ <?php echo $t['safety_title']; ?></h3> <h3>🛡️ <?php echo $t['safety_title']; ?></h3>
<ul style="padding-left: 18px; line-height: 1.6; list-style-type: disc;"> <ul class="dummylab-safety-list">
<li><?php echo $t['safety_item1']; ?></li> <li><?php echo $t['safety_item1']; ?></li>
<li><?php echo $t['safety_item2']; ?></li> <li><?php echo $t['safety_item2']; ?></li>
<li><?php echo $t['safety_item3']; ?></li> <li><?php echo $t['safety_item3']; ?></li>
@@ -252,7 +293,9 @@ class DummyLab {
'plugin_doc' => 'Plugin Documentation', 'plugin_doc' => 'Plugin Documentation',
'msg_generated' => 'dummy posts generated successfully!', 'msg_generated' => 'dummy posts generated successfully!',
'msg_purged' => 'dummy items deleted successfully!', 'msg_purged' => 'dummy items deleted successfully!',
'form_title' => 'Generate Dummy Content', 'sec_general' => 'General Settings',
'sec_taxonomy' => 'Taxonomy & Author',
'sec_content' => 'Content & Media',
'lbl_count' => 'Post/Page Count', 'lbl_count' => 'Post/Page Count',
'lbl_type' => 'Content Type', 'lbl_type' => 'Content Type',
'opt_post' => 'Post', 'opt_post' => 'Post',
@@ -264,40 +307,38 @@ class DummyLab {
'opt_pending' => 'Pending Review', 'opt_pending' => 'Pending Review',
'opt_private' => 'Private', 'opt_private' => 'Private',
'lbl_cats' => 'Categories', 'lbl_cats' => 'Categories',
'desc_cats' => 'Categories created automatically if not present. Comma-separated. Ignored for Pages.', 'desc_cats' => 'Categories created automatically if not present. Comma-separated.',
'lbl_tags' => 'Additional Tags', 'lbl_tags' => 'Additional Tags',
'desc_tags' => 'Optional, comma-separated.', 'desc_tags' => 'Optional, comma-separated tags.',
'lbl_author' => 'Author', 'lbl_author' => 'Author',
'opt_random_author' => 'Random from all users', 'opt_random_author' => 'Random from all users',
'lbl_date' => 'Post Date', 'lbl_date' => 'Post Date',
'opt_date_now' => 'Current time', 'opt_date_now' => 'Current time',
'opt_date_past' => 'Random in past few days', 'opt_date_past' => 'Random in past few days',
'opt_date_future' => 'Future date (Scheduled)', 'opt_date_future' => 'Future date (Scheduled)',
'desc_date' => 'If future date, post status will automatically set to "Scheduled".',
'lbl_length' => 'Article Length', 'lbl_length' => 'Article Length',
'opt_len_short' => 'Short (2-3 paragraphs)', 'opt_len_short' => 'Short (2-3 paragraphs)',
'opt_len_medium' => 'Medium (4-6 paragraphs + heading)', 'opt_len_medium' => 'Medium (4-6 paragraphs + heading)',
'opt_len_long' => 'Long (7-10 paragraphs + heading, quote)', 'opt_len_long' => 'Long (7-10 paragraphs + heading, quote)',
'lbl_image' => 'Featured Image', 'lbl_image_size' => 'Featured Image Size',
'opt_use_img' => 'Include random image from Picsum Photos', 'opt_use_img' => 'Include random image from Picsum Photos',
'opt_img_small' => 'Small (800x600)', 'opt_img_small' => 'Small (800x600)',
'opt_img_med' => 'Medium (1200x800)', 'opt_img_med' => 'Medium (1200x800)',
'opt_img_large' => 'Large (1600x1000)', 'opt_img_large' => 'Large (1600x1000)',
'lbl_extra' => 'Additional Options',
'opt_comments' => 'Include dummy comments', 'opt_comments' => 'Include dummy comments',
'opt_sticky' => 'Make first post sticky (Post type only)', 'opt_sticky' => 'Make first post sticky (Post type only)',
'btn_generate' => 'Generate Dummy Data', 'btn_generate' => '🚀 Generate Dummy Data',
'purge_title' => 'Cleanup / Rollback', 'purge_title' => 'Cleanup & Purge',
'purge_active' => 'Active dummy items', 'purge_active' => 'Active dummy items',
'purge_desc' => 'Permanently deletes all posts, pages, and media attachments created by DummyLab.', 'purge_desc' => 'Permanently deletes all posts, pages, and media attachments created by DummyLab.',
'btn_purge' => 'Delete All Dummy Data', 'btn_purge' => 'Hapus Semua Data Dummy',
'guide_title' => 'Quick Usage Guide', 'guide_title' => 'Quick Usage Guide',
'guide_step1' => 'Select total count and content type (Post/Page).', 'guide_step1' => 'Select total count and content type (Post/Page).',
'guide_step2' => 'Choose generated text language and length.', 'guide_step2' => 'Choose generated text language and length.',
'guide_step3' => 'Check image box to auto-fetch thumbnails from Picsum.', 'guide_step3' => 'Check image box to auto-fetch thumbnails from Picsum.',
'guide_step4' => 'Click Purge anytime to completely clean test data.', 'guide_step4' => 'Click Purge anytime to completely clean test data.',
'safety_title' => 'Safe Development', 'safety_title' => 'Development Safety',
'safety_item1' => 'All dummy posts are tracked via unique metadata key.', 'safety_item1' => 'All dummy posts tracked via unique metadata key.',
'safety_item2' => 'Clean purge removes featured images from Media Library.', 'safety_item2' => 'Clean purge removes featured images from Media Library.',
'safety_item3' => 'Safe for staging and local theme testing.', 'safety_item3' => 'Safe for staging and local theme testing.',
]; ];
@@ -308,7 +349,9 @@ class DummyLab {
'plugin_doc' => 'Dokumentasi Plugin', 'plugin_doc' => 'Dokumentasi Plugin',
'msg_generated' => 'konten dummy berhasil dibuat!', 'msg_generated' => 'konten dummy berhasil dibuat!',
'msg_purged' => 'data dummy berhasil dibersihkan!', 'msg_purged' => 'data dummy berhasil dibersihkan!',
'form_title' => 'Generate Content Dummy', 'sec_general' => 'Pengaturan Utama',
'sec_taxonomy' => 'Taksonomi & Penulis',
'sec_content' => 'Konten & Media',
'lbl_count' => 'Jumlah Post/Halaman', 'lbl_count' => 'Jumlah Post/Halaman',
'lbl_type' => 'Tipe Konten', 'lbl_type' => 'Tipe Konten',
'opt_post' => 'Post', 'opt_post' => 'Post',
@@ -320,7 +363,7 @@ class DummyLab {
'opt_pending' => 'Pending Review', 'opt_pending' => 'Pending Review',
'opt_private' => 'Private', 'opt_private' => 'Private',
'lbl_cats' => 'Kategori', 'lbl_cats' => 'Kategori',
'desc_cats' => 'Kategori dibuat otomatis jika belum ada. Pisahkan dengan koma. Tidak berlaku untuk Halaman.', 'desc_cats' => 'Kategori dibuat otomatis jika belum ada. Pisahkan dengan koma.',
'lbl_tags' => 'Tag Tambahan', 'lbl_tags' => 'Tag Tambahan',
'desc_tags' => 'Opsional, pisahkan dengan koma.', 'desc_tags' => 'Opsional, pisahkan dengan koma.',
'lbl_author' => 'Penulis', 'lbl_author' => 'Penulis',
@@ -328,22 +371,20 @@ class DummyLab {
'lbl_date' => 'Tanggal Post', 'lbl_date' => 'Tanggal Post',
'opt_date_now' => 'Waktu sekarang', 'opt_date_now' => 'Waktu sekarang',
'opt_date_past' => 'Acak dalam beberapa hari terakhir', 'opt_date_past' => 'Acak dalam beberapa hari terakhir',
'opt_date_future' => 'Rentang tanggal tertentu (Future/Scheduled)', 'opt_date_future' => 'Rentang tanggal tertentu (Scheduled)',
'desc_date' => 'Jika tanggal di masa depan, status otomatis "Scheduled".',
'lbl_length' => 'Panjang Artikel', 'lbl_length' => 'Panjang Artikel',
'opt_len_short' => 'Pendek (2-3 paragraf)', 'opt_len_short' => 'Pendek (2-3 paragraf)',
'opt_len_medium' => 'Sedang (4-6 paragraf + heading)', 'opt_len_medium' => 'Sedang (4-6 paragraf + heading)',
'opt_len_long' => 'Panjang (7-10 paragraf + heading, quote)', 'opt_len_long' => 'Panjang (7-10 paragraf + heading, quote)',
'lbl_image' => 'Gambar Unggulan', 'lbl_image_size' => 'Ukuran Gambar Unggulan',
'opt_use_img' => 'Sertakan gambar acak dari Picsum Photos', 'opt_use_img' => 'Sertakan gambar acak dari Picsum Photos',
'opt_img_small' => 'Kecil (800x600)', 'opt_img_small' => 'Kecil (800x600)',
'opt_img_med' => 'Sedang (1200x800)', 'opt_img_med' => 'Sedang (1200x800)',
'opt_img_large' => 'Besar (1600x1000)', 'opt_img_large' => 'Besar (1600x1000)',
'lbl_extra' => 'Opsi Tambahan',
'opt_comments' => 'Sertakan komentar dummy', 'opt_comments' => 'Sertakan komentar dummy',
'opt_sticky' => 'Jadikan post pertama sebagai sticky post (khusus Post)', 'opt_sticky' => 'Jadikan post pertama sebagai sticky post (khusus Post)',
'btn_generate' => 'Generate Data Dummy', 'btn_generate' => '🚀 Generate Data Dummy',
'purge_title' => 'Cleanup / Rollback', 'purge_title' => 'Pembersihan & Purge',
'purge_active' => 'Total data dummy aktif', 'purge_active' => 'Total data dummy aktif',
'purge_desc' => 'Tindakan ini akan menghapus permanen seluruh post, page, dan gambar yang dibuat oleh DummyLab.', 'purge_desc' => 'Tindakan ini akan menghapus permanen seluruh post, page, dan gambar yang dibuat oleh DummyLab.',
'btn_purge' => 'Hapus Semua Data Dummy', 'btn_purge' => 'Hapus Semua Data Dummy',