2013-12-09 48 views
0

我使用qTranslate和自定義主題的WordPress。主題帶來了自動完成搜索。我的問題是帖子/頁面標題沒有被翻譯。我檢查了stackoverflow /谷歌,似乎有問題與AJAX請求和qTranslate。這就是爲什麼我添加到我的PHP文件的URL參數如下:qTranslate和AJAX的WordPress問題

?lang='.qtrans_getLanguage() 

我檢查了控制檯和參數正確傳遞(每種語言)的JavaScript文件。我現在需要的是讀取這個url參數並將其返回給我的php文件(我使用$.getJSON時測試了js文件,並在網址中添加了lang=en,它工作正常,但我需要傳遞的語言)。

PHP

<?php 

    add_action('init', 'myprefix_autocomplete_init'); 
    function myprefix_autocomplete_init() { 
     // Register our jQuery UI style and our custom javascript file 
     wp_register_script('my_acsearch', get_template_directory_uri() . '/nectar/assets/functions/ajax-search/wpss-search-suggest.js?lang='.qtrans_getLanguage(), array('jquery','jquery-ui-autocomplete'),null,true); 
     wp_localize_script('my_acsearch', 'MyAcSearch', array('url' => 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' => '')) : '<i class="icon-salient-pencil"></i>' ; 

      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 $("<li>") 
     .append("<a>" + item.image + "<span class='title'>" + item.label + "</span><br/><span class='desc'>" + item.post_type + "</span> </a>") 
     .appendTo(ul); 
    }; 

}); 

我希望有人能幫助我這個

回答

0

即使它不是一個很好的解決方案,我想出了這個:

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); 
0

我找到了一個simplier解決辦法,但條件PHP是必要的(硬編碼的PHP文件中的腳本中使用條件語句):

相反的:

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

您可以使用:

var lang = '<?php echo qtrans_getLanguage(); ?>'; 
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) { 
<?php if (function_exists('qtrans_getLanguage')){ ?> 
      var lang = '<?php echo qtrans_getLanguage(); ?>'; 
      window.location.href=ui.item.link+'?lang='+lang; 
<?php }else{ ?> 
      window.location.href=ui.item.link; 
<?php } ?> 
     }, 
     minLength: 2, 
    }).data("ui-autocomplete")._renderItem = function(ul, item) { 
     return jQuery("<li>") 
     .append("<a>" + item.image + "<span class='title'>" + item.label + "</span></a>") 
     .appendTo(ul); 
    }; 

H操作它有幫助!