WordPress как на ладони
wordpress jino

the_editor_content хук-фильтр . WP 2.1.0

Устанавливает предварительный контент/текст для редактора WordPress. Т.е. текст по умолчанию.

C помощью этого фильтра можно, например, установить начальный контент для типа записи, при создании новой записи.

Есть еще аналогичный хук default_content, который устанавливает контент по умолчанию для создаваемой записи, а не для редактора. Он срабатывает при любой публикации записи: даже при press-this, xmlrpc и т.д. Оба хука взаимозаменяемы в 80% случаев.

Также, есть подобные хуки:

  • для заголовка - default_title
  • для цитаты: default_excerpt.

Использование

add_filter( 'the_editor_content', '____filter_function_name' );
function ____filter_function_name( $content ) {
	// Фильтр...

	return $content;
}
$content(строка)
Контент который будет установлен в редактор WordPress.

Примеры

#1 Установим начальный контент для типа записи xxx

add_filter('the_editor_content', 'new_xxx_content');
function new_xxx_content( $content ){
	global $post;

	// Устанавливаем текст только если контента еще нет и это нужный тип записи
	if( empty( $content ) && $post->post_type == 'xxx' ){
		return 'Это начальный текст для записи.';
	}

	return $content;
}

#2 Установим контент по умолчанию через хук 'default_content'

add_filter( 'default_content', 'custom_post_type_content' );
function custom_post_type_content( $content ) {
	if( function_exists('get_current_screen') && get_current_screen()->post_type == 'my_post') {
		$content = 'Контент по умолчанию для постов типа: "my_post"';
		return $content;
	}
}

Связи хука

Используется в: WP_Widget_Text::form()

Фрагменты кода хука the_editor_content

Фрагмент из: wp-includes/class-wp-editor.php VER 4.9.1
...

		// Prepare the content for the Visual or Text editor, only when TinyMCE is used (back-compat).
		if ( self::$this_tinymce ) {
			add_filter( 'the_editor_content', 'format_for_editor', 10, 2 );
		}

		/**
		 * Filters the default editor content.
		 *
		 * @since 2.1.0
		 *
		 * @param string $content        Default editor content.
		 * @param string $default_editor The default editor for the current user.
		 *                               Either 'html' or 'tinymce'.
		 */
		$content = apply_filters( 'the_editor_content', $content, $default_editor );

		// Remove the filter as the next editor on the same page may not need it.
		if ( self::$this_tinymce ) {
			remove_filter( 'the_editor_content', 'format_for_editor' );
		}

		// Back-compat for the `htmledit_pre` and `richedit_pre` filters
		if ( 'html' === $default_editor && has_filter( 'htmledit_pre' ) ) {
			// TODO: needs _deprecated_filter(), use _deprecated_function() as substitute for now
			_deprecated_function( 'add_filter( htmledit_pre )', '4.3.0', 'add_filter( format_for_editor )' );
			$content = apply_filters( 'htmledit_pre', $content );
		} elseif ( 'tinymce' === $default_editor && has_filter( 'richedit_pre' ) ) {
			_deprecated_function( 'add_filter( richedit_pre )', '4.3.0', 'add_filter( format_for_editor )' );
			$content = apply_filters( 'richedit_pre', $content );
		}
...
Фрагмент из: wp-includes/widgets/class-wp-widget-text.php VER 4.9.1
...
				'text' => '',
			)
		);
		?>
		<?php if ( ! $this->is_legacy_instance( $instance ) ) : ?>
			<?php

			if ( user_can_richedit() ) {
				add_filter( 'the_editor_content', 'format_for_editor', 10, 2 );
				$default_editor = 'tinymce';
			} else {
				$default_editor = 'html';
			}

			/** This filter is documented in wp-includes/class-wp-editor.php */
			$text = apply_filters( 'the_editor_content', $instance['text'], $default_editor );

			// Reset filter addition.
			if ( user_can_richedit() ) {
				remove_filter( 'the_editor_content', 'format_for_editor' );
			}

			// Prevent premature closing of textarea in case format_for_editor() didn't apply or the_editor_content filter did a wrong thing.
			$escaped_text = preg_replace( '#</textarea#i', '&lt;/textarea', $text );

			?>
			<input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" class="title sync-input" type="hidden" value="<?php echo esc_attr( $instance['title'] ); ?>">
			<textarea id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>" class="text sync-input" hidden><?php echo $escaped_text; ?></textarea>
			<input id="<?php echo $this->get_field_id( 'filter' ); ?>" name="<?php echo $this->get_field_name( 'filter' ); ?>" class="filter sync-input" type="hidden" value="on">
			<input id="<?php echo $this->get_field_id( 'visual' ); ?>" name="<?php echo $this->get_field_name( 'visual' ); ?>" class="visual sync-input" type="hidden" value="on">
		<?php else : ?>
...
the_editor_content 5 комментариев
  • avense5 cайт: videovegas.ru

    А этот хук: "default_content" не то же самое?

    Он у меня задействован для добавления контента по умолчанию в определенные типы записей. Кроме того там я не ставил проверку есть ли в записи уже текст, текст не добавляется если он уже там есть.

    Ответить1.7 года назад #
    • Kama4697

      Спасибо за коммент, почти тоже самое...

      Сейчас посмотрел - фильтр default_content устанавливает контент по умолчанию для вновь создаваемого поста именно для записи, а не для редактора WordPress. Он срабатывает при любой публикации записи: даже при press this, xmlrpc и т.д.

      Там еще есть подобные хуки:

          /**
      	 * Filter the default post content initially used in the "Write Post" form.
      	 *
      	 * @since 1.5.0
      	 *
      	 * @param string  $post_content Default post content.
      	 * @param WP_Post $post         Post object.
      	 */
      	$post->post_content = apply_filters( 'default_content', $post_content, $post );
      
      	/**
      	 * Filter the default post title initially used in the "Write Post" form.
      	 *
      	 * @since 1.5.0
      	 *
      	 * @param string  $post_title Default post title.
      	 * @param WP_Post $post       Post object.
      	 */
      	$post->post_title = apply_filters( 'default_title', $post_title, $post );
      
      	/**
      	 * Filter the default post excerpt initially used in the "Write Post" form.
      	 *
      	 * @since 1.5.0
      	 *
      	 * @param string  $post_excerpt Default post excerpt.
      	 * @param WP_Post $post         Post object.
      	 */
      	$post->post_excerpt = apply_filters( 'default_excerpt', $post_excerpt, $post );

      Скиньте свой код плз, добавлю его в примеры. Спасибо!

      1
      Ответить1.7 года назад #
      • avense5 cайт: videovegas.ru

        Вот мой код:

        function custom_post_type_content( $content ) {
        	if(get_current_screen()->post_type == 'my_post') {
        		$content = 'Контент по умолчанию для постов типа: "my_post"';
        		return $content;
        	}
        }
        add_filter( 'default_content', 'custom_post_type_content' );
        Ответить1.7 года назад #
        • Kama4697

          Спасибо добавил в описание, только чуть подправил...

          1
          Ответить1.7 года назад #
          • avense5 cайт: videovegas.ru

            Да, с проверкой будет по лучше, и у себя в коде поправил. Благодарю!

            Ответить1.7 года назад #

Здравствуйте, !

Ваш комментарий
Предпросмотр