2012-05-14 18 views
7

Tengo un problema que me atasco en los últimos días ... Estoy tratando de usar una función simple ajaxPOST para enviar datos a una base de datos MySQL (no a la base de datos WP)Cómo agregar el tema ajax a wordpress

Este código se encuentra en "single-post.php" en el tema, porque debe verificarse antes de cada publicación.

$.ajax({ url: 'library/functions/admin_checkuser.php', 
    data: {action: userID}, 
    type: 'post', 
    success: function(output) { 
        alert(output); 
    } 
}); 

estoy simplemente enviando una variable a un guión "admin_checkuser.php" que a su vez llama a otro script que tomar acciones sobre la base de datos.

Este es el código para "admin_checkuser":

$userid = $_POST['action']; 

echo $userid;//for testing 
$oMySQL = new MySQL(); 
$query = "Select * FROM videotable WHERE uid = '$userid'"; 
$oMySQL->ExecuteSQL($query); 
$bb = $oMySQL->iRecords; 
$aa = $oMySQL->aResult; 
echo $bb; 

if ($bb == 0){ 
$query = "INSERT INTO videotable VALUES ('','$userid','true')"; 
$oMySQL->ExecuteSQL($query); 
echo 'true'; 
    exit(); 

}else{ 
$sharing = mysql_result($aa,0,"share"); 
echo $sharing; 
exit(); 

} 

Pero no creo que las llamadas pasan a través de la secuencia de comandos. Estos scripts se probaron fuera de WordPress y funcionaron, por lo que debe ser algo en WordPress que bloquee la llamada ajax. Por cierto, intenté colocar el "admin_checkuser.php" en muchas carpetas diferentes pero nada funcionó.

Gracias de antemano.

+1

Usa algo como la pestaña de red de Firebug, o HTTPFox, para ver si realmente ocurre una llamada ajax, o mira el registro de acceso de tu servidor. –

Respuesta

2

Debe consultar su url para su llamada ajax.

Quizás use la URL completa en lugar de la relativa.

Podría ser debido a la ubicación de su tema hace que la url sea incorrecta. Supongo que su código ajax está en su carpeta de temas.

Hay algunas funciones de wordpress que obtienen el directorio de temas.

Por ejemplo, si en esta página http://yourwebpage/test/, entonces la llamada ajax irá aquí http://yourwebpage/test/library/functions/admin_checkuser.php. Esto supongo que sería la ubicación incorrecta.

Es por eso que debe agregar la url absoluta a su secuencia de comandos. Y si está en su tema, puede usar este método get_template_directory_uri() para obtener el directorio de la plantilla.

Ver aquí: http://codex.wordpress.org/Function_Reference/get_template_directory_uri

+0

10x mucho !! Perdí tanto tiempo en este – user1108310

24

Es mucho mejor usar la petición AJAX Wordpress incorporado.

Así que en sus temas functions.php archivo, agregar su función a ser llamada, por ejemplo:

function checkUser() { 

    $userid = $_POST['user']; //validation also :) 
    $oMySQL = new MySQL(); 
    $query = "Select * FROM videotable WHERE uid = '$userid'"; 
    $oMySQL->ExecuteSQL($query); 
    $bb = $oMySQL->iRecords; 
    $aa = $oMySQL->aResult; 
    echo $bb; 

    if ($bb == 0){ 
    $query = "INSERT INTO videotable VALUES ('','$userid','true')"; 
    $oMySQL->ExecuteSQL($query); 
    echo 'true'; 
     exit(); 

    } else { 
    $sharing = mysql_result($aa,0,"share"); 
    echo $sharing; 
    exit(); 

    } 
} 

Después de eso, se agrega su gancho con conecta con el incorporado Sistema AJAX

add_action('wp_ajax_check_user', 'checkUser'); 
add_action('wp_ajax_nopriv_check_user', 'checkUser'); 

wp_ajax_nopriv_%s permite que se llame desde el frente.

Y luego, en su archivo javascript, acaba de iniciar su solicitud de Ajax.

$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) { 
    alert(output); 
}); 

Si ajaxurl no está definido, tendrá que crear en el archivo de plantilla, algo como esto debería funcionar, pero hay otras maneras.

add_action('wp_head','ajaxurl'); 
function ajaxurl() { 
?> 
<script type="text/javascript"> 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
</script> 
<?php 
} 

Backend de wordpress hace el resto.

Toma la acción aprobada en la solicitud AJAX, busca el gancho correspondiente `wp_ajax(_nopriv)_%s y luego llama a la función que está asignada al gancho.

También pasará en $_POST o $_GET según el tipo de solicitud de AJAX.

Puede leer un poco más sobre el uso de AJAX inside of Wordpress.

+0

¡Gracias por la gran respuesta! donde exactamente se supone que debo poner el "add_action", en el admin-ajax? solo tíralo allí? – user1108310

+0

¡Eso solo va en el archivo 'functions.php' del tema, debajo o debajo de la definición de la función está bien para mantenerlo ordenado! – Stoosh

+0

Sí, estoy de acuerdo con Stoosh aquí. Es mejor ir por esta ruta. – Gohn67

Cuestiones relacionadas