Commit realizado el 12:13:52 08-04-2024
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
/**
|
||||
* WooCommerce product sitemaps adjustments.
|
||||
*
|
||||
* @since 1.0.32
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\WooCommerce
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\WooCommerce;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Helpers\Str;
|
||||
use RankMath\Helpers\Attachment;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* WC Sitemap class.
|
||||
*/
|
||||
class Sitemap {
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function sitemap() {
|
||||
$this->filter( 'rank_math/sitemap/exclude_post_type', 'sitemap_exclude_post_type', 10, 2 );
|
||||
$this->filter( 'rank_math/sitemap/post_type_archive_link', 'sitemap_taxonomies', 10, 2 );
|
||||
$this->filter( 'rank_math/sitemap/post_type_archive_link', 'sitemap_post_type_archive_link', 10, 2 );
|
||||
$this->filter( 'rank_math/sitemap/urlimages', 'add_product_images_to_xml_sitemap', 10, 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure product variations and shop coupons are not included in the XML sitemap.
|
||||
*
|
||||
* @param bool $bool Whether or not to include this post type in the XML sitemap.
|
||||
* @param string $post_type The post type of the post.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function sitemap_exclude_post_type( $bool, $post_type ) {
|
||||
if ( in_array( $post_type, [ 'product_variation', 'shop_coupon' ], true ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return $bool;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure product attribute taxonomies are not included in the XML sitemap.
|
||||
*
|
||||
* @param bool $bool Whether or not to include this post type in the XML sitemap.
|
||||
* @param string $taxonomy The taxonomy to check against.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function sitemap_taxonomies( $bool, $taxonomy ) {
|
||||
if ( in_array( $taxonomy, [ 'product_type', 'product_shipping_class', 'shop_order_status' ], true ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( Str::starts_with( 'pa_', $taxonomy ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return $bool;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the archive link on the product sitemap.
|
||||
*
|
||||
* @param string $link The archive link.
|
||||
* @param string $post_type The post type to check against.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function sitemap_post_type_archive_link( $link, $post_type ) {
|
||||
if ( 'product' !== $post_type || ! function_exists( 'wc_get_page_id' ) ) {
|
||||
return $link;
|
||||
}
|
||||
|
||||
$shop_page_id = wc_get_page_id( 'shop' );
|
||||
$home_page_id = (int) get_option( 'page_on_front' );
|
||||
if ( 1 > $shop_page_id || 'publish' !== get_post_status( $shop_page_id ) || $home_page_id === $shop_page_id ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$robots = Helper::get_post_meta( 'robots', $shop_page_id );
|
||||
if ( ! empty( $robots ) && is_array( $robots ) && in_array( 'noindex', $robots, true ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $link;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the product gallery images to the XML sitemap.
|
||||
*
|
||||
* @param array $images The array of images for the post.
|
||||
* @param int $post_id The ID of the post object.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function add_product_images_to_xml_sitemap( $images, $post_id ) {
|
||||
if ( metadata_exists( 'post', $post_id, '_product_image_gallery' ) ) {
|
||||
$product_gallery = get_post_meta( $post_id, '_product_image_gallery', true );
|
||||
$attachments = array_filter( explode( ',', $product_gallery ) );
|
||||
foreach ( $attachments as $attachment_id ) {
|
||||
$image_src = wp_get_attachment_image_src( $attachment_id, 'full' );
|
||||
if ( empty( $image_src ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$image = [
|
||||
'src' => $this->do_filter( 'sitemap/xml_img_src', $image_src[0], $post_id ),
|
||||
'title' => get_the_title( $attachment_id ),
|
||||
'alt' => Attachment::get_alt_tag( $attachment_id ),
|
||||
];
|
||||
$images[] = $image;
|
||||
|
||||
unset( $image, $image_src );
|
||||
}
|
||||
}
|
||||
|
||||
return $images;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user