Понадобилось недавно сделать функционал добавления/редактирования постов прямо из клиентской части Wordpress. Основной проблемой оказалось включение визуального редактора. Гугл упрямо выдавал устаревшие и откровенно не работающие варианты.
Вообще редактор подключается функцией the_editor(), однако, чтобы она заработала, надо немного потанцевать с бубном.
1. Пишем функцию для вывода нужных скриптов и стилей в заголовке страницы
(можно ее засунуть например в файл functions.php вашей темы)
2. Для нужной страницы вешаем фильтр
add_filter('wp_head','ugc_content');
(у меня используется отдельный шаблон для формы)
3. Собственно, выводим сам редактор
4. После этого на странице появится стандартный wysiwyg, однако имеет место проблема с медиа-панелью — иконки не отображаются, ссылки левые.
Лечится просто — файл wp-admin/include/media.php
функция media_buttons()
и прописываем там полные пути к картинкам и ссылкам, напр. так
Все.
Возможные проблемы:
поскольку используются стили из админ-панели, то возможны нежелательные эффекты на странице. Можно сделать для себя новые стили из системных
Также используется jQuery, так что, если в вашей теме он тоже используется, позаботьтесь, чтобы не было конфликта версий.
Работает в версиях WP 2.7 и 2.8
Вообще редактор подключается функцией the_editor(), однако, чтобы она заработала, надо немного потанцевать с бубном.
1. Пишем функцию для вывода нужных скриптов и стилей в заголовке страницы
- <?php
- function ugc_content(){
- $user_info = wp_get_current_user();
- $time = time();
- require ( 'wp-admin/includes/post.php' );
- require ( 'wp-admin/includes/media.php' );
- require ( 'wp-admin/custom-header.php' );
- wp_admin_css();
- wp_admin_css('colors-fresh'); // здесь могут быть проблемы с перекрытием CSS в разных темах. Желательно сделать свой
- wp_admin_css('thickbox');
- wp_print_scripts('jquery-ui-core'); // если в теме используется jquery - надо предусмотреть его отключение на этой странице
- wp_print_scripts('jquery-ui-tabs');
- $host = $_SERVER['SERVER_NAME'];
- // тут выводятся настройки
- echo <<<SCRIPT
- <script type='text/javascript'>
- /* <![CDATA[ */
- userSettings = {
- url: "/",
- uid: "{$user_info->ID}",
- time: "{$time}"
- }
- /* ]]> */
- </script>
- <script type='text/javascript'>
- /* <![CDATA[ */
- postboxL10n = {
- requestFile: "http://{$host}/wp-admin/admin-ajax.php"
- }
- /* ]]> */
- </script>
- SCRIPT;
- // вот это мне не нравится никак :(
- global $wp_version;
- if ( $wp_version >= 2.8 ) // начиная с версии 2.8
- echo "<script type='text/javascript' src='http://{$host}/wp-admin/js/utils.js?ver=20081129'></script>";
- echo <<<SCRIPT
- <script type='text/javascript' src='http://{$host}/wp-admin/js/common.js?ver=20081129'></script>
- <script type='text/javascript' src='http://{$host}/wp-admin/js/editor.js?ver=20081129'></script>
- <script type='text/javascript' src='http://{$host}/wp-includes/js/thickbox/thickbox.js?ver=3.1-20090123'></script>
- <script type='text/javascript' src='http://{$host}/wp-admin/js/media-upload.js?ver=20081210'></script>
- SCRIPT;
- wp_print_scripts('comment');
- wp_print_scripts('editor');
- add_thickbox();
- wp_tiny_mce();
- }
- ?>
* This source code was highlighted with Source Code Highlighter.
(можно ее засунуть например в файл functions.php вашей темы)
2. Для нужной страницы вешаем фильтр
add_filter('wp_head','ugc_content');
(у меня используется отдельный шаблон для формы)
3. Собственно, выводим сам редактор
- <div id="poststuff" class="metabox-holder">
- <?=the_editor()?>
- </div>
* This source code was highlighted with Source Code Highlighter.
4. После этого на странице появится стандартный wysiwyg, однако имеет место проблема с медиа-панелью — иконки не отображаются, ссылки левые.
Лечится просто — файл wp-admin/include/media.php
функция media_buttons()
и прописываем там полные пути к картинкам и ссылкам, напр. так
-
- function media_buttons() {
- global $post_ID, $temp_ID;
- $uploading_iframe_ID = (int) (0 == $post_ID ? $temp_ID : $post_ID);
- $context = apply_filters('media_buttons_context', __('Upload/Insert %s'));
- $media_upload_iframe_src = "/wp-admin/media-upload.php?post_id=$uploading_iframe_ID";
- $media_title = __('Add Media');
- $image_upload_iframe_src = apply_filters('image_upload_iframe_src', "$media_upload_iframe_src&type=image");
- $image_title = __('Add an Image');
- $video_upload_iframe_src = apply_filters('video_upload_iframe_src', "$media_upload_iframe_src&type=video");
- $video_title = __('Add Video');
- $audio_upload_iframe_src = apply_filters('audio_upload_iframe_src', "$media_upload_iframe_src&type=audio");
- $audio_title = __('Add Audio');
- $out = <<<EOF
-
- <a href="{$image_upload_iframe_src}&TB_iframe=true" id="add_image" class="thickbox" title='$image_title' onclick="return false;"><img src='/wp-admin/images/media-button-image.gif' alt='$image_title' /></a>
- <a href="{$video_upload_iframe_src}&TB_iframe=true" id="add_video" class="thickbox" title='$video_title' onclick="return false;"><img src='/wp-admin/images/media-button-video.gif' alt='$video_title' /></a>
- <a href="{$audio_upload_iframe_src}&TB_iframe=true" id="add_audio" class="thickbox" title='$audio_title' onclick="return false;"><img src='/wp-admin/images/media-button-music.gif' alt='$audio_title' /></a>
- <a href="{$media_upload_iframe_src}&TB_iframe=true" id="add_media" class="thickbox" title='$media_title' onclick="return false;"><img src='/wp-admin/images/media-button-other.gif' alt='$media_title' /></a>
-
- EOF;
- printf($context, $out);
- }
-
* This source code was highlighted with Source Code Highlighter.
Все.
Возможные проблемы:
поскольку используются стили из админ-панели, то возможны нежелательные эффекты на странице. Можно сделать для себя новые стили из системных
Также используется jQuery, так что, если в вашей теме он тоже используется, позаботьтесь, чтобы не было конфликта версий.
Работает в версиях WP 2.7 и 2.8