WordPress Ajax для отправки данных в другое всплывающее окно - PullRequest
0 голосов
/ 18 января 2020

Я изо всех сил пытался сделать это, и я надеюсь, что вы можете помочь мне выяснить, где я иду не так, я пробовал множество сайтов для 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 лучший способ, и каков наилучший способ вывести данные из формы во второе всплывающее окно .

Я несколько дней ломал голову, пытаясь придумать лучший способ сделать это, очень надеюсь, что кто-то может помочь.

спасибо

...