A WordPress-centric search engine for devs and theme authors



wp_sprintf ›

Since2.5.0
Deprecatedn/a
wp_sprintf ( $pattern )
Parameters: (2)
  • (string) $pattern The string which formatted args are inserted.
    Required: Yes
  • (mixed) $args ,... Arguments to be formatted into the $pattern string.
    Required: Yes
Links:
Returns:
  • (string) The formatted string.
Defined at:
Codex:

WordPress implementation of PHP sprintf() with filters.



Source

function wp_sprintf( $pattern ) {
	$args      = func_get_args();
	$len       = strlen( $pattern );
	$start     = 0;
	$result    = '';
	$arg_index = 0;
	while ( $len > $start ) {
		// Last character: append and break
		if ( strlen( $pattern ) - 1 == $start ) {
			$result .= substr( $pattern, -1 );
			break;
		}

		// Literal %: append and continue
		if ( substr( $pattern, $start, 2 ) == '%%' ) {
			$start  += 2;
			$result .= '%';
			continue;
		}

		// Get fragment before next %
		$end = strpos( $pattern, '%', $start + 1 );
		if ( false === $end ) {
			$end = $len;
		}
		$fragment = substr( $pattern, $start, $end - $start );

		// Fragment has a specifier
		if ( $pattern[ $start ] == '%' ) {
			// Find numbered arguments or take the next one in order
			if ( preg_match( '/^%(\d+)\$/', $fragment, $matches ) ) {
				$arg      = isset( $args[ $matches[1] ] ) ? $args[ $matches[1] ] : '';
				$fragment = str_replace( "%{$matches[1]}$", '%', $fragment );
			} else {
				++$arg_index;
				$arg = isset( $args[ $arg_index ] ) ? $args[ $arg_index ] : '';
			}

			/**
			 * Filters a fragment from the pattern passed to wp_sprintf().
			 *
			 * If the fragment is unchanged, then sprintf() will be run on the fragment.
			 *
			 * @since 2.5.0
			 *
			 * @param string $fragment A fragment from the pattern.
			 * @param string $arg      The argument.
			 */
			$_fragment = apply_filters( 'wp_sprintf', $fragment, $arg );
			if ( $_fragment != $fragment ) {
				$fragment = $_fragment;
			} else {
				$fragment = sprintf( $fragment, strval( $arg ) );
			}
		}

		// Append to result and move to next fragment
		$result .= $fragment;
		$start   = $end;
	}
	return $result;
}