将URL重定向到Ajax版本的最佳解决方案?

时间:2012-05-25 13:15:15

标签: jquery ajax url-redirection

关于Ajax permalink in wordpress Pluto Theme

的进一步问题

所以这是一个完全的Ajax Wordpress主题,Google中出现的所有网址都不是来自用户版本网站,而是来自它的“底层”版本。

实施例: 链接出现在谷歌:www.thaiorchid.be / menus /(奇怪的黑页)与用户网页相比:www.thaiorchid.be/#menu-item-21

我正在寻找自动重定向所有页面的最佳方式(例如一个/菜单到一个/#menu-item-21)至少有一些可呈现的东西,任何想法什么是最好的解决方案?

2 个答案:

答案 0 :(得分:0)

为了向后兼容,请以正确的方式编写链接,但添加您感觉舒适的关系/类:

<a href="http://example.com/path/to/file.html" rel="ajax" >link</a>

然后从jquery:

$('a[rel=ajax]').click(function(e) {
    //do whatever
    e.preventDefault();
});

在某些情况下,我跳过添加 rel =“ajax” class =“ajax”,只是查找指向我的域的链接网站:

$('a[href^="http://example.com"]').click(function(e) {
    //do whatever
    e.preventDefault();
});

通常我的做任何方法向初始链接中的相同地址发出ajax get请求。它只是添加了一个参数?ajax = 1 ,因此模板可以跳过输出页眉/页脚(当我使用AHAH时)或json_encode响应(用于JSON输出)。

答案 1 :(得分:0)

不幸的是我目前无法测试以下内容,但我相信这样的东西应该可行,因为在这个主题中使用了标准的Wordpress菜单。

// functions.php
function get_menu_id_for_post($post_id) {
  global $wpdb;
  $query = $wpdb->prepare(
    "
      SELECT post_id 
      FROM $wpdb->postmeta 
      WHERE meta_key = '_menu_item_object_id' 
      AND meta_value = %s
    ", 
    $post_id
  );
  $menu_id = $wpdb->get_var($query);
  return $menu_id;
}

function is_ajax_request() {
  return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&   
          strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
}

// partial template, right on the top:
<?php if (!is_ajax_request()): ?>
  <script type="text/javascript"> 
    window.location = "http://www.thaiorchid.be/#menu-item-<?php echo get_menu_id_for_post($post->ID) ?>";
  </script>
<?php endif; ?>

这将根据当前帖子或页面ID确定正确的菜单ID,然后使用Javascript重定向,如果当前页面未通过AJAX加载。

同样,我现在根本无法测试,但也许它可以帮助你继续。