Я разработал собственный виджет для плагина Elementor под названием карусельный слайдер. Там я установил элемент или поле настройки по умолчанию select2
для множественного выбора. Я заполняю шаблоны Elementor Libray в этом поле select2. Нормально работает нормально. Но я хочу добавить вновь созданный шаблон, который создается из предварительного просмотра редактора iframe. И здесь шаблоны создаются с использованием метода ajax, который не загружает страницу.
Для добавления вновь созданного предмета я использовал Elementor JS hook elementor.hooks.addAction( 'panel/open_editor/widget/widget-type
который запускается, когда любой виджет собирается редактироваться или открывается редактор этого типа виджета. Используя jQuery ajax мне удалось добавить недавно созданный шаблон к этому select2
поле. Но проблема в том, «Когда я впервые нажимаю на этот виджет типа ( в моем случае карусель слайдер ) в предпросмотре iframe и открывшемся редакторе, новый созданный шаблон добавляется и появляется в значении select2 options. Теперь я закрываю этот редактор и снова открываю редактор моего виджета, нажимая на виджет карусели, новый добавленный шаблон исчезает. Я не могу понять проблемы. Мои коды ниже ..
(function( $ ) {
$(document).ready( function() {
elementor.hooks.addAction( 'panel/open_editor/widget/premium-carousel-widget', function( panel, model, view ) {
$.ajax({
url : template_update.ajax_url,
type : 'POST',
data : {
action : 'update_template',
whatever : 'yes'
},
success : function( data ) {
if( data !== '' ) {
console.log( data );
$('select[data-setting=premium_carousel_slider_content]').append( $(data ) );
}
console.log( 'hello' );
}
});
});
});
})(jQuery);
Коды PHP приведены ниже. Я использовал WordPress ajax API.
public function updating_template_after_save() {
if( $_POST['whatever'] ) {
$pagelist = get_posts(array(
'post_type' => 'elementor_library',
'showposts' => 999,
));
$options = array();
if ( ! empty( $pagelist ) && ! is_wp_error( $pagelist ) ){
foreach ( $pagelist as $post ) {
$options[ $post->ID ] = __( $post->post_title, 'premium_elemnetor' );
}
}
$old_items = get_option( 'temp_count' );
if( $old_items != $options ) {
$html = '';
$new_item = array_diff( $options, $old_items );
foreach( $new_item as $key => $value ) {
$html .= '<option value="'.$key.'">'. $value .'</option>';
}
echo $html;
update_option( 'temp_count', $options );
}
}
die();
}
Задача ещё не решена.
Других решений пока нет …