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 соответственно.

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

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

Примеры

#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' ); // в заголовках

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

Код из


wp-includes/formatting.php

WP 4.7.2

<?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[ '/'(dd)'(?=Z|[.,:;!?)}-]]|&gt;|' . $spaces . ')/' ] = $apos_flag . '$1' . $closing_single_quote;
		}
		if ( "'" !== $apos || '"' !== $closing_quote ) {
			$dynamic[ '/'(dd)"(?=Z|[.,:;!?)}-]]|&gt;|' . $spaces . ')/' ] = $apos_flag . '$1' . $closing_quote;
		}