qTranslate和AJAX的WordPress问题

我正在使用带有qTranslate和自定义主题的wordpress。 主题带来自动完成搜索。 我的问题是post/页面标题没有翻译。 我检查了stackoverflow / google,似乎存在AJAX请求和qTranslate的问题。 这就是为什么我添加到我的php文件的url参数以下内容:

?lang='.qtrans_getLanguage() 

我检查了控制台,参数正确传递(对于每种语言)到javascript文件。 我现在需要的是读取这个url参数并将其返回到我的php文件(我在使用$.getJSON时测试了js文件,并在文件中添加了lang=en ,但它工作但我需要传递的语言)。

PHP

  admin_url( 'admin-ajax.php' ))); // Function to fire whenever search form is displayed add_action( 'get_search_form', 'myprefix_autocomplete_search_form' ); // Functions to deal with the AJAX request - one for logged in users, the other for non-logged in users. add_action( 'wp_ajax_myprefix_autocompletesearch', 'myprefix_autocomplete_suggestions' ); add_action( 'wp_ajax_nopriv_myprefix_autocompletesearch', 'myprefix_autocomplete_suggestions' ); } function myprefix_autocomplete_search_form(){ wp_enqueue_script( 'my_acsearch' ); } add_action( 'wp_ajax_{action}', 'my_hooked_function' ); add_action( 'wp_ajax_nopriv_{action}', 'my_hooked_function' ); function myprefix_autocomplete_suggestions(){ $search_term = $_REQUEST['term']; $search_term = apply_filters('get_search_query', $search_term); $search_array = array( 's'=> $search_term, 'showposts' => 6, 'post_type' => 'any', 'post_status' => 'publish', 'post_password' => '', 'suppress_filters' => true ); $query = http_build_query($search_array); $posts = get_posts( $query ); // Initialise suggestions array $suggestions=array(); global $post; foreach ($posts as $post): setup_postdata($post); $suggestion['lang'] = $_GET['lang']; $suggestion['label'] = esc_html(qtrans_use(qtrans_getLanguage(), $post->post_title, true)); $suggestion['link'] = get_permalink(); $suggestion['image'] = (has_post_thumbnail( $post->ID )) ? get_the_post_thumbnail($post->ID, 'thumbnail', array('title' => '')) : '' ; if(get_post_type($post->ID) == 'post'){ $suggestion['post_type'] = __('Blog Post',NECTAR_THEME_NAME); } else if(get_post_type($post->ID) == 'page'){ $suggestion['post_type'] = __('Page',NECTAR_THEME_NAME); } else if(get_post_type($post->ID) == 'portfolio'){ $suggestion['post_type'] = __('Portfolio Item',NECTAR_THEME_NAME); //show custom thumbnail if in use $custom_thumbnail = get_post_meta($post->ID, '_nectar_portfolio_custom_thumbnail', true); if(!empty($custom_thumbnail) ){ $attachment_id = pn_get_attachment_id_from_url($custom_thumbnail); $suggestion['image'] = wp_get_attachment_image($attachment_id,'portfolio-widget'); } } else if(get_post_type($post->ID) == 'product'){ $suggestion['post_type'] = __('Product',NECTAR_THEME_NAME); } // Add suggestion to suggestions array $suggestions[]= $suggestion; endforeach; // JSON encode and echo $response = $_GET["callback"] . "(" . json_encode($suggestions) . ")"; echo $response; // Don't forget to exit! exit; } ?> 

JS

 jQuery(document).ready(function ($){ var acs_action = 'myprefix_autocompletesearch'; $("#s").autocomplete({ delay: 50, position: {of: "#search-outer #search .container" }, appendTo: $("#search-box"), source: function(req, response){ $.getJSON(MyAcSearch.url+'?callback=?&action='+acs_action, req, response); }, select: function(event, ui) { window.location.href=ui.item.link; }, minLength: 2, }).data( "ui-autocomplete" )._renderItem = function( ul, item ) { return $( "
  • " ) .append( "" + item.image + "" + item.label + "
    " + item.post_type + "
    " ) .appendTo( ul ); }; });
  • 我希望有人可以帮助我

    即使这不是一个好的解决方案,我想出了这个:

     var lang; $('script').each(function(i, e) { var scriptName = $(e).attr('src'); if(typeof scriptName != 'undefined') { if(scriptName.indexOf('wpss-search-suggest') != -1) { lang = scriptName.substr(scriptName.lastIndexOf('=')+1, scriptName.length-1); } } }); $.getJSON(MyAcSearch.url+'?callback=?&lang='+lang+'&action='+acs_action, req, response); 

    我发现了一个更简单的解决方法,但有条件的PHP是必要的(使用条件硬编码php文件中的脚本):

    代替:

     window.location.href=ui.item.link; 

    您可以使用:

     var lang = ''; window.location.href=ui.item.link+'?lang='+lang; 

    所以脚本是(我还包括另一个检查qTranslate是否被激活的条件):

      // // Autocomplete Searchform var acs_action = 'myprefix_autocompletesearch'; jQuery("#s").autocomplete({ delay: 50, position: {of: "#search-outer #search .container" }, appendTo: $("#search-box"), source: function(req, response){ jQuery.getJSON(MyAcSearch.url+'?callback=?&action='+acs_action, req, response); }, select: function(event, ui) {  var lang = ''; window.location.href=ui.item.link+'?lang='+lang;  window.location.href=ui.item.link;  }, minLength: 2, }).data( "ui-autocomplete" )._renderItem = function( ul, item ) { return jQuery( "
  • " ) .append( "" + item.image + "" + item.label + "" ) .appendTo( ul ); };
  • 希望能帮助到你!