web-dev-qa-db-fra.com

Publier une métabox personnalisée avec wp_editor

Je suis novice et cherche à ajouter le wp_editor à un champ métabox personnalisé. J'ai apparemment cherché partout un exemple complet d'écriture d'une métabox avec une zone de texte utilisant wp_editor. Je cherche un exemple complet du début à la fin.

Je ne veux pas utiliser un plugin.

Quelqu'un a un lien vers un exemple complet?

Merci

7
Travis Pflanz

Il y a au moins un problème d'utilisation de wp_editor dans une méta-boîte, comme indiqué dans ticket # 19173 (bonne lecture à propos de wp_editor et des méta-boîtes). TinyMCE devient complètement foiré si vous déplacez la méta-boîte qui la contient (en particulier, si l'emplacement de TinyMCE dans le DOM est modifié). Vous pouvez cependant utiliser la version Quicktags (non tinyMCE). Une autre solution consiste simplement à ne pas déplacer la boîte (lame) ni à ajouter vos éditeurs à l’aide des crochets edit_page_form ou edit_form_advanced au lieu d’utiliser add_meta_box().

J'ai écrit un plugin rapide pour illustrer le problème. C’est un exemple totalement fonctionnel d’utilisation de wp_editor dans une méta-boîte. Vous pouvez configurer wp_editor pour le rendre plus convivial pour les méta-boîtes en désactivant TinyMCE et en activant les balises rapides à l’aide de Arguments appropriés .

<?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'] );
  }

}

Edit: dans cette version de la fonction wp_editor_meta_box () de l'exemple ci-dessus, TMCE sera désactivé et les balises rapides activées:

/* 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 );
}
11
Dave Romsey

Recherchez-vous un exemple de code à partir de zéro ou envisagez-vous d'intégrer un plug-in de métabox personnalisé qui prend en charge un éditeur WYSIWYG dans un métabox? Si ce dernier cas, puis-je suggérer https://github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress

0
JohnG