将富文本编辑器添加到摘录

时间:2012-07-12 作者:Marta

我需要在摘录字段中添加TinyMCE高级编辑器,有什么想法吗?

我有qTranslate插件(多语言),不可能将摘录与此插件和编辑器连接起来。

谢谢

4 个回复
最合适的回答,由SO网友:fuxia 整理而成

只需替换默认输出。在将摘录发送给编辑器之前,请确保取消浏览该摘录:

add_action( \'add_meta_boxes\', array ( \'T5_Richtext_Excerpt\', \'switch_boxes\' ) );

/**
 * Replaces the default excerpt editor with TinyMCE.
 */
class T5_Richtext_Excerpt
{
    /**
     * Replaces the meta boxes.
     *
     * @return void
     */
    public static function switch_boxes()
    {
        if ( ! post_type_supports( $GLOBALS[\'post\']->post_type, \'excerpt\' ) )
        {
            return;
        }

        remove_meta_box(
            \'postexcerpt\' // ID
        ,   \'\'            // Screen, empty to support all post types
        ,   \'normal\'      // Context
        );

        add_meta_box(
            \'postexcerpt2\'     // Reusing just \'postexcerpt\' doesn\'t work.
        ,   __( \'Excerpt\' )    // Title
        ,   array ( __CLASS__, \'show\' ) // Display function
        ,   null              // Screen, we use all screens with meta boxes.
        ,   \'normal\'          // Context
        ,   \'core\'            // Priority
        );
    }

    /**
     * Output for the meta box.
     *
     * @param  object $post
     * @return void
     */
    public static function show( $post )
    {
    ?>
        <label class="screen-reader-text" for="excerpt"><?php
        _e( \'Excerpt\' )
        ?></label>
        <?php
        // We use the default name, \'excerpt\', so we don’t have to care about
        // saving, other filters etc.
        wp_editor(
            self::unescape( $post->post_excerpt ),
            \'excerpt\',
            array (
            \'textarea_rows\' => 15
        ,   \'media_buttons\' => FALSE
        ,   \'teeny\'         => TRUE
        ,   \'tinymce\'       => TRUE
            )
        );
    }

    /**
     * The excerpt is escaped usually. This breaks the HTML editor.
     *
     * @param  string $str
     * @return string
     */
    public static function unescape( $str )
    {
        return str_replace(
            array ( \'&lt;\', \'&gt;\', \'&quot;\', \'&amp;\', \'&nbsp;\', \'&amp;nbsp;\' )
        ,   array ( \'<\',    \'>\',    \'"\',      \'&\',     \' \', \' \' )
        ,   $str
        );
    }
}
enter image description here

将此代码保存在插件或主题中functions.php.

SO网友:Pontus Abrahamsson

一种简单的方法是使用插件Rich Text Excerpt

插件使用wp_editor 函数为页面/帖子摘录生成富文本编辑器,因此只能在WordPress 3.3或更高版本中使用。

SO网友:T.Todua

您可能需要使用wp_editor 函数以获取丰富的编辑器,然后应使用get_post_meta (或update_post_meta), 那么你应该使用htmlspecialchars_decode 函数获取丰富的内容。。

仔细观察这一原则:

add_action( \'add_meta_boxes\', \'adding_a_new_metaabox\' );                
function adding_a_new_metaabox() 
    {   
        add_meta_box(\'html_myid_31_section\', \'TITLE Hellooo\', \'my_output_funct\');
    }

function my_output_funct( $post ) 
    {
    //so, dont ned to use esc_attr in front of get_post_meta
    $valueeee2=  get_post_meta($_GET[\'post\'], \'SMTH_METANAME\' , true ) ;
    wp_editor( htmlspecialchars_decode($valueeee2), \'mettaabox_ID_stylee\', $settings = array(\'textarea_name\'=>\'MyInputNAMEE\') );
    }


function save_my_post_data( $post_id ) 
{                   
    if (!empty($_POST[\'MyInputNAMEE\']))
        {
        $datta=htmlspecialchars($_POST[\'MyInputNAMEE\']);
        update_post_meta($post_id, \'SMTH_METANAME\', $datta );
        }
}
add_action( \'save_post\', \'save_my_post_data\' ); 

SO网友:OzzyCzech

按照解决方案在帖子标题后添加摘录wysiwyg编辑器。

Excerpt

将follow类添加到Wordpress项目中excerpt.php

class Excerpt {

    public function __construct() {
        add_filter(\'excerpt_more\', [$this, \'excerpt_more\']);
        add_action(\'edit_form_after_title\', [$this, \'excerpt\']);
        add_action(\'admin_menu\', [$this, \'remove_excerpt_metabox\']);
        add_filter(\'wp_trim_excerpt\', [$this, \'wp_trim_excerpt\'], 10, 2);
    }

    /**
     * Remove metabox from post
     */
    public function remove_excerpt_metabox() {
        remove_meta_box(\'postexcerpt\', \'post\', \'normal\');
    }

    /**
     * Strip tags
     *
     * @param string $text
     * @return string
     */
    public function wp_trim_excerpt($text = \'\') {
        return strip_tags($text, \'<a><strong><em><b><i><code><ul><ol><li><blockquote><del><ins><img><pre><code><>\');
    }

    /**
     * More sign...
     *
     * @return string
     */
    public function excerpt_more() {
        return \'&hellip;\';
    }

    /**
     * Excerpt editor after post title.
     *
     * @param $post
     */
    public function excerpt($post) {
        if ($post->post_type !== \'post\') return;
        wp_editor(
            html_entity_decode($post->post_excerpt),
            \'html-excerpt\',
            [
                \'teeny\' => true,
                \'quicktags\' => true,
                \'wpautop\' => true,
                \'media_buttons\' => false,
                \'textarea_rows\' => 7,
                \'textarea_name\' => \'excerpt\'
            ]
        );
    }
}
然后添加到functions.php 文件后续行:

require_once __DIR__ . \'/excerpt.php\';
$excerpt = new Excerpt();

结束

相关推荐

如何通过ajax/jQuery加载wp_Editor()

我有一个定制的主题,非常复杂。我拥有多个内容区域,用户可以在其中为特定选项卡指定内容。我通过wp_editor() 作用它工作得很好。(这都是在管理端的“页面”帖子类型中)然而,我开始做一些改进,包括动态添加/删除选项卡的能力(之前,我在页面上加载了6个编辑器)。用户可能有1-7个选项卡。当用户添加选项卡时,需要向页面添加编辑器实例。然而,无论我尝试什么,我都无法让它正确加载和显示。以下是我迄今为止尝试过的两件事:创建一个包含管理引导程序的php文件,然后加载编辑器wp_editor(). 然后我执行j