azerphoenix
@azerphoenix
Java Software Engineer

Как создать мультиязычную алфавитную пагинацию (глоссарий) для WP?

Пытаюсь создать мультиязычную алфавитную пагинацию для WP. Для мультиязычности использую WPML плагин. Нашел небольшое решение в сети и решил попробовать у себя.
Результат, который я получил - ссылка

Но есть проблемы. При дебаге (если нажать на любую букву) в консоли получаю ошибку:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data


В чем моя ошибка? Заранее благодарю)

Ниже представлен весь код, который я использовал для этого:
Подключую скрипт через functions для специфичных страниц
function get_ajax_url() {
    wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/alphabet.js', array('jquery') );

    wp_localize_script("alphabetJS", "ajaxurl", admin_url("admin-ajax.php"));  
}
add_action( 'wp_enqueue_scripts', 'get_ajax_url' );


Содержимое скрипта alphabet.js
jQuery(document).ready(function($) 
  {
    jQuery('.alphabet').click(function(){
      var data = {
        action: 'get_by_char',
        char: this.id
      };

      jQuery.post(ajaxurl, data, function(response) {

        $("#abc-drugs").html('');

        $.each($.parseJSON(response), function() {
          var they = this;

            $("#abc-drugs").append
            (
              '<li class="drug">' + 
                '<a href="' + they.url + '">' +
                  '<h2 class="md7_drug_title">' + they.title + '</h2>' + 
                '</a>' +
               '</li>'
            );
        });

          if(response.length < 3){
          $("#abc-drugs").html('<div class="no-drug-array">Препаратов не найдено</div>');
          };

      });
    })
  });


Далее добавил в functions.php
function get_by_char_callback() 
{    
    global $wpdb;
    $b=array();
    $char=$_POST['char'];

    $a=$wpdb->get_results('SELECT post_title,ID FROM wpwv_posts where post_type="drug" and post_status="publish"  and (post_title like "[:ru]'.$char.'%" or post_title like "%[:en]'.$char.'%" or post_title like "'.$char.'%") ',ARRAY_A  );       

    foreach ($a as $key => $value) 
    {       

        $b[$key]['title']=translate($value['post_title']);
    }
    echo json_encode($b);
    wp_die(); 
}

add_action('wp_ajax_get_by_char', 'get_by_char_callback');
add_action('wp_ajax_nopriv_get_by_char', 'get_by_char_callback');


Код, который я вывожу в шаблоке страницы:
<div class="alphabet-wrap">
                  <?php 
                    $alphabet=array(
                            'ru_RU'=>array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','э','ю','я'),
                            'en_US'=>array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'),
                            'de_DE'=>array('a','ä','b','c','d','e','f','g','h','i','j','k','l','m','n','o','ö','p','q','r','s','ß','t','u','ü','v','w','x','y','z'),

                          );
                    foreach ($alphabet[get_locale()] as $key => $value):
                  ?>
                  <span id="<?=$value?>" class="alphabet"><?=$value?></span>
                  <?php endforeach;?>
                </div>


                  <ul class="drugs" id="abc-drugs">
                    <?php $args = array(
                        'post_type' => 'drug',
                        'posts_per_page' => -1
                        );
                      $loop = new WP_Query( $args );
                      if ( $loop->have_posts() ) {
                        while ( $loop->have_posts() ) : $loop->the_post(); ?>
                          <a href="<?php the_permalink() ?>"><?php the_title() ?></a>
                        <?php endwhile;
                      } else {
                        echo __( 'Препаратов не найдено' );
                      }
                      wp_reset_postdata();
                    ?>
                  </ul>
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
lidacriss
@lidacriss
wtf
azerphoenix, в этом месте
jQuery.post(my_ajax_object.ajaxurl, data, function(response) {

в my_ajax_object.ajaxurl
должен быть урл вида
/wp-admin/admin-ajax.php

возможно, на другом сайте в коде объявлен объект my_ajax_object со свойством ajaxurl в котором как раз таки путь к файлу /wp-admin/admin-ajax.php
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы