/** * 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); }
/** * Retrieve the body from the post. * * @param object $post The post object. * * @return string The post content. */ function get_body($post) { // This filter allows plugins to add their content to the content to be analyzed. $post_content = apply_filters('YMBESEO_pre_analysis_post_content', $post->post_content, $post); // Strip shortcodes, for obvious reasons, if plugins think their content should be in the analysis, they should // hook into the above filter. $post_content = YMBESEO_Utils::trim_nbsp_from_string(YMBESEO_Utils::strip_shortcode($post_content)); if (trim($post_content) == '') { return ''; } $htmdata3 = preg_replace('`<(?:\\x20*script|script).*?(?:/>|/script>)`', '', $post_content); if ($htmdata3 == null) { $htmdata3 = $post_content; } else { unset($post_content); } $htmdata4 = preg_replace('`<!--.*?-->`', '', $htmdata3); if ($htmdata4 == null) { $htmdata4 = $htmdata3; } else { unset($htmdata3); } $htmdata5 = preg_replace('`<(?:\\x20*style|style).*?(?:/>|/style>)`', '', $htmdata4); if ($htmdata5 == null) { $htmdata5 = $htmdata4; } else { unset($htmdata4); } return $htmdata5; }
/** * Strip out the shortcodes with a filthy regex, because people don't properly register their shortcodes. * * @deprecated 1.6.1 * @deprecated use YMBESEO_Utils::strip_shortcode() * @see YMBESEO_Utils::strip_shortcode() * * @param string $text Input string that might contain shortcodes. * * @return string $text string without shortcodes */ function YMBESEO_strip_shortcode($text) { _deprecated_function(__FUNCTION__, 'WPSEO 1.6.1', 'YMBESEO_Utils::strip_shortcode()'); return YMBESEO_Utils::strip_shortcode($text); }