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

wptexturize() WP 0.71

Функция форматирования текста. В её задачи входит изменить текст на более правильный, читаемый и визуально привлекательный.

Текст изменяется следующим образом:

"текст в кавычках" станет “текстом в лапках”
'текст в кавычках' станет ‘текстом в лапках’
		  --- станет —
		   -- станет –
		  ... станет …
		  (c) станет ©
		  (r) станет ®
		 (tm) станет ™
		   '' станет ”
		   `` станет “
  president's станет president’s
  presidents' станет presidents’
		  12' станет 12″
		  12" станет 12′
		  2x4 станет 2×4

Ниже список фильтров к которым, по умолчанию, применяется функция wptexturize():

comment_author
term_name
link_name
link_description
link_notes
bloginfo
wp_title
widget_title
single_post_title
single_cat_title
single_tag_title
single_month_title
nav_menu_attr_title
nav_menu_description
term_description
list_cats
widget_text
the_content
the_excerpt
the_title
comment_text

Использование этой функции недопустимо для программного кода, потому что в нем могут быть изменены символы.

Если нужно указать html теги или шоткоды исключения, т.е. такие, где функция работать не будет, то используйте фильтры no_texturize_tags и no_texturize_shortcodes соответственно.

Хуки из функции:
Возвращает

Строку. Отформатированный текст.

Примеры

#1 Базовое использование

Заменим символы в строке:

$text = "'---' \"--\" 1234\" 1234' (tm) ... 1234x1234";
$new_text = wptexturize( $text );
echo $new_text;

// Получим:
// на экран: ‘—’ “–” 1234″ 1234′ ™ … 1234×1234
// в коде: ‘—’ “–” 1234″ 1234′ ™ … 1234×1234

#2 Как отключить форматирование текстах wptexturize

Если вы заметили что контент поста обрабатывается функцией wptexturize, то её можно отключить отменив фильтр, чтобы он не работал для выводимого контента. Используем для этого функцию remove_filter():

remove_filter( 'the_content', 'wptexturize' ); // в записях

remove_filter( 'the_excerpt', 'wptexturize' ); // в анонсе

remove_filter( 'comment_text', 'wptexturize' ); // в комментариях

remove_filter( 'the_title', 'wptexturize' ); // в заголовках

Остальные фильтры которые также используют форматирование и которые можно отключить смотрите выше в списке.

Код wptexturize: wp-includes/formatting.php WP 4.9

<?php
function wptexturize( $text, $reset = false ) {
	global $wp_cockneyreplace, $shortcode_tags;
	static $static_characters = null,
		$static_replacements = null,
		$dynamic_characters = null,
		$dynamic_replacements = null,
		$default_no_texturize_tags = null,
		$default_no_texturize_shortcodes = null,
		$run_texturize = true,
		$apos = null,
		$prime = null,
		$double_prime = null,
		$opening_quote = null,
		$closing_quote = null,
		$opening_single_quote = null,
		$closing_single_quote = null,
		$open_q_flag = '<!--oq-->',
		$open_sq_flag = '<!--osq-->',
		$apos_flag = '<!--apos-->';

	// If there's nothing to do, just stop.
	if ( empty( $text ) || false === $run_texturize ) {
		return $text;
	}

	// Set up static variables. Run once only.
	if ( $reset || ! isset( $static_characters ) ) {
		/**
		 * Filters whether to skip running wptexturize().
		 *
		 * Passing false to the filter will effectively short-circuit wptexturize().
		 * returning the original text passed to the function instead.
		 *
		 * The filter runs only once, the first time wptexturize() is called.
		 *
		 * @since 4.0.0
		 *
		 * @see wptexturize()
		 *
		 * @param bool $run_texturize Whether to short-circuit wptexturize().
		 */
		$run_texturize = apply_filters( 'run_wptexturize', $run_texturize );
		if ( false === $run_texturize ) {
			return $text;
		}

		/* translators: opening curly double quote */
		$opening_quote = _x( '&#8220;', 'opening curly double quote' );
		/* translators: closing curly double quote */
		$closing_quote = _x( '&#8221;', 'closing curly double quote' );

		/* translators: apostrophe, for example in 'cause or can't */
		$apos = _x( '&#8217;', 'apostrophe' );

		/* translators: prime, for example in 9' (nine feet) */
		$prime = _x( '&#8242;', 'prime' );
		/* translators: double prime, for example in 9" (nine inches) */
		$double_prime = _x( '&#8243;', 'double prime' );

		/* translators: opening curly single quote */
		$opening_single_quote = _x( '&#8216;', 'opening curly single quote' );
		/* translators: closing curly single quote */
		$closing_single_quote = _x( '&#8217;', 'closing curly single quote' );

		/* translators: en dash */
		$en_dash = _x( '&#8211;', 'en dash' );
		/* translators: em dash */
		$em_dash = _x( '&#8212;', 'em dash' );

		$default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt');
		$default_no_texturize_shortcodes = array('code');

		// if a plugin has provided an autocorrect array, use it
		if ( isset($wp_cockneyreplace) ) {
			$cockney = array_keys( $wp_cockneyreplace );
			$cockneyreplace = array_values( $wp_cockneyreplace );
		} else {
			/* translators: This is a comma-separated list of words that defy the syntax of quotations in normal use,
			 * for example...  'We do not have enough words yet' ... is a typical quoted phrase.  But when we write
			 * lines of code 'til we have enough of 'em, then we need to insert apostrophes instead of quotes.
			 */
			$cockney = explode( ',', _x( "'tain't,'twere,'twas,'tis,'twill,'til,'bout,'nuff,'round,'cause,'em",
				'Comma-separated list of words to texturize in your language' ) );

			$cockneyreplace = explode( ',', _x( '&#8217;tain&#8217;t,&#8217;twere,&#8217;twas,&#8217;tis,&#8217;twill,&#8217;til,&#8217;bout,&#8217;nuff,&#8217;round,&#8217;cause,&#8217;em',
				'Comma-separated list of replacement words in your language' ) );
		}

		$static_characters = array_merge( array( '...', '``', '\'\'', ' (tm)' ), $cockney );
		$static_replacements = array_merge( array( '&#8230;', $opening_quote, $closing_quote, ' &#8482;' ), $cockneyreplace );


		// Pattern-based replacements of characters.
		// Sort the remaining patterns into several arrays for performance tuning.
		$dynamic_characters = array( 'apos' => array(), 'quote' => array(), 'dash' => array() );
		$dynamic_replacements = array( 'apos' => array(), 'quote' => array(), 'dash' => array() );
		$dynamic = array();
		$spaces = wp_spaces_regexp();

		// '99' and '99" are ambiguous among other patterns; assume it's an abbreviated year at the end of a quotation.
		if ( "'" !== $apos || "'" !== $closing_single_quote ) {
			$dynamic[ '/\'(\d\d)\'(?=\Z|[.,:;!?)}\-\]]|&gt;|' . $spaces . ')/' ] = $apos_flag . '$1' . $closing_single_quote;
		}
		if ( "'" !== $apos || '"' !== $closing_quote ) {
			$dynamic[ '/\'(\d\d)"(?=\Z|[.,:;!?)}\-\]]|&gt;|' . $spaces . ')/' ] = $apos_flag . '$1' . $closing_quote;
		}

Cвязанные функции

Из раздела: Форматирование

wptexturize 9 комментариев
  • Владимир @

    Одного раздела недостаёт: как от этой замечательной функции избавляться, чтобы не уничтожала осмысленно введенный код. dash3 Это насколько же надо быть извращенцем, чтобы насильственно встроить бездарно типографирующую всё и вся функцию в такое место, куда приходится добираться автогеном через кольцевидную мышцу! И это индийское решение разработчики WP неизменно тянут из версии в версию уже лет пять…

    Ответить6.1 лет назад #
    • Kama4558

      Судя по комментарию у вас с этой функций что-то личное smile

      Избавится от нее можно вставив в functions.php вашей темы такой код:

      remove_filter('the_content', 'wptexturize');

      Вместо the_content укажите фильтр где вам нужно, чтобы она не работала. В статье фильтры указаны.

      1
      Ответить6.1 лет назад #
  • Владимир @

    У меня личное?! Вот строго у одного меня? pardon

    Why are WordPress developers so DUMB? It’s something I’ve seen in other projects: the bigger the project the more disconnected from the real world the developers are. Why do they insist in adding the fucking auto formatting to WordPress posts? And if thy think there is a reason in doing so, why the hell don’t they include a fucking option to disable it. A fucking option to disable the shitty TinyMCE editor and the auto formatting all together? A tag to tell that stupid editor “don’t fucking touch this code bitch”?
    http://antonio.rojilla.com/2010/07/19/wordpress-auto-formatting-sucks-wp-developers-are-dumb/

    I don't know why developers of such a great blogging platform are not realizing the cons of so called "auto formatting". Iam sorry if I sound bad but why the hell wordpress auto formats my html i put into the text editor. I do not see any logic behind this.
    Its like; I buy dreamweaver and make webpage but upon saving it "autoformat".
    http://wordpress.org/extend/ideas/topic/modify-annoying-html-autoformat-before-releasing-28

    B так далее, и тому подобное.


    П.С. комментарий отредактирован автором блога

    Ответить6.1 лет назад #
    • Kama4558

      Я больше шутил, чем всерьез насчет "личного" и уж точно не хотел вас обидеть! Просто, ваш комментарий получился эмоциональный, вот я и предположил, что эта функция заставила вас помучится...

      Вообще, разработчики убрали её действия в форматирования контента (the_content) с версии 3.0+

      Ответить6.1 лет назад #
  • Владимир @

    Да вы что, я и не думал обижаться! Меня вообще обидеть сложновато, скорее уж наоборот (http://ru.forums.wordpress.org/topic/%d0%98%d0%b7%d0%b1%d0%b0%d0%b2%d0%b8%d1%82%d1%8c%d1%81%d1%8f-%d0%be%d1%82-%d0%bf%d1%80%d0%b5%d0%be%d0%b1%d1%80%d0%b0%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d1%87%d0%b8%d1%81%d0%bb%d0%be%d0%b2%d1%8b%d1%85-%d1%8d%d0%ba%d0%b2%d0%b8%d0%b2%d0%b0%d0%bb?replies=12#post-54086). laugh
    Мучиться не пришлось — мне сразу подсказали умные слова для поиска (так я и ваш блог обнаружил), но вот насчёт «убрали» вас, похоже, надули: в 3.0.4 (других не проверял) фсьо кака бычна.

    Ответить6.1 лет назад #
  • jkeks cайт: jkeks.ru

    Добрый день !
    Почему WordPress корежит таблицы, причем не всегда, и в каких случаях это происходит - не понимаю.
    Так же он лезет в javaScript со своим CDATA, из-за него у меня портятся голосования от ShareThis после редактирования постов и то не всегда (не понимаю в каких случаях).

    Подскажите пожалуйста, как настучать по рукам WP за такое ?
    Судя по всему данный фильтр это не панацея ?

    Спасибо.

    А пока пошел распечатаю formatting.php, почитаю вечерком

    Ответить5.3 лет назад #
  • User

    После 3.0 точно из the_title() убрали? У меня на 3.9 работает.

    Ответить3.5 года назад #
    • User

      wp-includes/default-filters.php

      the_content() 131
      the_excerpt() 138
      the_title() 127
      comment_text() 145

      Все они там родимые...

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

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

Ваш комментарий