0

所以我有一个英语主题,我本地化为西班牙语。它在西班牙语中工作得很好。

但是,如果我将我的用户配置文件语言更改为英语 - 这样我就可以在仪表板上看到英语 - 网站上 AJAX 生成的内容会变成未翻译的英语。

如果我注销,AJAX 生成的内容会再次变为西班牙语。

我的猜测是,如果设置了用户配置文件语言,admin-ajax 正在加载用户配置文件语言而不是主题语言。

所以我的问题是:我该如何纠正这个问题,以便 admin-ajax 始终使用主题语言?


编辑:这是 AJAX 调用。我没有发送任何需要翻译的文本。

$('#load_more').on('click', function() {
    var offset = $('#main-ajax-container').data('offset');
    var prefix = $('#main-ajax-container').data('prefix');
    var blogid = $('#main-ajax-container').data('blogid');
    var fid = $('#main-ajax-container').data('fid');

$.ajax({
  type: "get",
  url: "wp-admin/admin-ajax.php",
  data: {
    action: "home_load_more",
    siteUrl: "<?php echo get_site_url();?>",
    offset: offset,
    prefix: prefix,
    blogid: blogid,
    fid: fid
  },
  success: function(resp) {
      $('#main-ajax-container').append(resp);
      offset = parseInt(offset) + 3;
      $('#main-ajax-container').data('offset', offset);
      var max = $('#main-ajax-container').data('max');
      if (offset >= parseInt(max)) { 
        $('#load_more').addClass('done');
      }
    } 
  });
});
4

1 回答 1

1

你的理由是对的。如其名称所示,“admin-ajax”端点是管理区域的一部分,因此将使用“仪表板”语言。

我假设您将 Ajax 端点用于非管理目的,但问题是您正在通过 Ajax 加载哪些内容?

最简单的情况是您只加载主题翻译。正如您所说,这种情况很容易覆盖“主题语言”。

尝试将其添加到主题的 functions.php 文件中:

if( defined('DOING_AJAX') && DOING_AJAX && is_user_logged_in() ){
  add_filter('theme_locale', function(){
    return get_locale();
  } );
}

但是,您询问如何使 admin-ajax始终使用站点语言。这真的是你想要的吗?这意味着仪表板中任何地方使用的任何 ajax 函数都不会使用与它们正在运行的页面相同的语言。

有很多方法可以做到这一点,但它变得更加复杂。如果您在这方面更新您的问题,我会更新我的答案。

于 2017-10-27T09:24:58.593 回答