问题描述

我是一个新手,并希望将 wp_editor 添加到自定义的 metabox textarea 字段中。我看起来似乎无处不在,用于编写一个使用 wp_editor 的 textarea 的 metabox 的完整示例。我正在寻找一个完整的开始到结束的例子。

我不想使用插件。

任何人都有一个完整的例子的链接?

谢谢

最佳解决方案

在一个元框中使用 wp_editor 至少有一个问题,如 ticket #19173(关于 wp_editor 和 meta 框的主题的阅读) 所讨论的。如果你移动包含它的元框 (特别是如果 TinyMCE 在 DOM 中的位置被改变),TinyMCE 就会被弄乱了。但是,您可以使用 Quicktags 版本 (非 tinyMCE) 。另一个选择是不要移动框 (跛脚) 或使用 edit_page_formedit_form_advanced 钩子添加编辑器,而不是使用 add_meta_box()

我写了一个快速插件来演示这个问题。这是一个完美的例子,在一个元框中使用 wp_editor 。您可以通过禁用 TinyMCE 并使用 appropriate args 启用 quicktag 来配置 wp_editor 使其更易于使用元框。

<?php
/**
 * Plugin Name: WP Editor in a Meta Box
 * Plugin URI:
 * Description: Demonstration of WP Editor in a meta box.
 * Version: 1.0
 * Author: goto10
 * Author URI:
 * License:
 */

// file name: wp_editor-in-meta-box-test.php

/* Meta box code based on http://codex.wordpress.org/Function_Reference/add_meta_box */

/* Define the custom box */
add_action( 'add_meta_boxes', 'myplugin_add_custom_box' );

/* Do something with the data entered */
add_action( 'save_post', 'myplugin_save_postdata' );

/* Adds a box to the main column on the Post and Page edit screens */
function myplugin_add_custom_box() {
  add_meta_box( 'wp_editor_test_1_box', 'WP Editor Test #1 Box', 'wp_editor_meta_box' );
}

/* Prints the box content */
function wp_editor_meta_box( $post ) {

  // Use nonce for verification
  wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );

  $field_value = get_post_meta( $post->ID, '_wp_editor_test_1', false );
  wp_editor( $field_value[0], '_wp_editor_test_1' );
}

/* When the post is saved, saves our custom data */
function myplugin_save_postdata( $post_id ) {

  // verify if this is an auto save routine.
  // If it is our form has not been submitted, so we dont want to do anything
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
      return;

  // verify this came from the our screen and with proper authorization,
  // because save_post can be triggered at other times
  if ( ( isset ( $_POST['myplugin_noncename'] ) ) && ( ! wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) ) )
      return;

  // Check permissions
  if ( ( isset ( $_POST['post_type'] ) ) && ( 'page' == $_POST['post_type'] )  ) {
    if ( ! current_user_can( 'edit_page', $post_id ) ) {
      return;
    }
  }
  else {
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
      return;
    }
  }

  // OK, we're authenticated: we need to find and save the data
  if ( isset ( $_POST['_wp_editor_test_1'] ) ) {
    update_post_meta( $post_id, '_wp_editor_test_1', $_POST['_wp_editor_test_1'] );
  }

}

编辑:此版本的 wp_editor_meta_box() 功能从上述示例中将禁用 TMCE,启用 Quicktags:

/* Prints the box content */
function wp_editor_meta_box( $post ) {

  // Use nonce for verification
  wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );

  $field_value = get_post_meta( $post->ID, '_wp_editor_test_1', false );

  // Settings that we'll pass to wp_editor
  $args = array (
        'tinymce' => false,
        'quicktags' => true,
  );
  wp_editor( $field_value[0], '_wp_editor_test_1', $args );
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。