Добрый день.
Есть задача – вывести последнее сообщение на странице сайта (вне блога) и несколько последних комментариев. С первой частью я разобрался, а вот вторую побороть не могу.
Вот код, которым выводится последнее сообщение:
<?php
// Include WordPress
define('WP_USE_THEMES', false);
require('./ПАПКА БЛОГА/wp-blog-header.php');
query_posts('showposts=1');
?>
<?php while (have_posts()): the_post(); ?>
<p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br /><?php the_content(); ?></p>
<?php endwhile; ?>
Как добавить вывод комментариев к этому сообщению?
вероятно сходить сюда и поизучать:
http://codex.wordpress.org/Template_Tags#Comment_tags
Как оформить непосредственно вывод я разберусь – это не проблема. Можно взять из любого скина и оформить как нужно.
Непонятно, как получить комменты. Что-то вроде get_comment или как? Я практически незнаком с ВП
<? wp_widget_recent_comments() ?>
Это не работает _вне_ блога. Либо я не смог верно подключить. Может подскажете, как это подключается?
Вот в скине есть строка
Откуда берется значение переменной comments? Как мне его получить?
:rolleyes:
Извините, я Вашего языка не понимаю.
Есть сайт site.ru, есть блог на ВП site.ru/blog/.
Надо на странице сайта вывести тему с блога с комментариями.
Предложенная Вами конструкция выдает ошибку о необходимости подключения дополнительных файлов движка.
Сейчас мне нужно только получить значение переменной comments. Подскажите, как мне это сделать или, хотя бы, где можно в кодах покопаться? На кодексе я про комментарии не смог найти ничего полезного
Только два пути: либо подключать весь движок (это большой цельный комплекс, а не куча мелких скриптов), либо писать свой скрипт, работающий напрямую с базой.
http://forum.maxsite.org/viewtopic.php?id=1604
http://forum.maxsite.org/viewtopic.php?id=7391
Эти ссылки дают ответ только на вопрос "Как вывести сообщения?". Код, который я привел в первом сообщении делает это намного лучше и проще. Да и гибкость настройки позволяет сделать более удобную форму вывода.
Только мне одно непонятно: если я этим кодом могу вывести сообщения и, при добавлении строки
, количество комментариев, то почему я не могу также ловко вывести сам текст комментариев?
Чего мне не хватает, как можно это дело решить?
Вот, к примеру есть тэг comment_text();
Как мне его использовать, чтобы я мог получить комментарии к текущему сообщению?
Как организовать цикл в моём конкретном случае?
Вы случайно не обратили внимание, что в Темах форма комментариев вынесена в отдельный шаблон и что она подключается не инклюдом, а вызовом comments_template()? Если обратили, то могли бы посмотреть, что эта функция делает, кроме как подключает шаблон. А она как раз и заполняет массив $comments, который… короче, смотрите коды движка, если уж взялись программировать под него.
Хорошо. Попробуем подойти с другой стороны.
Предложенный Вами <? wp_widget_recent_comments() ?>
Выдает такую картину:
Вопрос:
Какой формат использования этой функции, где можно изучить ее работу?
И можно ли с помощью этой функции вывести непосредственно текст комментария? (Судя по коду wp-includes/widgets.php – нельзя)
Изучить можно в /wp-includes/widgets.php 😀
А то возьмите какой-нибудь плагин из серии last/recent comments и выдерите из него код.
Как это я сразу не догадался 🙂
Вот такой получился код:
Проблема только в том, что выдаются все последние комментарии, а надо ограничить их одной темой, т.е. чтобы выдавались комментарии только из одного сообщения – того, которое выводится кодом нижней части. Как нужно модифицировать функцию mdv_recent_comments, чтобы поставить такое ограничение?
Смотрим, где функция берет инфу:
SELECT … FROM $wpdb->comments ….
Смотрим структуру таблицы и видим среди прочего поле comment_post_ID. Добавляем в SELECT условие:
… WHERE comment_post_ID=XXX AND post_status IN …
где XXX – номер поста, комментарии к которому нас интересуют.
Разумеется, с тем же успехом это условие можно дорисовать в строке $request .= "AND …
Если номер поста заранее неизвестен и меняется каждый раз, то его можно передать как параметр функции mdv_recent_comments.
Все понял, но вот как передать номер поста – не могу понять. Никак не получается
function mdv_recent_comments($post_ID=0, $no_comments = 4, …
…
… comment_post_ID=$post_ID …
…
<? mdv_recent_comments(get_the_ID()) ?>
Вот это мне и надо было. Я использовал the_ID(), поэтому ничего и не получалось.
Большое спасибо. Теперь все работает в лучшем виде. Можете эту тему в FAQ закинуть, наверняка еще кому-то пригодится.
Всё равно не найдут 😀
У меня еще вопрос возник.
ВП выдает все в кодировке utf-8, что естественно. А остальной текст страницы, на которой выводится результат работы этого кода – win-1251.
Как перекодировать вывод? iconv почему-то не помогает
Использовал так:
<?php echo iconv("utf-8", "windows-1251", the_title()); ?>
Результат не меняется
Потому что the_title() ВЫВОДИТ заголовок, а не возвращает его. Тут нужна функция get_the_title().
Спасибо.
Подскажите, где можно найти наиболее полный список всех функций с описанием работы. На кодексе далеко не все можно найти
Полный список функций – внутри движка 🙂