Функции ВП и аякс

Сделал небольшой аякс наворот. Типа выпдающее меню с рубриками. После выбора рубрики без перезагрузки страницы открываются последние новсти из данной рубрики. Сам аякс-код выглядит так

<script type="text/javascript">
function showNews(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","<?php bloginfo('stylesheet_directory'); ?>/getnews.php?q="+str,true);
xmlhttp.send();
}
</script>

А в файле темы getnews.php лежит простой цикл, в который подставляетя преданный через GET номер рубрики.

Все хорошо, только почему при такои использовании функции типа get_post и вообще все функции цикла якобы не существуют!

Насколько я понял, при использовании аякса надо делать какие-то хуки-хаки, но я не понимаю принципа их работы и сам разобраться не смог, Может кто-тоо шарит? 🙂

А в файле темы getnews.php лежит простой цикл, в который подставляетя преданный через GET номер рубрики. 
Все хорошо, только почему при такои использовании функции типа get_post и вообще все функции цикла якобы не существуют!

Думаете, достаточно положить файл в директорию Темы, чтобы движок догадался, что ему надо работать с этим файлом? Ага, щаз. Либо подключайте движок через require( ‘../../../../wp-load.php’ ), либо создавайте якобы страницу, цепляйте ей в качестве шаблона свой скрипт (хедеры/футеры, разумеется, там не нужны) и ее вызывайте аяксом.

1. Там четко указано <?php bloginfo(‘stylesheet_directory’); ?>/getnews.php
2. Работает. Проверял на простом выводже текста. Проблемы начались когда попробовал использовать ВП-функции

Перечитайте еще раз, что я написал.

Воооооооот блииииин!

А я уже сделал по-другому.

Отсылку запроса переписал на

xmlhttp.open("GET","/wp-admin/admin-ajax.php?action=hotnews&q="+str, true);

А в функции добавил

function implement_ajax() {
    if(isset($_GET['q']))
                {
                   
                $posts_new = get_posts('category=3&numberposts=5');
                foreach ($posts_new as $post_new) :
                setup_postdata($post_new);
                    echo '<p><a href="'; 
                    echo get_permalink($post_new->ID);
                    echo '">';
                    echo $post_new->post_title;
                    echo '</a>';
                    echo '</p>';
                endforeach;
                  }         
    }
    add_action('wp_ajax_hotnews', 'implement_ajax');
    add_action('wp_ajax_nopriv_hotnews', 'implement_ajax');

И работает! Правда, там после всего полученного контента зачем-то нолик вываливается (намекает наверное что в JS таким полным нулям как я делать нечего 🙂 ), поэтому завтра еще попробую вернутся к первоначальному способу. используя ваши подсказки. Спасибо!

Посмотрите в Кодексе, там есть здоровенная статья про использование Аякса. Я не читал 🙂

Anonymous
Отправить
Ответ на: