[Back]
<?php
/**
 * Yoast SEO Plugin.
 *
 * @package visual-portfolio
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Class Visual_Portfolio_3rd_Yoast
 */
class Visual_Portfolio_3rd_Yoast {
	/**
	 * Visual_Portfolio_3rd_Yoast constructor.
	 */
	public function __construct() {
		// Fixed canonical links.
		add_filter( 'wpseo_canonical', array( 'Visual_Portfolio_Archive_Mapping', 'get_canonical' ), 12, 1 );
		add_filter( 'wpseo_opengraph_url', array( 'Visual_Portfolio_Archive_Mapping', 'get_canonical' ), 12, 1 );
		add_filter( 'wpseo_schema_webpage', array( $this, 'graph_schema_webpage' ), 12, 1 );
		add_filter( 'wpseo_schema_breadcrumb', array( $this, 'graph_schema_breadcrumb' ), 12, 1 );
		add_filter( 'wpseo_opengraph_title', array( $this, 'graph_title' ), 12, 1 );
	}

	/**
	 * Allows changing webpage graph piece output.
	 *
	 * @param array $webpage_graph_piece - The webpage graph piece to filter.
	 * @return array
	 */
	public function graph_schema_webpage( $webpage_graph_piece ) {
		$webpage_graph_piece['@id']               = Visual_Portfolio_Archive_Mapping::get_canonical( $webpage_graph_piece['@id'] );
		$webpage_graph_piece['url']               = Visual_Portfolio_Archive_Mapping::get_canonical( $webpage_graph_piece['url'] );
		$webpage_graph_piece['breadcrumb']['@id'] = Visual_Portfolio_Archive_Mapping::get_canonical_anchor( $webpage_graph_piece['breadcrumb']['@id'] );
		$webpage_graph_piece['name']              = Visual_Portfolio_Archive_Mapping::get_current_term_title() ?? $webpage_graph_piece['name'];

		if ( ! empty( $webpage_graph_piece['potentialAction'] ) ) {
			foreach ( $webpage_graph_piece['potentialAction'] as $key => $potential_action ) {
				if ( isset( $potential_action['target'] ) && ! is_array( $potential_action['target'] ) && isset( $potential_action['@type'] ) && 'ReadAction' === $potential_action['@type'] ) {
					$webpage_graph_piece['potentialAction'][ $key ]['target'] = Visual_Portfolio_Archive_Mapping::get_canonical( $potential_action['target'] );
				}
			}
		}

		return $webpage_graph_piece;
	}

	/**
	 * Allows changing breadcrumb graph piece output.
	 *
	 * @param array $breadcrumb_graph_piece - The breadcrumb graph piece to filter.
	 * @return array
	 */
	public function graph_schema_breadcrumb( $breadcrumb_graph_piece ) {
		$breadcrumb_graph_piece['@id'] = Visual_Portfolio_Archive_Mapping::get_canonical_anchor( $breadcrumb_graph_piece['@id'] );

		return $breadcrumb_graph_piece;
	}

	/**
	 * Allow changing the Yoast SEO generated title.
	 *
	 * @param string $title - Current Graph Title.
	 * @return string
	 */
	public function graph_title( $title ) {
		return Visual_Portfolio_Archive_Mapping::get_current_term_title() ?? $title;
	}
}
new Visual_Portfolio_3rd_Yoast();