/** * Replace `%%variable_placeholders%%` with their real value based on the current requested page/post/cpt/etc * * @param string $string the string to replace the variables in. * @param array $args the object some of the replacement values might come from, * could be a post, taxonomy or term. * @param array $omit variables that should not be replaced by this function. * * @return string */ public function replace($string, $args, $omit = array()) { $string = strip_tags($string); // Let's see if we can bail super early. if (strpos($string, '%%') === false) { return YMBESEO_Utils::standardize_whitespace($string); } $args = (array) $args; if (isset($args['post_content']) && !empty($args['post_content'])) { $args['post_content'] = YMBESEO_Utils::strip_shortcode($args['post_content']); } if (isset($args['post_excerpt']) && !empty($args['post_excerpt'])) { $args['post_excerpt'] = YMBESEO_Utils::strip_shortcode($args['post_excerpt']); } $this->args = (object) wp_parse_args($args, $this->defaults); // Clean $omit array. if (is_array($omit) && $omit !== array()) { $omit = array_map(array(__CLASS__, 'remove_var_delimiter'), $omit); } $replacements = array(); if (preg_match_all('`%%([^%]+(%%single)?)%%?`iu', $string, $matches)) { $replacements = $this->set_up_replacements($matches, $omit); } /** * Filter: 'YMBESEO_replacements' - Allow customization of the replacements before they are applied * * @api array $replacements The replacements */ $replacements = apply_filters('YMBESEO_replacements', $replacements); // Do the actual replacements. if (is_array($replacements) && $replacements !== array()) { $string = str_replace(array_keys($replacements), array_values($replacements), $string); } /** * Filter: 'YMBESEO_replacements_final' - Allow overruling of whether or not to remove placeholders * which didn't yield a replacement * * @example <code>add_filter( 'YMBESEO_replacements_final', '__return_false' );</code> * * @api bool $final */ if (apply_filters('YMBESEO_replacements_final', true) === true && (isset($matches[1]) && is_array($matches[1]))) { // Remove non-replaced variables. $remove = array_diff($matches[1], $omit); // Make sure the $omit variables do not get removed. $remove = array_map(array(__CLASS__, 'add_var_delimiter'), $remove); $string = str_replace($remove, '', $string); } // Undouble separators which have nothing between them, i.e. where a non-replaced variable was removed. if (isset($replacements['%%sep%%']) && (is_string($replacements['%%sep%%']) && $replacements['%%sep%%'] !== '')) { $q_sep = preg_quote($replacements['%%sep%%'], '`'); $string = preg_replace('`' . $q_sep . '(?:\\s*' . $q_sep . ')*`u', $replacements['%%sep%%'], $string); } // Remove superfluous whitespace. $string = YMBESEO_Utils::standardize_whitespace($string); return trim($string); }
/** * Clean up the input string. * * @param string $inputString String to clean up. * @param bool $removeOptionalCharacters Whether or not to do a cleanup of optional chars too. * * @return string */ function strip_separators_and_fold($inputString, $removeOptionalCharacters = false) { $keywordCharactersAlwaysReplacedBySpace = array(',', "'", '"', '?', '’', '“', '”', '|', '/'); $keywordCharactersRemovedOrReplaced = array('_', '-'); $keywordWordsRemoved = array(' a ', ' in ', ' an ', ' on ', ' for ', ' the ', ' and '); // Lower. $inputString = $this->strtolower_utf8($inputString); // Default characters replaced by space. $inputString = str_replace($keywordCharactersAlwaysReplacedBySpace, ' ', $inputString); // Standardise whitespace. $inputString = YMBESEO_Utils::standardize_whitespace($inputString); // Deal with the separators that can be either removed or replaced by space. if ($removeOptionalCharacters) { // Remove word separators with a space. $inputString = str_replace($keywordWordsRemoved, ' ', $inputString); $inputString = str_replace($keywordCharactersRemovedOrReplaced, '', $inputString); } else { $inputString = str_replace($keywordCharactersRemovedOrReplaced, ' ', $inputString); } // Standardise whitespace again. $inputString = YMBESEO_Utils::standardize_whitespace($inputString); return trim($inputString); }
/** * Standardize whitespace in a string * * @deprecated 1.6.1 * @deprecated use YMBESEO_Utils::standardize_whitespace() * @see YMBESEO_Utils::standardize_whitespace() * * @since 1.6.0 * * @param string $string * * @return string */ function YMBESEO_standardize_whitespace($string) { _deprecated_function(__FUNCTION__, 'WPSEO 1.6.1', 'YMBESEO_Utils::standardize_whitespace()'); return YMBESEO_Utils::standardize_whitespace($string); }