【问题标题】:Best solution to redirect URLs to an Ajax version?将 URL 重定向到 Ajax 版本的最佳解决方案?
【发布时间】:2012-05-25 13:15:15
【问题描述】:

关于Ajax permalink in wordpress Pluto Theme的更多问题

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

示例: Google中出现的链接:www.thaiorchid.be/menus/(奇怪的黑页)对比用户网页:www.thaiorchid.be/#menu-item-21

我正在寻找自动将所有页面(例如一个 /menus 重定向到一个 /#menu-item-21)的最佳方法,以至少有一些像样的东西,知道什么是最好的解决方案吗?

【问题讨论】:

  • 两个问题: 1. 您是否有权访问用于渲染为 AJAX 请求渲染的局部视图的模板文件? 2. 在例如的情况下menu-item-21 -- 21是帖子/页面的ID吗?
  • 对于 1. 是的,我可以访问所有内容。 2. 遗憾的是没有(菜单帖子是第 11 位(与 Ajax URL 相比:#menu-item-21))。谢谢

标签: jquery ajax url-redirection


【解决方案1】:

不幸的是,我目前无法测试以下内容,但我相信这样的东西应该可以工作,因为在这个主题中使用了标准的 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,然后如果当前页面未通过 AJAX 加载,则使用 Javascript 重定向。

再说一次,我现在根本无法测试这个,但也许它可以帮助你继续。

【讨论】:

  • 嘿@polarblau 再次感谢,看起来是一个很好的解决方案!我试过了,但结果还是一样……会再试一次。
  • 您的模板中现在有第二位吗?你能发布一个例子的链接吗?
  • 再次感谢您的帮助,我确实编辑了 page.php 文件并添加了代码的第二部分,但我将其取消,因为不再打开任何页面......但这也是写的在 page.php 代码的顶部,可能有帮助吗? /** * 获取当前页面对象 / $page = get_page($post->ID); / * 获取当前页面id **/ $current_page_id = ''; if(isset($page->ID)) { $current_page_id = $page->ID; }
  • 我很快在没有主题和香草 WP 安装的情况下尽可能地尝试了这个,结果我忘记在 get_menu_id_for_post() 中包含 global $wpdb;。添加后,我被正确重定向。也许这会让你走?
  • 令人惊讶的是它的工作原理!!!哇@polarblau 非常感谢您的帮助...非常感谢!
【解决方案2】:

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

<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 输出)。

【讨论】:

  • 谢谢@Mihai,但链接不是我写的,而是从wordpress自动生成的(那些是来自页面或帖子的链接)有没有办法解决rel="ajax " 到那种链接可能吗?
  • 你的意思是这样的:在某些情况下,我跳过了添加 rel="ajax" 或 class="ajax" 并只是寻找指向我网站域的链接 ?
  • $('a[href^="http://example.com"]') 仅选择具有 href 属性的 a 标签 "http: // example.com”。您不需要 rel="ajax" 或 class="ajax"。
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2023-03-13
相关资源
最近更新 更多