Постинг в WordPress из Git

GITЭтот пост я пишу совсем не в маленьком окошке TinyMCE, а в удобном Sublime Text 2. Более того, чтобы запостить его в блог, мне даже не придется заходить в админку. Пост автоматически появится на странице, когда я сделаю push в git репозиторий. А если я захочу что-то исправить, то опять же, достаточно будет сделать push, и пост будет автоматически исправлен.

Идея, в общем, не нова, многие слышали про Octopress, или блог bobuk’а, которые тоже работают через git. Правда вот никакого похожего плагина для WordPress я не нашел. Только на одном из сайтов, на вопрос «А можно ли постить в блог через git?» ответили «…this is a massive job for what seems like a very small payoff…». Ну что ж, никому не надо, а мне надо.

Будущую систему я назвал blocto, от слов blog и octo (от Octopus, подразумевая Github, хотя он не используется). Сами посты я решил хранить в статических файлах. Изначально это должны быть Markdown файлы, но я отказался от этой идеи из-за сложности в синхронизации постов. Я использую следующий формат файла:

tags: теги, разделенные, запятыми categories: категории, разделенные, запятыми type: тип поста (пост или страница) author: id автора post_status: статус поста (черновик, опубликованный) comment_status: статус комментариев (открыты или закрыты) title: Заголовок поста     Содержимое идет после двух пропущенных строк.

Само имя файла является идентификатором, и одновременно URI поста. Эти файлы находятся в git репозитории, так что я получаю версионность, а так же своего рода бекап. Я всегда смогу еще раз импортировать все эти файлы в Вордпесс.

Итак, доставка файлов на сервер реализуется с помощью пуша. В git присутствует отличная фича, которая называется хуки (hooks). Можно написать скрипт, который будет выполняться перед коммитом, после коммита, в разные другие моменты, в том числе после пуша. Я создал файл .git/hooks/post-receive, который является шелл скриптом, выполняемым при получении данных. Соответственно все, что нам нужно в нем сделать, это обновить файлы и запустить импорт, поэтому скрипт выглядит так:

#!/bin/sh GIT_WORK_TREE=/home/viktoras/blocto git checkout -f php /home/viktoras/blocto/sync.php

Оставалось написать сам скрипт для импорта. Проще всего использовать API самого WordPress, подключив файл wp-load.php. Тогда не придется вручную подключаться к базе. Скрипт можно посмотреть на Github. Скрипт распространяется под MIT лицензией. Это еще сырая альфа версия, и можно его много чего улучшать и добавлять.

Теперь, написание нового поста выглядит так:

touch posts/new-post.md edit posts/new-post.md git add -u git commit -m “New post” git push wordpress master

Пост, который вы только что прочитали, был сделан именно таким образом.

Leave a Reply

Your email address will not be published. Required fields are marked *