Files
2026-04-13 15:50:16 +02:00

151 lines
4.4 KiB
PHP

<?php
/**
* Settings page for Simple Custom Post Order plugin.
*
* Uses WordPress Settings API for proper integration with core admin UI.
*
* @package SimpleCustomPostOrder
*/
// Prevent direct access.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
$options = get_option( 'scporder_options', [] );
?>
<div class="wrap">
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
<?php settings_errors( 'scporder_options' ); ?>
<form method="post" action="options.php">
<?php
settings_fields( 'scporder_settings' );
do_settings_sections( 'scporder-settings' );
submit_button( __( 'Save Changes', 'simple-custom-post-order' ) );
?>
</form>
<hr />
<h2><?php esc_html_e( 'Reset Post Order', 'simple-custom-post-order' ); ?></h2>
<p><?php esc_html_e( 'Select post types to reset their custom order back to default (by date for posts, alphabetical for pages).', 'simple-custom-post-order' ); ?></p>
<form id="scpo-reset-form">
<table class="form-table" role="presentation">
<tbody>
<tr>
<th scope="row"><?php esc_html_e( 'Post Types to Reset', 'simple-custom-post-order' ); ?></th>
<td>
<fieldset>
<legend class="screen-reader-text"><span><?php esc_html_e( 'Post Types to Reset', 'simple-custom-post-order' ); ?></span></legend>
<?php
$post_types_args = apply_filters(
'scpo_post_types_args',
[
'show_ui' => true,
'show_in_menu' => true,
],
$options
);
$post_types = get_post_types( $post_types_args, 'objects' );
foreach ( $post_types as $post_type ) {
if ( 'attachment' === $post_type->name ) {
continue;
}
printf(
'<label><input type="checkbox" name="scpo_reset_types[]" value="%s" /> %s</label><br />',
esc_attr( $post_type->name ),
esc_html( $post_type->label )
);
}
?>
</fieldset>
</td>
</tr>
</tbody>
</table>
<?php wp_nonce_field( 'scpo-reset-order', 'scpo_reset_nonce' ); ?>
<p class="submit">
<button type="submit" id="scpo-reset-button" class="button button-secondary">
<?php esc_html_e( 'Reset Order', 'simple-custom-post-order' ); ?>
</button>
<span id="scpo-reset-message" class="description" style="margin-left: 10px;"></span>
</p>
</form>
<hr />
<h2><?php esc_html_e( 'Support', 'simple-custom-post-order' ); ?></h2>
<p>
<?php
printf(
/* translators: 1: link to reviews, 2: link to Colorlib */
esc_html__( 'Enjoying this plugin? Please %1$s on WordPress.org! For support, visit %2$s.', 'simple-custom-post-order' ),
'<a href="https://wordpress.org/support/plugin/simple-custom-post-order/reviews/?filter=5" target="_blank">' . esc_html__( 'leave a review', 'simple-custom-post-order' ) . '</a>',
'<a href="https://colorlib.com/" target="_blank">Colorlib.com</a>'
);
?>
</p>
</div>
<script>
(function($) {
'use strict';
$('#scpo-reset-form').on('submit', function(e) {
e.preventDefault();
var $form = $(this);
var $button = $('#scpo-reset-button');
var $message = $('#scpo-reset-message');
var checkedItems = $form.find('input[name="scpo_reset_types[]"]:checked');
if (checkedItems.length === 0) {
$message.text('<?php echo esc_js( __( 'Please select at least one post type to reset.', 'simple-custom-post-order' ) ); ?>');
return;
}
var items = [];
checkedItems.each(function() {
items.push($(this).val());
});
$button.prop('disabled', true);
$message.text('<?php echo esc_js( __( 'Resetting...', 'simple-custom-post-order' ) ); ?>');
$.ajax({
url: '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>',
type: 'POST',
data: {
action: 'scpo_reset_order',
scpo_security: '<?php echo esc_js( wp_create_nonce( 'scpo-reset-order' ) ); ?>',
items: items
},
success: function(response) {
if (response && response.success) {
$message.text(response.data.message);
setTimeout(function() {
location.reload();
}, 1500);
} else if (response && response.data && response.data.message) {
$message.text(response.data.message);
} else {
$message.text('<?php echo esc_js( __( 'An error occurred.', 'simple-custom-post-order' ) ); ?>');
}
$button.prop('disabled', false);
},
error: function() {
$message.text('<?php echo esc_js( __( 'An error occurred.', 'simple-custom-post-order' ) ); ?>');
$button.prop('disabled', false);
}
});
});
})(jQuery);
</script>