Как заставить WordPress генерировать пользовательский XML-файл (не карту сайта), который обновляется только при публикации нового контента?

13 янв. 2011 г., 01:31:27
Просмотры: 14K
Голосов: 1

Мне нужна не карта сайта, а XML-файл, который сможет использовать Flash-меню. Но я не хочу генерировать XML при каждом посещении страницы — нужен статический файл для скорости. Хочу, чтобы WordPress обновлял этот файл только при публикации нового контента (не комментариев).

Есть ли в WordPress встроенные возможности для этого? Или может есть плагины? Еще раз подчеркну — мне нужен не sitemap, а конкретный список элементов. Сейчас я использую шаблоны страниц с пользовательскими циклами, но генерация занимает слишком много времени.

1
Комментарии

Смотрите мой ответ по этой ссылке, он дан в соответствии с данным вопросом: http://wordpress.stackexchange.com/questions/15218/how-to-generate-update-a-xml-sitemap-without-plugins/36856#36856

w3uiguru w3uiguru
19 дек. 2011 г. 12:45:11
Все ответы на вопрос 3
0

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

13 янв. 2011 г. 02:51:44
1

Взгляните на функцию export_wp.

Создайте её копию и оставьте только то, что вам нужно экспортировать, затем запускайте эту функцию каждый раз при сохранении записи: add_action('save_post', 'my_export_wp');

(Настройте функцию так, чтобы она отправляла вывод в XML-файл)

13 янв. 2011 г. 04:22:16
Комментарии

Этот файл выглядит немного пугающим. Думаю, я остановлюсь на предыдущем предложении

Ghost9 Ghost9
13 янв. 2011 г. 08:52:55
5

Хм... не уверен, есть ли в WordPress специальные функции для создания файлов. Есть wp_handle_upload, но я не уверен, как её можно использовать в данном контексте.

В зависимости от конфигурации сервера, вы, вероятно, можете просто использовать fopen и fwrite для этого.

Оставьте код, который вы используете сейчас (с вашими пользовательскими циклами... я предполагаю, что они содержат XML-разметку, которую вы хотите), но пусть он формирует вывод в виде строки. Затем сохраните эту строку в файл. Что-то вроде:

// Формируем содержимое файла в виде строки
$file_contents = '<?xml version="1.0" ?><yourroot><item>некоторый контент</item></yourroot></xml>';

// Открываем или создаем файл (в той же директории, что и скрипт)
$my_file = fopen("myfile.xml", "w");

// Записываем содержимое строки в файл
fwrite($my_file, $file_contents);

// Закрываем файл
fclose($my_file);

Конечно, всё это зависит от конфигурации сервера и прав доступа. Возможно, у кого-то есть лучшее решение с использованием только нативных функций WordPress.

13 янв. 2011 г. 02:18:19
Комментарии

часть "сформировать вывод в виде строки" мне не совсем понятна. Должен ли я указать URL как $file_contents = http://blog.com/sitetemplate

Ghost9 Ghost9
13 янв. 2011 г. 02:58:37

как сделать так, чтобы этот файл вызывался каждый раз, когда кто-то публикует запись?

Ghost9 Ghost9
13 янв. 2011 г. 03:13:45

а! получил ответ на этот вопрос. Теперь мой единственный вопрос: можно ли задать путь сохранения? чтобы я мог выбрать директорию, в которую сохраняется файл?

Ghost9 Ghost9
13 янв. 2011 г. 05:45:12

Конечно. fopen должен уметь принимать полный локальный путь (например, var/www/html/ваша_папка_сайта/другая_папка/ваш_файл.xml). Разумеется, это будет зависеть от наличия правильных прав на запись в эту папку.

MathSmath MathSmath
13 янв. 2011 г. 06:39:08

вы можете сделать это с помощью одной функции: file_put_contents(); - http://php.net/manual/en/function.file-put-contents.php

hakre hakre
23 янв. 2011 г. 03:02:50