You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.4 KiB
61 lines
1.4 KiB
<?php |
|
/** |
|
* WPSEO plugin file. |
|
* |
|
* @package WPSEO\Admin\Links |
|
*/ |
|
|
|
/** |
|
* Represents the filter for filtering links. |
|
*/ |
|
class WPSEO_Link_Filter { |
|
|
|
/** |
|
* Path to the current page. |
|
* |
|
* @var string|null |
|
*/ |
|
protected $current_page_path; |
|
|
|
/** |
|
* Sets the current page path. |
|
* |
|
* @param string $current_page The current page. |
|
*/ |
|
public function __construct( $current_page = '' ) { |
|
$this->current_page_path = untrailingslashit( WPSEO_Link_Utils::get_url_part( $current_page, 'path' ) ); |
|
} |
|
|
|
/** |
|
* Filters all internal links that contains an fragment in the URL. |
|
* |
|
* @param WPSEO_Link $link The link that might be filtered. |
|
* |
|
* @return bool False when url contains a fragment. |
|
*/ |
|
public function internal_link_with_fragment_filter( WPSEO_Link $link ) { |
|
// When the type is external. |
|
if ( $link->get_type() === WPSEO_Link::TYPE_EXTERNAL ) { |
|
return true; |
|
} |
|
|
|
$url_parts = wp_parse_url( $link->get_url() ); |
|
|
|
if ( isset( $url_parts['path'] ) ) { |
|
return ! $this->is_current_page( untrailingslashit( $url_parts['path'] ) ); |
|
} |
|
|
|
return ( ! isset( $url_parts['fragment'] ) && ! isset( $url_parts['query'] ) ); |
|
} |
|
|
|
/** |
|
* Is the url path the same as the current page path. |
|
* |
|
* @param string $url_path The url path. |
|
* |
|
* @return bool True when path is equal to the current page path. |
|
*/ |
|
protected function is_current_page( $url_path ) { |
|
return ( ! empty( $url_path ) && $url_path === $this->current_page_path ); |
|
} |
|
}
|
|
|