我对找到问题的解决方案已经失去了希望,希望有人可以帮助我。问题是这样的:
我有一个 WordPress 安装,其中有一个名为 wp_lojas 的额外表(用于商店)。客户可以访问该网站并通过表格输入他们的地址,然后使用 Google Maps Api 找到他们附近的商店。
当用户提交表单时,我会验证他们的地址位置(纬度/经度),并通过 SQL 查询寻找最近的商店。
表单通过ajax请求($.post())将参数(纬度/经度/半径)发送到我的主题文件夹(/wp-content/themes/accessorize/dadosLojas.php)内的php文件该文件使用找到的存储构建一个 XML。
在我的本地计算机上,离线时一切正常。我在网上得到了答案“301永久移动”。如果你们安装了Firebug并想尝试一下,测试链接是http://www.colletivo.com.br/accessorize/表格位于页面的页脚。如果你们想要巴西的地址,请尝试“Rua Vicente Leporace, 1534”。
如果您不明白我试图解释的内容,或需要更多信息,请告诉我。
非常感谢。
请您参考如下方法:
根据 Greg Pettit 给出的提示,问题已解决!
我不知道 Wordpress 拦截 ajax 请求的可能性,我认为这与 htaccess 将请求重定向到不存在的 url 有关。
知道了这一点,我研究了如何使用Wordpress的功能发出ajax请求,解决方案如下:
在我的主题的functions.php中:
// Hooks wp_ajax that points to the function that builds the XML Stores
add_action('wp_ajax_procura_lojas','procuraLojas'); // Unlogged User
add_action('wp_ajax_nopriv_procura_lojas','procuraLojas'); // Logged User
// Function that Builds Stores XML
function procuraLojas() {
global $wpdb;
// Retrieve $_POST informattion coming from jQuery.post
$lat = $_POST["latitude"];
$lon = $_POST["longitude"];
$raio = $_POST["raio"];
// Query wp_lojas and Build XML
$consulta = $wpdb->get_results(sprintf("SELECT * , ( 3959 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distancia FROM wp_lojas HAVING distancia < '%s' ORDER BY distancia",
mysql_real_escape_string($lat),
mysql_real_escape_string($lon),
mysql_real_escape_string($lat),
mysql_real_escape_string($raio)));
$dom = new DOMDocument("1.0", "utf-8");
$no = $dom->createElement("lojas");
$parnode = $dom->appendChild($no);
header("Content-type: text/xml");
foreach ($consulta as $loja){
$no = $dom->createElement("loja");
$novono = $parnode->appendChild($no);
$novono->setAttribute('nome', $loja->nome);
$novono->setAttribute('lat', $loja->latitude);
$novono->setAttribute('lon', $loja->longitude);
$novono->setAttribute('telefone', $loja->telefone);
$novono->setAttribute('email', $loja->email);
$novono->setAttribute('endereco', $loja->endereco);
$novono->setAttribute('numero', $loja->numero);
$novono->setAttribute('complemento', $loja->complemento);
$novono->setAttribute('bairro', $loja->bairro);
$novono->setAttribute('cidade', $loja->cidade);
$novono->setAttribute('estado', $loja->estado);
$novono->setAttribute('cep', $loja->cep);
$novono->setAttribute('distancia', $loja->distancia);
}
// Print XML and Exit
echo $dom->saveXML();
exit;
}
在 WordPress 的标题中我放置:
<script type='text/javascript'>
/* <![CDATA[ */
var MyAjax = { ajaxurl: "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php" }; // Build the Link to admin-ajax.php / Javascript Global Variable
/* ]]> */
</script>
当用户提交表单时,我会为负责该表单的 Wordpress 类发送一个 POST ajax 'wp-admin/admin-ajax.php':
jQuery.post(
MyAjax.ajaxurl, // Link to the file 'wp-admin/admin-ajax.php' responsible for handling ajax requisitions
{
action : 'procura_lojas', // Name used in the hook 'wp_ajax_procura_lojas'
latitude : center.lat(), // Latitude Parameter
longitude : center.lng(), // Longitude Parameter
raio : raio // Radius Parameter
},
function(data) { // Callback
// Retrieve all nodes called 'loja' and put it in the map
var markers = data.documentElement.getElementsByTagName("loja");
for (var i = 0; i < markers.length; i++) {
var dados = [];
dados["nome"] = markers[i].getAttribute('nome');
dados["estado"] = markers[i].getAttribute('estado');
dados["cidade"] = markers[i].getAttribute('cidade');
dados["bairro"] = markers[i].getAttribute('bairro');
dados["endereco"] = markers[i].getAttribute('endereco');
dados["numero"] = markers[i].getAttribute('numero');
dados["complemento"] = markers[i].getAttribute('complemento');
dados["cep"] = markers[i].getAttribute('cep');
dados["telefone"] = markers[i].getAttribute('telefone');
var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lon')));
var marker = createMarker(markers[i].getAttribute("name"), latlng, dados);
}
}
);
就是这样!感谢 Greg Pettit 澄清了我的想法。
一个对我也有帮助的链接是 5 tips for using ajax in wordpress
我希望这个答案有一天能对某人有所帮助。
