Если блог WordPress в папке

Wordpress Art by ?Dante; found at lorelle.files.wordpress.comСлучается, что блог (или „новостная лента“ — в общем, WordPress) лежит на сайте в одной папке (example.com/blog/ или example.com/novosti/wordpress), а вывести его записи надо среди прочего контента в другую папку или на главную страницу сайта (example.com, в корневой каталог как бы). Как это сделать быстро, умно и, по возможности, гибко?

Нашёл ответ не сразу, поэтому опубликую его здесь — может, кто-то мучает поисковик, как я полдня назад.

В одном месте даже рекомендуют парсить RSS блога. Но идея вычурная. На самом деле всё проще.

Доступ к движку Вордпресс лежит через файл wp-blog-header.php. Этот файл загружает Вордпресс и делает доступным нужные нам функции движка и содержимое блога. Если этот файл подключить на любой странице сайта, можно пользоваться любыми вордпрессовыми функциями.

Давайте добавим последние пять записей из блога (который у нас, допустим, в папке /blog) на главную страницу сайта. Если главная страница уже PHP-файл (обычно с расширением .php) — хорошо; но если это HTML-файл, надо переименовать index.html в index.php (не забудьте проверить, будут ли работать ссылки с других страниц сайта на главную).

Итак, в начале файла index.php (разумеется, это может быть любой другой файл сайта) включаем функции Вордпресса и намечаем, сколько записей нам пригодится:


<?php
// Включаем Вордпресс вне папки с ним
define('WP_USE_THEMES', false); // Темы оформления Вордпресса использовать не будем
require('./blog/wp-blog-header.php'); // Тот самый файл
query_posts('showposts=5'); // Заберём пять записей (число меняйте смело)
?>

Теперь спускаемся по коду и находим на странице то самое место, куда надо вывести последние записи из WordPress’а. Вписываем туда код вывода:


<?php while (have_posts()): the_post(); ?>
<h2><?php the_title(); ?></h2>
<a href="<?php the_permalink(); ?>" title="Читать полностью"><?php the_excerpt(); ?></a>
<?php endwhile; ?>

Этот код выведет пять последних записей из Вордпресса в виде заголовков и фрагментов текста (начало поста или вводка — ещё называемая лид или цитата — если она есть, но обычно люди не прописывают).

Что получилось с этим кодом у меня, можно посмотреть на «Добром слове». Там на WordPress работает архив опубликованных писем в папке log, а на главную статичную страницу выводятся последние несколько писем.

Второй код, конечно, можно менять в очень широких пределах. Например, если хочется, чтобы заголовки постов стали ссылками, надо написать так:


<?php while (have_posts()): the_post(); ?>
<a href="<?php the_permalink(); ?>" title="Читать полностью"><h2><?php the_title(); ?></h2></a>
<?php the_excerpt(); ?>
<?php endwhile; ?>

Бонус для тех, кого биржи вроде Sape называют веб-мастерами: контент из Вордпресса тем же механизмом можно импортировать с одного сайта на другой, если сайты на одном хостинге в одной учётной записи. Как это сделать:


<?php
// Включаем WordPress в начале статичной страницы
define('WP_USE_THEMES', false); // Темы оформления не нужны
// Внимание, фокус:
require('/var/www/example.com/blog/wp-blog-header.php');
query_posts('showposts=5'); // Заберём пять записей (число меняйте смело)
?>

Хорошая идея, правда?

Важная оговорка: у нас кириллическое письмо, поэтому надо проследить, чтобы кодировка статичной страницы и кодировка контента из Вордпресса совпадали. А то в Вордпрессах обычно utf8, а на „просто сайтах“ — windows-1251. В текстовом редакторе Notepad2 кодировка меняется через меню File / Encoding / UTF-8; при этом надо не забыть переписать в шапке html-файла строчку про кодировку на такую:

<meta http-equiv="Content-Type" content="text/html; charset=utf8" />

Извлекайте пользу.

Спасибо за идеи и код Кенну Уилсону из штата Орегон: было сложно сформулировать поисковый запрос и уже даже не помню, по какому я добрался до его записи… Что-то вроде „wordpress links on other page“.

Если блог WordPress в папке: 13 комментариев

  1. Блин, без матов просто не могу выразить свою благодарность!

    Твоя гениальность выше похвалы — щас наставлю себе ссылок на память, не смей убирать этот блог и этот пост!!!

  2. Стоп. С кодировкой бок — у меня огромная база… как сделать вывод записей из utf-8 и вставить их уже в 1251?

    1. Я по лени своей просто перевёл саму страницу, где вставляю куски из WordPress’а, в utf8.

      Но, разумеется, есть программные фишки для перекодирования строки в utf8 в строку в win1251. Стандартная функция вроде называлась iconv, но срабатывает она не всегда (как будто зависит от конфигурации PHP).

      $stroka = iconv('UTF-8', 'WINDOWS-1251', $win_stroka);
      // в первых кавычках исходная кодировка, во вторых — целевая,
      // потом переменная с кодируемым текстом.

      Если не поможет, дальше в Google :)

  3. А Вы не знаете, в чем может быть причина того, что не работает постраничная навигация? Вроде так по коду проверяю, все правильно, плагины уже все перепробовала, но все равно, после нажатия на предыдущую страницу адрес меняется, а содержание остается главной страницы. Замучилась уже :(

    1. У меня WP-PageNavi работает нормально. Сходите на страницу плагина (ссылка должна быть из раздела Плагины в админке вашего блога) — и там нажалуйтесь, если не получается.

  4. Все, сделала, проблема все-таки в коде была. добавила $query_string и все %)

  5. Спасибо за отличное решение! Но вот вопрос, как можно реализовать чтобы ссылка на пост выводилась в той же папке?

    Т.е. newfolder/index.php?p=1 должен выводиться пост 1, а выводятся пять постов как и просто если зайти на newfolder/

  6. здравствуйте!
    такой вопрос. мне необходимо вывести на главную страницу по одной записи трех рубрик. каким образом это сделать? знаю, как вывести несколько рубрик на страницу query_posts(«cat=1,2,3»), но в таком случае показывается то количество записей, которое стоит по умолчанию, то есть в моем случае 5 (2 записи одной рубрики+2 записи другой+1 запись третьей). знаю, как выводить отдельный пост определенной рубрики query_posts(‘cat=1&showposts=1’), а как совместить это, ума не приложу.. помогите, пожалуйста!

  7. Такой простой вопрос — Пишу значит:

    До стоки query_posts(‘showposts=5’);
    всё работает нормально

    Как только я её ввожу, всё слетает.

    Сделал тест на ошибку — выдаёт — Fatal error: Call to undefined function query_posts() in /home/n/naikomru/public_html/x/sidebar.php on line 39

    Копировал чисто ваш код.
    В чём ошибка?

  8. Подскажите пожалуйста как вывести на главной сайта последние 10 или 20 записей вместе с рубриками, в которых те расположены.

  9. А возможен ли вывод записей с миниатюрами? Как для этого нужно изменить код?

  10. Подскажите а как вывести определенную рубрику таким образом? Или записи определенного автора?

Обсуждение закрыто.