Created
February 3, 2012 15:48
-
-
Save benhuson/1730806 to your computer and use it in GitHub Desktop.
WordPress SEO plugin patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class WPSEO_Frontend { | |
function __construct() { | |
$options = get_wpseo_options(); | |
add_action( 'wp_head', array(&$this, 'head'), 1, 1 ); | |
remove_action( 'wp_head', 'rel_canonical' ); | |
add_filter( 'wp_title', array(&$this, 'title'), 10, 3 ); | |
add_filter( 'thematic_doctitle', array(&$this, 'force_wp_title') ); | |
add_filter( 'headway_title', array(&$this, 'force_wp_title') ); | |
add_action( 'wp',array(&$this,'page_redirect'), 99, 1 ); | |
add_action( 'login_head', array(&$this, 'noindex_page') ); | |
add_action( 'admin_head', array(&$this, 'noindex_page') ); | |
add_action( 'rss_head', array(&$this, 'noindex_feed') ); | |
add_action( 'rss2_head', array(&$this, 'noindex_feed') ); | |
add_action( 'commentsrss2_head', array(&$this, 'noindex_feed') ); | |
add_filter( 'loginout',array(&$this,'nofollow_link')); | |
add_filter( 'register',array(&$this,'nofollow_link')); | |
add_filter( 'comments_popup_link_attributes', array( &$this, 'echo_nofollow' ) ); | |
if ( isset($options['hidersdlink']) && $options['hidersdlink'] ) | |
remove_action('wp_head', 'rsd_link'); | |
if ( isset($options['hidewlwmanifest']) && $options['hidewlwmanifest'] ) | |
remove_action('wp_head', 'wlwmanifest_link'); | |
remove_action('wp_head', 'index_rel_link'); | |
remove_action('wp_head', 'start_post_rel_link'); | |
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head'); | |
if ( isset($options['hideshortlink']) && $options['hideshortlink'] ) | |
remove_action('wp_head', 'wp_shortlink_wp_head'); | |
if ( isset($options['hidefeedlinks']) && $options['hidefeedlinks'] ) { | |
// TODO: add option to display just normal feed and hide comment feed. | |
remove_action('wp_head', 'feed_links', 2); | |
remove_action('wp_head', 'feed_links_extra', 3); | |
} | |
if ( ( isset($options['disabledate']) && $options['disabledate'] ) || | |
( isset($options['disableauthor']) && $options['disableauthor'] ) || | |
( isset($options['disablepostformats']) && $options['disablepostformats'] ) ) | |
add_action('wp', array(&$this, 'archive_redirect') ); | |
if (isset($options['redirectattachment']) && $options['redirectattachment']) | |
add_action('template_redirect', array(&$this,'attachment_redirect'),1); | |
if (isset($options['trailingslash']) && $options['trailingslash']) | |
add_filter('user_trailingslashit', array(&$this, 'add_trailingslash') , 10, 2); | |
if (isset($options['cleanpermalinks']) && $options['cleanpermalinks']) | |
add_action('template_redirect',array(&$this,'clean_permalink'),1); | |
add_filter('the_content_feed', array(&$this, 'embed_rssfooter') ); | |
add_filter('the_excerpt_rss', array(&$this, 'embed_rssfooter_excerpt') ); | |
if (isset($options['forcerewritetitle']) && $options['forcerewritetitle']) { | |
add_action('get_header', array(&$this, 'force_rewrite_output_buffer') ); | |
add_action('wp_footer', array(&$this, 'flush_cache') ); | |
} | |
} | |
function is_home_posts_page() { | |
return ( is_home() && 'page' != get_option('show_on_front') ); | |
} | |
function is_home_static_page() { | |
return ( is_front_page() && 'page' == get_option('show_on_front') && is_page( get_option('page_on_front') ) ); | |
} | |
function is_posts_page() { | |
return ( is_home() && 'page' == get_option('show_on_front') ); | |
} | |
function title( $title, $sep = '-', $seplocation = '', $postid = '' ) { | |
if ( trim($sep) == '' ) | |
$sep = '-'; | |
$sep = ' '.$sep.' '; | |
global $wp_query; | |
if ( is_feed() ) | |
return $title; | |
$options = get_wpseo_options(); | |
if ( $this->is_home_static_page() ) { | |
global $post; | |
$title = wpseo_get_value( 'title', $post->ID ); | |
if ( '' == $title ) | |
$title = wpseo_replace_vars($options['title-'.$post->post_type], (array) $post ); | |
} else if ( $this->is_home_posts_page() ) { | |
if ( isset($options['title-home']) && $options['title-home'] != '' ) | |
$title = wpseo_replace_vars( $options['title-home'], array() ); | |
else { | |
$title = get_bloginfo('name'); | |
if ( $wp_query->query_vars['paged'] ) | |
$title .= $sep.$wp_query->query_vars['paged'].'/'.$wp_query->max_num_pages; | |
$title .= $sep.get_bloginfo('description'); | |
} | |
} else if ( $this->is_posts_page() ) { | |
$blogpage = get_post( get_option( 'page_for_posts' ) ); | |
$fixed_title = wpseo_get_value( 'title', $blogpage->ID ); | |
if ( $fixed_title ) { | |
$title = wpseo_replace_vars( $fixed_title, (array) $blogpage ); | |
} else { | |
if (isset($options['title-'.$blogpage->post_type]) && !empty($options['title-'.$blogpage->post_type]) ) | |
$title = wpseo_replace_vars($options['title-'.$blogpage->post_type], (array) $blogpage ); | |
else { | |
$title = get_bloginfo('name'); | |
if ( $wp_query->query_vars['paged'] ) | |
$title .= $sep.$wp_query->query_vars['paged'].'/'.$wp_query->max_num_pages; | |
$title .= $sep.get_bloginfo('description'); | |
} | |
} | |
} else if ( is_singular() ) { | |
global $post; | |
if ( empty($post) ) { | |
$post = $wp_query->get_queried_object(); | |
} | |
$fixed_title = wpseo_get_value('title'); | |
if ( $fixed_title ) { | |
$title = $fixed_title; | |
} else { | |
if (isset($options['title-'.$post->post_type]) && !empty($options['title-'.$post->post_type]) ) { | |
$title = wpseo_replace_vars($options['title-'.$post->post_type], (array) $post ); | |
} else { | |
$title = apply_filters('single_post_title', $title); | |
$title = $title.$sep.get_bloginfo('name'); | |
} | |
} | |
} else if ( is_search() ) { | |
if ( isset($options['title-search']) && !empty($options['title-search']) ) | |
$title = wpseo_replace_vars($options['title-search'], (array) $wp_query->get_queried_object() ); | |
else { | |
$title = __('Search for "').get_search_query().'"'; | |
if ( isset($wp_query->query_vars['paged']) && $wp_query->query_vars['paged'] ) | |
$title .= $sep.$wp_query->query_vars['paged'].'/'.$wp_query->max_num_pages; | |
$title .= $sep.get_bloginfo('name'); | |
} | |
} else if ( is_category() || is_tag() || is_tax() ) { | |
$term = $wp_query->get_queried_object(); | |
$title = trim( wpseo_get_term_meta( $term, $term->taxonomy, 'title' ) ); | |
if ( !$title || empty($title) ) { | |
if ( isset($options['title-'.$term->taxonomy]) && !empty($options['title-'.$term->taxonomy]) ) { | |
$title = wpseo_replace_vars($options['title-'.$term->taxonomy], (array) $term ); | |
} else { | |
if ( is_category() ) | |
$title = single_cat_title('', false); | |
else if ( is_tag() ) | |
$title = single_tag_title('', false); | |
else if ( is_tax() ) { | |
if ( function_exists('single_term_title') ) { | |
$title = single_term_title('', false); | |
} else { | |
$term = $wp_query->get_queried_object(); | |
$title = $term->name; | |
} | |
} | |
if ( isset($wp_query->query_vars['paged']) && $wp_query->query_vars['paged'] ) | |
$title .= $sep.$wp_query->query_vars['paged'].'/'.$wp_query->max_num_pages; | |
$title .= $sep.get_bloginfo('name'); | |
} | |
} | |
} else if ( is_author() ) { | |
$author_id = get_query_var('author'); | |
$title = get_the_author_meta('wpseo_title', $author_id); | |
if ( empty($title) ) { | |
if ( isset($options['title-author']) && !empty($options['title-author']) ) | |
$title = wpseo_replace_vars($options['title-author'], array() ); | |
else { | |
$title = get_the_author_meta('display_name', $author_id); | |
if ( isset($wp_query->query_vars['paged']) && $wp_query->query_vars['paged'] ) | |
$title .= $sep.$wp_query->query_vars['paged'].'/'.$wp_query->max_num_pages; | |
$title .= $sep.get_bloginfo('name'); | |
} | |
} | |
} else if ( function_exists('is_post_type_archive') && is_post_type_archive() ) { | |
$post_type = get_post_type(); | |
if ( isset($options['title-ptarchive-'.$post_type]) && '' != $options['title-ptarchive-'.$post_type] ) { | |
//$title = $options['title-ptarchive-'.$post_type]; | |
// Should be.... | |
$title = wpseo_replace_vars($options['title-ptarchive-'.$post_type], (array) $post ); | |
} else { | |
$post_type_obj = get_post_type_object( $post_type ); | |
$title = $post_type_obj->labels->menu_name.$sep.get_bloginfo('name'); | |
} | |
} else if ( is_archive() ) { | |
if ( isset($options['title-archive']) && !empty($options['title-archive']) ) | |
$title = wpseo_replace_vars($options['title-archive'], array('post_title' => $title) ); | |
else { | |
if ( is_month() ) | |
$title = single_month_title(' ', false).' '.__('Archives'); | |
else if ( is_year() ) | |
$title = get_query_var('year').' '.__('Archives'); | |
if ( isset($wp_query->query_vars['paged']) && $wp_query->query_vars['paged'] ) | |
$title .= $sep.$wp_query->query_vars['paged'].'/'.$wp_query->max_num_pages; | |
$title .= $sep.get_bloginfo('name'); | |
} | |
} else if ( is_404() ) { | |
if ( isset($options['title-404']) && !empty($options['title-404']) ) | |
$title = wpseo_replace_vars($options['title-404'], array('post_title' => $title) ); | |
else | |
$title = __('Page not found').$sep.get_bloginfo('name'); | |
} | |
return esc_html( strip_tags( stripslashes( apply_filters( 'wpseo_title', $title ) ) ) ); | |
} | |
function force_wp_title() { | |
wp_reset_query(); | |
return wp_title('', 0); | |
} | |
function fix_generator($generator) { | |
return preg_replace('/\s?'.get_bloginfo('version').'/','',$generator); | |
} | |
function promo() { | |
echo "\n<!-- This site is optimized with the Yoast WordPress SEO plugin v".WPSEO_VERSION." - http://yoast.com/wordpress/seo/ -->\n"; | |
} | |
function head() { | |
$options = get_wpseo_options(); | |
global $wp_query; | |
$this->promo(); | |
$this->metadesc(); | |
$this->metakeywords(); | |
$this->canonical(); | |
$this->adjacent_rel_links(); | |
$this->robots(); | |
if ( is_front_page() ) { | |
if (!empty($options['googleverify'])) { | |
$google_meta = $options['googleverify']; | |
if ( strpos($google_meta, 'content') ) { | |
preg_match('/content="([^"]+)"/', $google_meta, $match); | |
$google_meta = $match[1]; | |
} | |
echo "<meta name=\"google-site-verification\" content=\"$google_meta\" />\n"; | |
} | |
if (!empty($options['msverify'])) { | |
$bing_meta = $options['msverify']; | |
if ( strpos($bing_meta, 'content') ) { | |
preg_match('/content="([^"]+)"/', $bing_meta, $match); | |
$bing_meta = $match[1]; | |
} | |
echo "<meta name=\"msvalidate.01\" content=\"$bing_meta\" />\n"; | |
} | |
if (!empty($options['alexaverify'])) { | |
echo "<meta name=\"alexaVerifyID\" content=\"".esc_attr($options['alexaverify'])."\" />\n"; | |
} | |
} | |
do_action( 'wpseo_head' ); | |
echo "<!-- / Yoast WordPress SEO plugin. -->\n\n"; | |
} | |
function robots() { | |
global $wp_query; | |
$options = get_wpseo_options(); | |
$robots = array(); | |
$robots['index'] = 'index'; | |
$robots['follow'] = 'follow'; | |
$robots['other'] = array(); | |
if ( is_singular() ) { | |
if ( wpseo_get_value('meta-robots-noindex') ) | |
$robots['index'] = 'noindex'; | |
if ( wpseo_get_value('meta-robots-nofollow') ) | |
$robots['follow'] = 'nofollow'; | |
if ( wpseo_get_value('meta-robots-adv') && wpseo_get_value('meta-robots-adv') != 'none' ) { | |
foreach ( explode( ',', wpseo_get_value('meta-robots-adv') ) as $r ) { | |
$robots['other'][] = $r; | |
} | |
} | |
} else { | |
if ( is_search() ) { | |
$robots['index'] = 'noindex'; | |
$robots['follow'] = 'follow'; | |
} else if ( is_tax() || is_tag() || is_category() ) { | |
$term = $wp_query->get_queried_object(); | |
if ( ( is_category() && isset( $options['noindexcat'] ) && $options['noindexcat'] ) || | |
( is_tag() && isset( $options['noindextag'] ) && $options['noindextag']) || | |
( is_tax('post_format') && isset( $options['noindexpostformat'] ) && $options['noindexpostformat'] ) ) { | |
$robots['index'] = 'noindex'; | |
} else { | |
if ( wpseo_get_term_meta( $term, $term->taxonomy, 'noindex' ) ) | |
$robots['index'] = 'noindex'; | |
} | |
if ( wpseo_get_term_meta( $term, $term->taxonomy, 'nofollow' ) ) | |
$robots['follow'] = 'nofollow'; | |
} else if ( | |
(is_author() && isset($options['noindexauthor']) && $options['noindexauthor']) || | |
(is_date() && isset($options['noindexdate']) && $options['noindexdate']) || | |
(is_home() && get_query_var('paged') > 1) ) | |
{ | |
$robots['index'] = 'noindex'; | |
$robots['follow'] = 'follow'; | |
} | |
if ( $wp_query->query_vars['paged'] && $wp_query->query_vars['paged'] > 1 && isset($options['noindexsubpages']) && $options['noindexsubpages'] ) { | |
$robots['index'] = 'noindex'; | |
$robots['follow'] = 'follow'; | |
} | |
} | |
foreach ( array('noodp','noydir') as $robot ) { | |
if ( isset($options[$robot]) && $options[$robot] ) { | |
$robots['other'][] = $robot; | |
} | |
} | |
$robotsstr = $robots['index'].','.$robots['follow']; | |
$robots['other'] = array_unique( $robots['other'] ); | |
foreach ($robots['other'] as $robot) { | |
$robotsstr .= ','.$robot; | |
} | |
$robotsstr = preg_replace( '/^index,follow,?/', '', $robotsstr ); | |
if ($robotsstr != '') { | |
echo '<meta name="robots" content="'.$robotsstr.'"/>'."\n"; | |
} | |
} | |
function canonical( $echo = true, $unpaged = false ) { | |
$options = get_wpseo_options(); | |
$canonical = false; | |
// Set decent canonicals for homepage, singulars and taxonomy pages | |
if ( is_singular() ) { | |
if ( wpseo_get_value('canonical') && wpseo_get_value('canonical') != '' ) { | |
$canonical = wpseo_get_value('canonical'); | |
} else { | |
$canonical = get_permalink( get_queried_object() ); | |
// Fix paginated pages | |
if ( get_query_var('page') > 1 ) { | |
global $wp_rewrite; | |
if ( !$wp_rewrite->using_permalinks() ) { | |
$link = add_query_arg( 'page', get_query_var('page'), $link ); | |
} else { | |
$link = user_trailingslashit( trailingslashit( $link ) . get_query_var( 'page' ) ); | |
} | |
} | |
} | |
} else { | |
if ( is_search() ) { | |
$canonical = get_search_link(); | |
} else if ( is_front_page() ) { | |
$canonical = home_url( '/' ); | |
} else if ( $this->is_posts_page() ) { | |
$canonical = get_permalink( get_option( 'page_for_posts' ) ); | |
} else if ( is_tax() || is_tag() || is_category() ) { | |
$term = get_queried_object(); | |
$canonical = wpseo_get_term_meta( $term, $term->taxonomy, 'canonical' ); | |
if ( !$canonical ) | |
$canonical = get_term_link( $term, $term->taxonomy ); | |
} else if ( function_exists('get_post_type_archive_link') && is_post_type_archive() ) { | |
$canonical = get_post_type_archive_link( get_post_type() ); | |
} else if ( is_author() ) { | |
$canonical = get_author_posts_url( get_query_var('author'), get_query_var('author_name') ); | |
} else if ( is_archive() ) { | |
if ( is_date() ) { | |
if ( is_day() ) { | |
$canonical = get_day_link( get_query_var('year'), get_query_var('monthnum'), get_query_var('day') ); | |
} else if ( is_month() ) { | |
$canonical = get_month_link( get_query_var('year'), get_query_var('monthnum') ); | |
} else if ( is_year() ) { | |
$canonical = get_year_link( get_query_var('year') ); | |
} | |
} | |
} | |
if ( $canonical && $unpaged ) | |
return $canonical; | |
if ( $canonical && get_query_var('paged') > 1 ) { | |
global $wp_rewrite; | |
if ( !$wp_rewrite->using_permalinks() ) { | |
$canonical = add_query_arg( 'paged', get_query_var('paged'), $canonical ); | |
} else { | |
$canonical = user_trailingslashit( trailingslashit( $canonical ) . trailingslashit( $wp_rewrite->pagination_base ) . get_query_var('paged') ); | |
} | |
} | |
} | |
if ( $canonical && isset($options['force_transport']) && 'default' != $options['force_transport'] ) | |
$canonical = preg_replace( '/https?/', $options['force_transport'], $canonical ); | |
$canonical = apply_filters( 'wpseo_canonical', $canonical ); | |
if ( $canonical && !is_wp_error( $canonical ) ) { | |
if ( $echo ) | |
echo '<link rel="canonical" href="' . esc_url( $canonical, null, 'other' ) . '" />'."\n"; | |
else | |
return $canonical; | |
} | |
} | |
/** | |
* Adds 'prev' and 'next' links to archives, as described in this Google blog post: http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html | |
* | |
* @since 1.0.3 | |
*/ | |
function adjacent_rel_links() { | |
global $wp_query; | |
if ( !is_singular() ) { | |
$url = $this->canonical( false, true ); | |
if ( $url ) { | |
$paged = get_query_var('paged'); | |
if ( 0 == $paged ) | |
$paged = 1; | |
if ( $paged > 1 ) | |
$this->get_adjacent_rel_link( "prev", $url, $paged-1, true ); | |
if ( $paged < $wp_query->max_num_pages ) | |
$this->get_adjacent_rel_link( "next", $url, $paged+1, true ); | |
} | |
} else { | |
$numpages = substr_count( $wp_query->post->post_content, '<!--nextpage-->' ) + 1; | |
if ( $numpages > 1 ) { | |
$page = get_query_var('page'); | |
if ( !$page ) | |
$page = 1; | |
$url = get_permalink( $wp_query->post->ID ); | |
// If the current page is the frontpage, pagination should use /base/ | |
if ( $this->is_home_static_page() ) | |
$usebase = true; | |
else | |
$usebase = false; | |
if ( $page > 1 ) | |
$this->get_adjacent_rel_link( "prev", $url, $page-1, $usebase, 'single_paged' ); | |
if ( $page < $numpages ) | |
$this->get_adjacent_rel_link( "next", $url, $page+1, $usebase, 'single_paged' ); | |
} | |
} | |
} | |
/** | |
* Get adjacent pages link for archives | |
* | |
* @param string $rel Link relationship, prev or next. | |
* @param string $url the unpaginated URL of the current archive. | |
* @param string $page the page number to add on to $url for the $link tag. | |
* @param boolean $incl_pagination_base whether or not to include /page/ or not. | |
* @return string $link link element | |
* | |
* @since 1.0.2 | |
*/ | |
function get_adjacent_rel_link( $rel, $url, $page, $incl_pagination_base ) { | |
global $wp_rewrite; | |
if ( !$wp_rewrite->using_permalinks() ) { | |
if ( $page > 1 ) | |
$url = add_query_arg( 'paged', $page, $url ); | |
} else { | |
if ( $page > 1 ) { | |
$base = ''; | |
if ( $incl_pagination_base ) | |
$base = trailingslashit( $wp_rewrite->pagination_base ); | |
$url = user_trailingslashit( trailingslashit( $url ) . $base . $page ); | |
} | |
} | |
$link = "<link rel=\"$rel\" href=\"$url\" />\n"; | |
echo apply_filters( $rel."_rel_link", $link ); | |
} | |
function metakeywords() { | |
global $wp_query; | |
$options = get_wpseo_options(); | |
if ( !isset( $options['usemetakeywords'] ) || !$options['usemetakeywords'] ) | |
return; | |
$metakey = ''; | |
if ( is_singular() ) { | |
global $post; | |
$metakey = wpseo_get_value('metakeywords'); | |
if ( !$metakey || empty( $metakey ) && isset( $options['metakey-'.$post->post_type] ) ) { | |
$metakey = wpseo_replace_vars($options['metakey-'.$post->post_type], (array) $post ); | |
} | |
} else { | |
if ( $this->is_home_posts_page() && isset($options['metakey-home']) ) { | |
$metakey = wpseo_replace_vars($options['metakey-home'], array() ); | |
} else if ( $this->is_home_static_page() ) { | |
global $post; | |
$metakey = wpseo_get_value('metakey'); | |
if ( ($metakey == '' || !$metakey) && isset($options['metakey-'.$post->post_type]) ) | |
$metakey = wpseo_replace_vars($options['metakey-'.$post->post_type], (array) $post ); | |
} else if ( is_category() || is_tag() || is_tax() ) { | |
$term = $wp_query->get_queried_object(); | |
$metakey = wpseo_get_term_meta( $term, $term->taxonomy, 'metakey' ); | |
if ( !$metakey && isset($options['metakey-'.$term->taxonomy])) | |
$metakey = wpseo_replace_vars($options['metakey-'.$term->taxonomy], (array) $term ); | |
} else if ( is_author() ) { | |
$author_id = get_query_var('author'); | |
$metakey = get_the_author_meta('metakey', $author_id); | |
if ( !$metakey && isset($options['metakey-author']) ) | |
$metakey = wpseo_replace_vars($options['metakey-author'], (array) $wp_query->get_queried_object() ); | |
} | |
} | |
$metakey = trim( $metakey ); | |
if ( !empty( $metakey ) ) | |
echo '<meta name="keywords" content="'.esc_attr( strip_tags( stripslashes( $metakey ) ) ).'"/>'."\n"; | |
} | |
function metadesc( $echo = true ) { | |
if ( get_query_var('paged') && get_query_var('paged') > 1 ) | |
return; | |
global $post, $wp_query; | |
$options = get_wpseo_options(); | |
$metadesc = ''; | |
if (is_singular()) { | |
$metadesc = wpseo_get_value('metadesc'); | |
if ($metadesc == '' || !$metadesc) { | |
if ( isset($options['metadesc-'.$post->post_type]) && $options['metadesc-'.$post->post_type] != '' ) | |
$metadesc = wpseo_replace_vars($options['metadesc-'.$post->post_type], (array) $post ); | |
} | |
} else { | |
if ( is_search() ) { | |
$metadesc = ''; | |
} else if ( $this->is_home_posts_page() && isset($options['metadesc-home']) ) { | |
$metadesc = wpseo_replace_vars($options['metadesc-home'], array() ); | |
} else if ( $this->is_posts_page() ) { | |
$metadesc = wpseo_get_value('metadesc', get_option('page_for_posts') ); | |
if ( ($metadesc == '' || !$metadesc) && isset( $options['metadesc-'.$page->post_type] ) ) { | |
$page = get_post( get_option('page_for_posts') ); | |
$metadesc = wpseo_replace_vars( $options['metadesc-'.$page->post_type], (array) $page ); | |
} | |
} else if ( $this->is_home_static_page() ) { | |
global $post; | |
$metadesc = wpseo_get_value('metadesc'); | |
if ( ($metadesc == '' || !$metadesc) && isset($options['metadesc-'.$post->post_type]) ) | |
$metadesc = wpseo_replace_vars($options['metadesc-'.$post->post_type], (array) $post ); | |
} else if ( is_category() || is_tag() || is_tax() ) { | |
$term = $wp_query->get_queried_object(); | |
$metadesc = wpseo_get_term_meta( $term, $term->taxonomy, 'desc' ); | |
if ( !$metadesc && isset($options['metadesc-'.$term->taxonomy])) | |
$metadesc = wpseo_replace_vars($options['metadesc-'.$term->taxonomy], (array) $term ); | |
} else if ( is_author() ) { | |
$author_id = get_query_var('author'); | |
$metadesc = get_the_author_meta('wpseo_metadesc', $author_id); | |
if ( !$metadesc && isset($options['metadesc-author'])) | |
$metadesc = wpseo_replace_vars($options['metadesc-author'], (array) $wp_query->get_queried_object() ); | |
} else if ( function_exists('is_post_type_archive') && is_post_type_archive() ) { | |
$post_type = get_post_type(); | |
if ( isset($options['metadesc-ptarchive-'.$post_type]) && '' != $options['metadesc-ptarchive-'.$post_type] ) { | |
$metadesc = $options['metadesc-ptarchive-'.$post_type]; | |
} | |
} | |
} | |
$metadesc = apply_filters( 'wpseo_metadesc', trim( $metadesc ) ); | |
if ( $echo ) { | |
if ( !empty( $metadesc ) ) | |
echo '<meta name="description" content="'.esc_attr( strip_tags( stripslashes( $metadesc ) ) ).'"/>'."\n"; | |
else if ( current_user_can('manage_options') && is_singular() ) | |
echo '<!-- '.__( 'Admin only notice: this page doesn\'t show a meta description because it doesn\'t have one, either write it for this page specifically or go into the SEO -> Titles menu and set up a template.', 'wordpress-seo' ).' -->'."\n"; | |
} else { | |
return $metadesc; | |
} | |
} | |
function page_redirect( $input ) { | |
if ( is_singular() ) { | |
global $post; | |
if ( !isset($post) ) | |
return; | |
$redir = wpseo_get_value('redirect', $post->ID); | |
if (!empty($redir)) { | |
wp_redirect($redir, 301); | |
exit; | |
} | |
} | |
} | |
function noindex_page() { | |
$this->promo(); | |
echo '<meta name="robots" content="noindex" />'."\n"; | |
} | |
function noindex_feed() { | |
echo '<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />'."\n"; | |
} | |
function nofollow_link($output) { | |
return str_replace('<a ','<a rel="nofollow" ',$output); | |
} | |
function echo_nofollow() { | |
return ' rel="nofollow"'; | |
} | |
function archive_redirect() { | |
global $wp_query; | |
$options = get_wpseo_options(); | |
if ( | |
( isset($options['disabledate']) && $options['disabledate'] && $wp_query->is_date ) || | |
( isset($options['disableauthor']) && $options['disableauthor'] && $wp_query->is_author ) || | |
( isset($options['disablepostformats']) && $options['disablepostformats'] && $wp_query->is_tax('post_format') ) | |
) { | |
wp_redirect(get_bloginfo('url'),301); | |
exit; | |
} | |
} | |
function attachment_redirect() { | |
global $post; | |
if ( is_attachment() && isset($post->post_parent) && is_numeric($post->post_parent) ) { | |
wp_redirect(get_permalink($post->post_parent), 301); | |
exit; | |
} | |
} | |
function add_trailingslash($url, $type) { | |
// trailing slashes for everything except is_single() | |
// Thanks to Mark Jaquith for this | |
if ( 'single' === $type ) { | |
return $url; | |
} else { | |
return trailingslashit($url); | |
} | |
} | |
public function clean_permalink( $headers ) { | |
if ( is_robots() || get_query_var('sitemap') ) | |
return; | |
global $wp_query; | |
$options = get_wpseo_options(); | |
// Recreate current URL | |
$cururl = 'http'; | |
if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") { | |
$cururl .= "s"; | |
} | |
$cururl .= "://"; | |
if ($_SERVER["SERVER_PORT"] != "80") | |
$cururl .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; | |
else | |
$cururl .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; | |
$properurl = ''; | |
if ( is_singular() ) { | |
global $post; | |
if ( empty($post) ) | |
$post = $wp_query->get_queried_object(); | |
$properurl = get_permalink($post->ID); | |
$page = get_query_var('page'); | |
if ( $page && $page != 1 ) { | |
$post = get_post($post->ID); | |
$page_count = substr_count($post->post_content, '<!--nextpage-->'); | |
if ( $page > ($page_count+1) ) | |
$properurl = user_trailingslashit( trailingslashit( $properurl ) . ( $page_count + 1 ) ); | |
else | |
$properurl = user_trailingslashit( trailingslashit( $properurl ) . $page ); | |
} | |
// Fix reply to comment links, whoever decided this should be a GET variable? | |
$result = preg_match('/(\?replytocom=[^&]+)/', $_SERVER["REQUEST_URI"], $matches); | |
if ( $result ) | |
$properurl .= str_replace('?replytocom=','#comment-',$matches[0]); | |
// Prevent cleaning out posts & page previews for people capable of viewing them | |
if ( isset($_GET['preview']) && isset($_GET['preview_nonce']) && current_user_can('edit_post') ) | |
$properurl = ''; | |
} else if ( is_front_page() ) { | |
if ( $this->is_home_posts_page() ) { | |
$properurl = get_bloginfo('url').'/'; | |
} elseif ( $this->is_home_static_page() ) { | |
global $post; | |
$properurl = get_permalink( $post->ID ); | |
} | |
} else if ( is_category() || is_tag() || is_tax() ) { | |
$term = $wp_query->get_queried_object(); | |
if ( is_feed() ) | |
$properurl = get_term_feed_link( $term, $term->taxonomy ); | |
else | |
$properurl = get_term_link( $term, $term->taxonomy ); | |
} else if ( is_search() ) { | |
$s = preg_replace( '/(%20|\+)/', ' ', get_search_query() ); | |
$properurl = get_bloginfo('url').'/?s=' . rawurlencode( $s ); | |
} else if ( is_404() ) { | |
if ( function_exists('is_multisite') && is_multisite() && !is_subdomain_install() && is_main_site() ) { | |
if ($cururl == get_bloginfo('url').'/blog/' || $cururl == get_bloginfo('url').'/blog' ) { | |
if ( $this->is_home_static_page() ) | |
$properurl = get_permalink( get_option('page_for_posts') ); | |
else | |
$properurl = get_bloginfo('url').'/'; | |
} | |
} | |
} | |
if ( !empty($properurl) && $wp_query->query_vars['paged'] != 0 && $wp_query->post_count != 0 ) { | |
if ( is_search() ) { | |
$properurl = get_bloginfo('url').'/page/' . $wp_query->query_vars['paged'] . '/?s=' . rawurlencode( $s ); | |
} else { | |
$properurl = user_trailingslashit( trailingslashit($properurl). 'page/' . $wp_query->query_vars['paged'] ); | |
} | |
} | |
// Prevent cleaning out the WP Subscription managers interface for everyone | |
foreach (array('wp-subscription-manager') as $get) { | |
if ( isset($_GET[$get]) ) { | |
$properurl = ''; | |
} | |
} | |
// Allow plugins to register their own variables not to clean | |
$whitelisted_extravars = apply_filters( 'wpseo_whitelist_permalink_vars', array() ); | |
if (isset($options['cleanpermalink-googlesitesearch']) && $options['cleanpermalink-googlesitesearch']) { | |
// Prevent cleaning out Google Site searches | |
$whitelisted_extravars = array_merge( $whitelisted_extravars, array('q','cx','debug','cof','ie','sa') ); | |
} | |
if (isset($options['cleanpermalink-googlecampaign']) && $options['cleanpermalink-googlecampaign']) { | |
// Prevent cleaning out Google Analytics campaign variables | |
$whitelisted_extravars = array_merge( $whitelisted_extravars, array('utm_campaign','utm_medium','utm_source','utm_content','utm_term') ); | |
} | |
if ( isset($options['cleanpermalink-extravars']) && strlen($options['cleanpermalink-extravars']) > 0 ) { | |
$whitelisted_extravars = array_merge( $whitelisted_extravars, explode( ',', $options['cleanpermalink-extravars'] ) ); | |
} | |
foreach ( $whitelisted_extravars as $get ) { | |
if ( isset($_GET[ trim( $get ) ]) ) { | |
$properurl = ''; | |
} | |
} | |
if ( !empty($properurl) && $cururl != $properurl ) { | |
wp_redirect($properurl, 301); | |
exit; | |
} | |
} | |
function rss_replace_vars($temp) { | |
global $post; | |
$authorlink = '<a rel="author" href="'.get_author_posts_url( $post->post_author ).'">'.get_the_author().'</a>'; | |
$postlink = '<a href="'.get_permalink().'">'.get_the_title()."</a>"; | |
$bloglink = '<a href="'.get_bloginfo('url').'">'.get_bloginfo('name').'</a>'; | |
$blogdesclink = '<a href="'.get_bloginfo('url').'">'.get_bloginfo('name').' - '.get_bloginfo('description').'</a>'; | |
$temp = stripslashes($temp); | |
$temp = str_replace("%%AUTHORLINK%%", $authorlink, $temp); | |
$temp = str_replace("%%POSTLINK%%", $postlink, $temp); | |
$temp = str_replace("%%BLOGLINK%%", $bloglink, $temp); | |
$temp = str_replace("%%BLOGDESCLINK%%", $blogdesclink, $temp); | |
return $temp; | |
} | |
function embed_rssfooter($content) { | |
if(is_feed()) { | |
$options = get_wpseo_options(); | |
if ( isset($options['rssbefore']) && !empty($options['rssbefore']) ) { | |
$content = "<p>" . $this->rss_replace_vars($options['rssbefore']) . "</p>" . $content; | |
} | |
if ( isset($options['rssafter']) && !empty($options['rssafter']) ) { | |
$content .= "<p>" . $this->rss_replace_vars($options['rssafter']). "</p>"; | |
} | |
} | |
return $content; | |
} | |
function embed_rssfooter_excerpt($content) { | |
if(is_feed()) { | |
$options = get_wpseo_options(); | |
if ( isset($options['rssbefore']) && !empty($options['rssbefore']) ) { | |
$content = "<p>".$this->rss_replace_vars($options['rssbefore']) . "</p><p>" . $content ."</p>"; | |
} | |
if ( isset($options['rssafter']) && !empty($options['rssafter']) ) { | |
$content = "<p>".$content."</p><p>".$this->rss_replace_vars($options['rssafter'])."</p>"; | |
} | |
} | |
return $content; | |
} | |
function flush_cache() { | |
global $wp_query, $post, $wpseo_ob; | |
if ( !$wpseo_ob ) | |
return; | |
$content = ob_get_contents(); | |
$title = $this->title( '' ); | |
$content = preg_replace('/<title>(.*)<\/title>/','<title>'.$title.'</title>', $content); | |
ob_end_clean(); | |
echo $content; | |
} | |
function force_rewrite_output_buffer() { | |
global $wpseo_ob; | |
$wpseo_ob = true; | |
ob_start(); | |
} | |
} | |
$wpseo_front = new WPSEO_Frontend; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment