抜粋にリッチテキストエディタを追加する
4 回答
- 投票
-
- 2012-07-12
デフォルトの出力を置き換えるだけです.抜粋を編集者に送信する前に、必ず抜粋をエスケープ解除してください.
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 ( '<', '>', '"', '&', ' ', '&nbsp;' ) , array ( '<', '>', '"', '&', ' ', ' ' ) , $str ); } }
このコードをプラグインまたはテーマの
functions.php
に保存します.Just replace the default output. Make sure you unescape the excerpt before you send it to the editor:
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 ( '<', '>', '"', '&', ' ', '&nbsp;' ) , array ( '<', '>', '"', '&', ' ', ' ' ) , $str ); } }
Save this code in a plugin or in your theme’s
functions.php
.-
おかげで、WP4.9.xの2018年でも箱から出して動作します:)Thanks, still works out of the box in 2018 for WP 4.9.x :)
- 0
- 2018-06-13
- moped
-
5.1バージョン(2019年2月)で完全に動作します、ありがとう!Works perfectly in 5.1 version (Feb 2019), thanks!
- 0
- 2019-02-24
- Mayur Chauhan
-
グーテンベルク後でも2020年でも機能します(「クラシックエディター」プラグインを有効にしてテストしただけですが)Still works in 2020, even post-Gutenberg (though I only tested it with "Classic Editor" plugin enabled)
- 0
- 2020-02-01
- squarecandy
-
- 2012-07-12
簡単な方法は、プラグインリッチテキストの抜粋を使用することです.
プラグインは
wp_editor 関数を使用して、ページ/投稿の抜粋用のリッチテキストエディターを生成します.そのため、WordPress3.3以降でのみ機能します. A simple way is to use the plugin Rich Text Excerpt
The Plugin uses the wp_editor function to generate a rich text editor for page/post excerpts, so will only work in WordPress 3.3 or greater.
-
試してみましたが、qTranslateプラグインと互換性がありません.動作させるためのアイデアはありますか?I try it, but it's incompatible with qTranslate plugin, any idea to make it work?
- 0
- 2012-07-12
- Marta
-
私はそれを徹底的に調べます.I will look into it.
- 0
- 2012-07-12
- Pontus Abrahamsson
-
抜粋がデフォルトでリッチテキストボックスではない理由はありますか?Any idea why excerpt is not a rich text box by default?
- 0
- 2012-08-22
- urok93
-
- 2013-11-29
リッチエディターを取得するには、
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' );
you may need to use
wp_editor
function to get rich editor, then you should remove any sanitize functions withget_post_meta
(orupdate_post_meta
), then you should usehtmlspecialchars_decode
function to get the rich content..look through this principle:
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' );
-
あなたの答えに説明を追加してください:**なぜ**それが問題を解決できるのでしょうか?Please add an explanation to your answer: **why** could that solve the problem?
- 0
- 2013-11-29
- fuxia
-
- 2015-09-30
ソリューションに従って、投稿タイトルの直後に抜粋wysiwygエディターを追加します.
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 '…'; } /** * 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();
Follow solution add excerpt wysiwyg editor right after post title.
Add follow class to your Wordpress project as
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 '…'; } /** * 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' ] ); } }
Then add to
functions.php
file follow lines:require_once __DIR__ . '/excerpt.php'; $excerpt = new Excerpt();
TinyMCE Advancedエディターの抜粋フィールドに追加する必要がありますか?
qTranslateプラグイン(多言語)を使用していますが、抜粋をこのプラグインとエディターに接続することはできません.
ありがとう