reStructuredTextでwordpress投稿

wordpressでreStructuredText

wordpressはとっても最高なCMSだけども、reStructuredTextで書けないために使用を断念することも多いかと思います。

そこで、ちょっと探してみたところ WordPreSt reStructuredText Plugin For WordPress ↯ xdissent.com というプラグインがありました。
しかし、残念なことに新しめのwordpressではうまく動かないようです。

そこでちょっといじってみて、とりあえず投稿できるようにはなりました。これもそのプラグインを使って投稿してみました。

しかし山ほど問題が。。。

エディタボタン周りの処理

問題というか、単にwordpressの仕組みをわかってないだけなんですが、元々のwordprestだと:

add_action('edit_form_advanced', array(__CLASS__, 'addRestEditor'));

という処理で、エディタの選択ボタンにRestを追加する処理があって、そこでは、ob_get_cleanでバッファを取ってきてエディタのコードを置換する。

しかし、現在のwordpressではその時点のバッファにはエディタのコードが含まれていないみたい。なので別のタイミング(action)か別の方法でやらないとだめなんだろうけど、さぱーりわからない。

きっと同じような仕組みで、markdownあたりのプラグインはありそうなので、そこらへんを漁ってみたら参考になるかも。

というところでおしまい。今はwordpressのclass-wp-editor.phpをいじって動かしてます。

他にもうまく保存できなかったりとか大問題が色々あるけど、そのうち・・・

code

diff --git a/wp-includes/class-wp-editor.php b/wp-includes/class-wp-editor.php
index f057f5f..738b15e 100644
--- a/wp-includes/class-wp-editor.php
+++ b/wp-includes/class-wp-editor.php
@@ -78,6 +78,9 @@ final class _WP_Editors {

                        if ( 'html' == wp_default_editor() ) {
                                add_filter('the_editor_content', 'wp_htmledit_pre');
+                       } elseif ( 'rest' == wp_default_editor() ) {
+                               add_filter('the_editor_content', 'wp_htmledit_pre');
+                               $switch_class = 'rest-active';
                        } else {
                                add_filter('the_editor_content', 'wp_richedit_pre');
                                $switch_class = 'tmce-active';
@@ -85,6 +88,7 @@ final class _WP_Editors {

                        $buttons .= '<a id="' . $editor_id . '-html" class="hide-if-no-js wp-switch-editor switch-html" onclick="switchEditors.switchto(this);">' . __('HTML') . "</a>\n";
                        $buttons .= '<a id="' . $editor_id . '-tmce" class="hide-if-no-js wp-switch-editor switch-tmce" onclick="switchEditors.switchto(this);">' . __('Visual') . "</a>\n";
+                       $buttons .= '<a id="' . $editor_id . '-rest" class="hide-if-no-js wp-switch-editor switch-rest" onclick="switchEditors.switchto(this);">' . __('Rest') . "</a>\n";
                }

                echo '<div id="wp-' . $editor_id . '-wrap" class="wp-editor-wrap ' . $switch_class . '">';

もっと勉強しないとダメですね・・・。