88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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();
 |