Я изо всех сил пытался сделать это, и я надеюсь, что вы можете помочь мне выяснить, где я иду не так, я пробовал множество сайтов для WordPress, и все они, похоже, указывают на плагины.
Я используя плагин Elementor для создания модальных всплывающих окон, и в этом всплывающем окне у меня есть шорткод.
function edit_guests()
{
global $wpdb;
$current_user = wp_get_current_user();
$current_user = $current_user->user_login;
echo '<form method="post" id="my_form">';
echo '<span id="errfrmMsg" style="margin:0 auto;"></span>';
echo '<select id="guests" name="guests">';
$results = $wpdb->get_results( "SELECT * FROM wp_guest_list");
if(!empty($results))
{
foreach($results as $row)
{
if($row->username == $current_user )
{
echo '<option value="' . $row->name . '" selected="selected"> ' .$row->name . '</option>';
}
}
}
echo '</select>';
echo'<input type="hidden" name="action" value="ajax_action_anyName" style="display: none; visibility: hidden; opacity: 0;">';
echo '<div class="buttons" style="text-align:center; margin-top:20px;">'; ?>
<button type="submit" formaction="<?php echo admin_url( 'admin-ajax.php' ); ?>" class ="edit-guest close-popup" onclick="" style="margin-right:20px;">Edit Guest</button>
<?php
echo '<button id="submit" type="submit" formaction="/submit/?action=remove" class="" onclick="#">Remove Guest</button>';
echo '</div>';
echo '<div id="server-results"></div>';
echo '</form>';
}
function show_edits()
{
return edit_guests();
}
add_shortcode('weddly-edits', 'show_edits');
При нажатии на одного из гостей на этой странице появляется всплывающее окно: https://www/weddly.app/table-planner
Когда пользователь нажимает на пользователя, удаляющего его, он переводит его в форму php в файле шаблона для / form, а затем добавляет в базу данных, это берет данные поста из форма, это идеально.
Для редактирования гостевой ссылки я хочу получить значение поста из формы и отправить его через Ajax и вернуть его на ту же страницу, где я затем соберу его в другом всплывающем окне, чтобы позволить им редактировать выбранного пользователя.
Это то, что я пытался придумать.
Это в моих функциях. php для моего тема:
// add actions
add_action( "wp_ajax_anyName", "ajax_action_anyName" );
add_action( "wp_ajax_nopriv_anyName", "ajax_action_anyName" );
function ajax_action_anyName()
{
$form_element = sanitize_text_field( $_REQUEST['my_form'] );
echo $form_element;
wp_die();
}
add_action( 'wp_enqueue_scripts', 'my_form_scripts' );
function my_form_scripts() {
if (is_page ('92')) {
wp_enqueue_script('my_file', get_template_directory_uri() . '/assets/js/editguest.js', array( 'jquery' ) );
wp_localize_script( 'my_file', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
}
}
Это мой Ajax, который, похоже, не работает
$(document).on( 'submit', 'form', function( event ) {
var $ajax = $(this).find( 'input[name="guests"]' );
if( $ajax.length < 1 || parseInt( $ajax.val() ) < 1 )
return;
$.ajax( {
action: $(this).attr( 'action' ),
data: $(this).serialize(),
success: function( res ) {
if( res.success ) {
alert("success");
} else {
alert("error)");
}
}
} );
} );
Когда нажата опция редактирования гостя, она закроет текущее всплывающее окно и откроет новое всплывающее окно от Elementor, это один, для которого мне нужно отправить данные, без обновления страницы, есть ли лучший способ отправить данные или это Ajax лучший способ, и каков наилучший способ вывести данные из формы во второе всплывающее окно .
Я несколько дней ломал голову, пытаясь придумать лучший способ сделать это, очень надеюсь, что кто-то может помочь.
спасибо