EuropeWonder/mytheme-customizer.php

108 lines
4.0 KiB
PHP

<?php
/**
* Customizer za sortiranje Experience Journeyev
*/
// Dodaj Customizer section in control
function grilctours_customize_journey_order($wp_customize) {
// Add section
$wp_customize->add_section('experience_journey_order_section', array(
'title' => __('Experience Journey Order', 'grilctours'),
'priority' => 200,
));
// Add setting
$wp_customize->add_setting('experience_journey_order', array(
'default' => '',
'sanitize_callback' => 'sanitize_experience_journey_order',
'transport' => 'refresh',
));
// Add control
$wp_customize->add_control(new WP_Customize_Sortable_Posts_Control($wp_customize, 'experience_journey_order', array(
'section' => 'experience_journey_order_section',
'label' => __('Drag & Drop to Reorder', 'grilctours'),
'description' => __('Arrange the order of Experience Journeys on the homepage.', 'grilctours'),
)));
}
add_action('customize_register', 'grilctours_customize_journey_order');
// Sanitizacijska funkcija za vrstni red
function sanitize_experience_journey_order($input) {
$order = explode(',', $input);
$sanitized = array();
foreach ($order as $post_id) {
$post_id = absint($post_id);
if ($post_id && get_post_status($post_id)) {
$sanitized[] = $post_id;
}
}
return implode(',', $sanitized);
}
// Prilagodljiv control class
class WP_Customize_Sortable_Posts_Control extends WP_Customize_Control {
public $type = 'sortable_posts';
public $post_type = 'experience_journey';
public function render_content() {
$saved_order = (array) $this->value();
$all_posts = get_posts(array(
'post_type' => $this->post_type,
'posts_per_page' => -1,
'post_status' => 'publish',
'fields' => 'ids',
));
// Split into saved and new posts
$ordered_posts = array();
$new_posts = array();
// Keep valid saved posts
foreach ($saved_order as $post_id) {
if (in_array($post_id, $all_posts)) {
$ordered_posts[] = $post_id;
}
}
// Add new posts not in saved order
foreach ($all_posts as $post_id) {
if (!in_array($post_id, $ordered_posts)) {
$new_posts[] = $post_id;
}
}
$ordered_posts = array_merge($ordered_posts, $new_posts);
?>
<label>
<span class="customize-control-title"><?php echo esc_html($this->label); ?></span>
<span class="description customize-control-description"><?php echo esc_html($this->description); ?></span>
</label>
<ul class="sortable-posts-list">
<?php foreach ($ordered_posts as $post_id) :
$post = get_post($post_id);
if (!$post) continue;
?>
<li data-post-id="<?php echo esc_attr($post_id); ?>">
<span class="dashicons dashicons-menu"></span>
<?php echo esc_html($post->post_title); ?>
</li>
<?php endforeach; ?>
</ul>
<input type="hidden" <?php $this->link(); ?> value="<?php echo esc_attr(implode(',', $ordered_posts)); ?>" />
<?php
}
}
// Enqueue scripts
function grilctours_customize_controls_enqueue_scripts() {
wp_enqueue_script('grilctours-customizer-sortable', get_template_directory_uri() . '/js/customizer-sortable.js', array('jquery', 'jquery-ui-sortable', 'customize-controls'), '', true);
wp_enqueue_style('grilctours-customizer-sortable', get_template_directory_uri() . '/css/customizer-sortable.css');
}
add_action('customize_controls_enqueue_scripts', 'grilctours_customize_controls_enqueue_scripts');
// Preview script
function grilctours_customize_preview_js() {
wp_enqueue_script('grilctours-customizer-preview', get_template_directory_uri() . '/js/customizer-preview.js', array('customize-preview'), '', true);
}
add_action('customize_preview_init', 'grilctours_customize_preview_js');