wp_back/wp-content/plugins/visual-portfolio/classes/class-seo-optimization.php
2024-05-20 15:37:46 +03:00

88 lines
2.3 KiB
PHP

<?php
/**
* Seo Optimization.
*
* @package visual-portfolio
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class Visual_Portfolio_SEO_Optimization
*/
class Visual_Portfolio_SEO_Optimization {
/**
* Visual_Portfolio_SEO_Optimization constructor.
*/
public function __construct() {
add_action( 'init', array( $this, 'init' ), 9 );
}
/**
* Initialize archive.
*
* @see __construct
*/
public function init() {
add_filter( 'get_canonical_url', array( $this, 'optimize_canonical_url' ), 10, 2 );
add_filter( 'get_shortlink', array( $this, 'optimize_shortlink' ), 10, 3 );
}
/**
* Optimize canonical URL.
*
* @param string $canonical_url - Canonical URL.
* @param object $post - Current Post Object.
* @return string
*/
public function optimize_canonical_url( $canonical_url, $post ) {
return $this->optimize_url( $canonical_url, $post->ID );
}
/**
* Optimize shortlink.
*
* @param string $shortlink - Shortlink URL.
* @param int $id - Post ID, or 0 for the current post.
* @param string $context - The context for the link. One of 'post' or 'query'.
* @return string
*/
public function optimize_shortlink( $shortlink, $id, $context ) {
return 0 === $id && 'query' === $context ? $this->optimize_url( $shortlink, get_queried_object_id() ) : $shortlink;
}
/**
* Optimize url by supported GET variables: vp_page, vp_filter, vp_sort and vp_search.
*
* @param string $url - Not optimized URL.
* @param int $post_id - Post ID.
* @return string
*/
public function optimize_url( $url, $post_id ) {
if (
! Visual_Portfolio_Archive_Mapping::is_archive(
array(
'content_source' => 'post-based',
'posts_source' => 'current_query',
),
$post_id
) &&
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
isset( $_GET ) && ! empty( $_GET )
) {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
foreach ( $_GET as $key => $value ) {
if ( 'vp_page' === $key || 'vp_filter' === $key || 'vp_sort' === $key || 'vp_search' === $key ) {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
$url = add_query_arg( array_map( 'sanitize_text_field', wp_unslash( array( $key => $value ) ) ), $url );
}
}
}
return $url;
}
}
new Visual_Portfolio_SEO_Optimization();