Поддержка Плагины WordPress ajax->php request

  • Прошу прощение если подобная тема уже существует, но решения я не нашел( в пхп я новичок).
    Суть проблемы:
    Когда я использую этот код в обычной комбинации html файл + include php файл, все отлично работает выборка из бд происходит по нажатому дню, все супер, Но когда я переношу это в вордпресс то он возвращает всегда что переменная не определена либо alert(data) возвращает 0 на какой бы день не нажал. Ковыряю третий день… прошу помощи, а то нервная система дает сбой ) Спасибо всем заранее !!

    **Все это один файл плагина
    **джаваскрипт генерирую в этом же файле(коментами выделил)

    function draw_calendar($month, $year)
      {
          $month = date('m');
          $year = date('y');
          $calendar = '<table class="calendar">';
          $headings = array('S', 'M', 'T', 'W', 'T', 'F', 'S');
          $calendar .= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">', $headings).'</td></tr>';
          $running_day = date('w', mktime(0, 0, 0, $month, 1, $year));
          $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
          $days_in_this_week = 1;
          $day_counter = 0;
          $dates_array = array();
          $calendar .= '<tr class="calendar-row">';
          for ($x = 0; $x < $running_day; ++$x) {
              $calendar .= '<td class="calendar-day-np"> </td>';
              ++$days_in_this_week;
          }
          for ($list_day = 1; $list_day <= $days_in_month; ++$list_day) {
              $calendar .= '<td class="calendar-day"><div class="day-number"><a style="cursor:pointer;" onClick="relDaySerial('.$list_day.');">'.$list_day.'</a></div></td>';
              if ($running_day == 6) {
                  $calendar .= '</tr>';
                  if (($day_counter + 1) != $days_in_month) {
                      $calendar .= '<tr class="calendar-row">';
                  }
                  $running_day = -1;
                  $days_in_this_week = 0;
              }
              ++$days_in_this_week;
              ++$running_day;
              ++$day_counter;
          }
          if ($days_in_this_week < 8) {
              for ($x = 1; $x <= (8 - $days_in_this_week); ++$x) {
                  $calendar .= '<td class="calendar-day-np"> </td>';
              }
          }
          $calendar .= '</tr>'.'</table>';
    
          return $calendar;
      }
    
    function get_serials($day)
    {
        if ($_POST['relDaySerial'] === null) {
            $day = date('d');
        } else {
            $day = $_POST['relDaySerial'];
        }
    
        global $wpdb;
        $result = $wpdb->get_results("SELECT * FROM tvt_calendar WHERE day=$day");
        foreach ($result as $value) {
            echo "
          <table id='cal-data'>
            <tr>
              <td class='calendar-day-head'>TV Show</td>
              <td class='calendar-day-head'>S</td>
              <td class='calendar-day-head'>E</td>
            </tr>
            <tr class='cal-content'>
              <td><a href='#'>".$value->title.'</a></td>
              <td>'.$value->season.'</td>
              <td>'.$value->series.'</td>
            </tr>
          </table>
            ';
        }
    }
    function my_action_javascript() //это пхп функция
      {
    function relDaySerial(id) {
        jQuery.ajax({
          type:'POST',
          url:ajaxurl,
          data:{relDaySerial:id},
        success:function(data) {
          if(relDaySerial.type == "success") {
             alert(jQuery('#cal-bottom').html(data))
          }
          else {
             alert(data)
           }
        }});
      }
      } //конец пхп
    add_action('wp_footer', 'my_action_javascript');
      add_action('wp_ajax_my_action_javascript', 'my_action_javascript');
      add_action('wp_ajax_nopriv_my_action_javascript', 'my_action_javascript');
Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Весь код пока не проверял, но навскидку вижу четыре проблемы:

    • К действиям wp_ajax_* нужно привязывать не JavaScript-код, а PHP-функцию, которая выводит контент, т.е. в вашем случае get_serials():
      add_action( 'wp_ajax_get_serials', 'get_serials' );
      add_action( 'wp_ajax_nopriv_get_serials', 'get_serials' );

      Перечитайте внимательнее примеры со страницы «AJAX in Plugins».

    • В конце get_serials() нужен вызов wp_die(), чтобы прервать выполнение скрипта после вывода.
    • В запросе jQuery.ajax не хватает параметра action: 'get_serials' — именно он указывает, какую функцию вызвать на сервере.
    • В my_action_javascript() мешанина из PHP- и JavaScript-кода, там должен быть тег <script> (если его «съел» форум — используйте кнопку «code», чтобы код вставлялся правильно).

    Большое спасибо за столь ясные ответы!!
    Но увы результат пока тот же… если не трудно, прошу помочь разобраться ) Потому что самому не получается решить проблему (

    Измененный код

    function draw_calendar($month, $year)
      {
          $month = date('m');
          $year = date('y');
          $calendar = '<table class="calendar">';
          $headings = array('S', 'M', 'T', 'W', 'T', 'F', 'S');
          $calendar .= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">', $headings).'</td></tr>';
          $running_day = date('w', mktime(0, 0, 0, $month, 1, $year));
          $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
          $days_in_this_week = 1;
          $day_counter = 0;
          $dates_array = array();
          $calendar .= '<tr class="calendar-row">';
          for ($x = 0; $x < $running_day; ++$x) {
              $calendar .= '<td class="calendar-day-np"> </td>';
              ++$days_in_this_week;
          }
          for ($list_day = 1; $list_day <= $days_in_month; ++$list_day) {
              $calendar .= '<td class="calendar-day"><div class="day-number"><a style="cursor:pointer;" onClick="relDaySerial('.$list_day.');">'.$list_day.'</a></div></td>';
              if ($running_day == 6) {
                  $calendar .= '</tr>';
                  if (($day_counter + 1) != $days_in_month) {
                      $calendar .= '<tr class="calendar-row">';
                  }
                  $running_day = -1;
                  $days_in_this_week = 0;
              }
              ++$days_in_this_week;
              ++$running_day;
              ++$day_counter;
          }
          if ($days_in_this_week < 8) {
              for ($x = 1; $x <= (8 - $days_in_this_week); ++$x) {
                  $calendar .= '<td class="calendar-day-np"> </td>';
              }
          }
          $calendar .= '</tr>'.'</table>';
    
          return $calendar;
      }
    
    function get_serials($day)
    {
        if ($_POST['relDaySerial'] === null) {
            $day = date('d');
        } else {
            $day = $_POST['relDaySerial'];
        }
    
        global $wpdb;
        $result = $wpdb->get_results("SELECT * FROM tvt_calendar WHERE day=$day");
        foreach ($result as $value) {
            echo "
          <table id='cal-data'>
            <tr>
              <td class='calendar-day-head'>TV Show</td>
              <td class='calendar-day-head'>S</td>
              <td class='calendar-day-head'>E</td>
            </tr>
            <tr class='cal-content'>
              <td><a href='#'>".$value->title.'</a></td>
              <td>'.$value->season.'</td>
              <td>'.$value->series.'</td>
            </tr>
          </table>
            ';
        }
    }
      function my_action_javascript()
      {
          ?>
      	<script type="text/javascript" >
        function relDaySerial(id) {
          jQuery.ajax({
            action:'get_serials',
            type:'POST',
            url:ajaxurl,
            data:{relDaySerial:id},
          success:function(data) {
            if(relDaySerial.type == "success") {
               alert(jQuery('#cal-bottom').html(data))
            }
            else {
               alert()
             }
          }});
        }
      	</script>
      	<?php
    
      }
    
      add_action('wp_footer', 'my_action_javascript');
      add_action('wp_ajax_get_serials', 'get_serials');
      add_action('wp_ajax_nopriv_get_serials', 'get_serials');
    
    ?>

    Вообще это виджет, но пока это просто плагин а в виджетах я поставил phpcode виджет и в нем вызываю нужные мне функции.
    Тут указал функцию с дивом для вывода, забыл это сделать раньше… )

    function get_serials($day)
    {
        if ($_POST['relDaySerial'] === null) {
            $day = date('d');
        } else {
            $day = $_POST['relDaySerial'];
        }
    
        global $wpdb;
        $result = $wpdb->get_results("SELECT * FROM tvt_calendar WHERE day=$day");
        foreach ($result as $value) {
            echo "
           <div id='cal-bottom'>
          <table id='cal-data'>
            <tr>
              <td class='calendar-day-head'>TV Show</td>
              <td class='calendar-day-head'>S</td>
              <td class='calendar-day-head'>E</td>
            </tr>
            <tr class='cal-content'>
              <td><a href='#'>".$value->title.'</a></td>
              <td>'.$value->season.'</td>
              <td>'.$value->series.'</td>
            </tr>
          </table>
         </div>
            ';
        }
    }

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «WordPress ajax->php request» закрыта для новых ответов.