¿Cómo agregar un submenú con AJAX?

3

Lo que quiero hacer es activar la función add_submenu_page() desde ajax en la página de opciones de mi complemento.

Cuando hago clic en el enlace "Agregar Liga", quiero mostrar un [texto] de entrada ajax que se guardará en la base de datos, luego agregar la página de submenú con los valores que se han insertado.

También espero poder eliminar la entrada, así como la página recién creada.

    
pregunta Rory Rothon 02.05.2012 - 10:06

1 respuesta

1

Como no puedes suponer que obtendrás un ejemplo completo sin ningún código dado, te mostraré una configuración AJAX de wordpress aproximada:

Pon todo esto en functions.php :

<?php
add_action('wp_head', 'my_action_javascript');
function my_action_javascript() {
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
    jQuery.ajax(
        type: 'POST',
        url: <?php echo admin_url('admin-ajax.php'); ?>,
        data: {
            action : 'your_AJAX_call',
            league : $('input#league').val() // get the user input
        },
        success: function( response, textStatus, XMLHttpRequest ) {
            $('ul#menu').append(response);
        }
        error: function( XMLHttpRequest, textStatus, errorThrown ) {
            alert('An error occured');
        }
    );
});
</script>
<?php
}

add_action( 'wp_ajax_nopriv_your_AJAX_call', 'your_AJAX_call' );
add_action( 'wp_ajax_your_AJAX_call', 'your_AJAX_call' );
function your_AJAX_call() {
    $league = $_POST['league'];
    // do sanitization
    // if sanitization is ok:
        // save to DB
        // echo sth like '<li><a href="new-league">New League</a></li>'
    exit;  // won't work without!
}

Recomiendo devolver una matriz codificada en json, para que pueda proporcionar información más detallada. Es decir. si el saneamiento falla porque es demasiado corto:

// Your sanitization logic here
$arr = array ('success'=>false,'error'=>'Length must be at least 3 Characters');
echo json_encode($arr);

enlace

Luego, en la función response de la llamada ajax:

var response = jQuery.parseJSON(response);
alert('An error occured: ' + response.error);

enlace

Aquí hay un buen artículo sobre el uso de ajax en wordpress:

enlace

EDITAR:

Olvidé totalmente esto:

add_submenu_page() no funcionará, porque la página ya está representada en este punto.

    
respondido por el xsonic 14.08.2012 - 09:08

Lea otras preguntas en las etiquetas