2013-12-09 6 views
0

Я использую wordpress с qTranslate и настраиваемой темой. Тема сопровождается поиском автозаполнения. Моя проблема в том, что заголовки сообщений/страниц не переведены. Я проверил stackoverflow/google и, похоже, возникла проблема с запросами AJAX и qTranslate. Вот почему я добавил к параметру URL-адрес моего файла PHP следующее:Проблемы с Wordpress с qTranslate и AJAX

?lang='.qtrans_getLanguage() 

Я проверил консоль и параметр передается правильно (для каждого языка) для файла JavaScript. Теперь мне нужно прочитать этот параметр url и вернуть его в свой php-файл (я тестировал файл js с добавлением lang=en к URL-адресу при использовании $.getJSON, и он работал, но мне нужен переданный язык).

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

Я нашел проще обойти, но условно РНР необходимо (жёстко сценарий внутри файла 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 Это помогает!

Смежные вопросы