관리-도구
편집 파일: Priority.php
<?php namespace AIOSEO\Plugin\Common\Sitemap; // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Determines the priority/frequency. * * @since 4.0.0 */ class Priority { /** * Whether the advanced settings are enabled for the sitemap. * * @since 4.0.0 * * @var boolean */ private static $advanced; /** * The global priority for the page type. * * @since 4.0.0 * * @var boolean */ private static $globalPriority = []; /** * The global frequency for the page type. * * @since 4.0.0 * * @var boolean */ private static $globalFrequency = []; /** * Whether or not we have grouped our settings. * * @since 4.0.0 * * @var array */ private static $grouped = []; /** * The current object type priority. * * @since 4.0.0 * * @var array */ private static $objectTypePriority = []; /** * The current object type frequency. * * @since 4.0.0 * * @var array */ private static $objectTypeFrequency = []; /** * Returns the sitemap priority for a given page. * * @since 4.0.0 * * @param string $pageType The type of page (e.g. homepage, blog, post, taxonomies, etc.). * @param \stdClass|bool $object The post/term object (optional). * @param string $objectType The post/term object type (optional). * @return float The priority. */ public function priority( $pageType, $object = false, $objectType = '' ) { // Store setting values in static properties so that we can cache them. // Otherwise this has a significant impact on the load time of the sitemap. if ( ! self::$advanced ) { self::$advanced = aioseo()->options->sitemap->general->advancedSettings->enable; } if ( ! isset( self::$globalPriority[ $pageType . $objectType ] ) ) { $options = aioseo()->options->noConflict(); $pageTypeConditional = 'date' === $pageType ? 'archive' : $pageType; self::$globalPriority[ $pageType . $objectType ] = self::$advanced && $options->sitemap->general->advancedSettings->priority->has( $pageTypeConditional ) ? json_decode( $options->sitemap->general->advancedSettings->priority->$pageTypeConditional->priority ) : false; } if ( ! isset( self::$grouped[ $pageType . $objectType ] ) ) { $options = aioseo()->options->noConflict(); self::$grouped[ $pageType . $objectType ] = self::$advanced && $options->sitemap->general->advancedSettings->priority->has( $pageType ) && $options->sitemap->general->advancedSettings->priority->$pageType->has( 'grouped' ) ? $options->sitemap->general->advancedSettings->priority->$pageType->grouped : true; } if ( empty( self::$grouped[ $pageType . $objectType ] ) && self::$advanced ) { if ( ! isset( self::$objectTypePriority[ $pageType . $objectType ] ) ) { $dynamicOptions = aioseo()->dynamicOptions->noConflict(); self::$objectTypePriority[ $pageType . $objectType ] = $dynamicOptions->sitemap->priority->has( $pageType ) && $dynamicOptions->sitemap->priority->$pageType->has( $objectType ) ? json_decode( $dynamicOptions->sitemap->priority->$pageType->$objectType->priority ) : false; } } $priority = $this->defaultPriority( $pageType ); if ( self::$globalPriority[ $pageType . $objectType ] ) { $defaultValue = ! self::$grouped[ $pageType . $objectType ] && self::$advanced && ! empty( self::$objectTypePriority[ $pageType . $objectType ] ) ? self::$objectTypePriority[ $pageType . $objectType ] : self::$globalPriority[ $pageType . $objectType ]; $priority = 'default' === $defaultValue->value ? $priority : $defaultValue->value; } return $priority; } /** * Returns the sitemap frequency for a given page. * * @since 4.0.0 * * @param string $pageType The type of page (e.g. homepage, blog, post, taxonomies, etc.). * @param \stdClass|bool $object The post/term object (optional). * @param string $objectType The post/term object type (optional). * @return float The frequency. */ public function frequency( $pageType, $object = false, $objectType = '' ) { // Store setting values in static properties so that we can cache them. // Otherwise this has a significant impact on the load time of the sitemap. if ( ! self::$advanced ) { self::$advanced = aioseo()->options->sitemap->general->advancedSettings->enable; } if ( ! isset( self::$globalFrequency[ $pageType . $objectType ] ) ) { $options = aioseo()->options->noConflict(); $pageTypeConditional = 'date' === $pageType ? 'archive' : $pageType; self::$globalFrequency[ $pageType . $objectType ] = self::$advanced && $options->sitemap->general->advancedSettings->priority->has( $pageTypeConditional ) ? json_decode( $options->sitemap->general->advancedSettings->priority->$pageTypeConditional->frequency ) : false; } if ( ! isset( self::$grouped[ $pageType . $objectType ] ) ) { $options = aioseo()->options->noConflict(); self::$grouped[ $pageType . $objectType ] = self::$advanced && $options->sitemap->general->advancedSettings->priority->has( $pageType ) && $options->sitemap->general->advancedSettings->priority->$pageType->has( 'grouped' ) ? $options->sitemap->general->advancedSettings->priority->$pageType->grouped : true; } if ( empty( self::$grouped[ $pageType . $objectType ] ) && self::$advanced ) { if ( ! isset( self::$objectTypeFrequency[ $pageType . $objectType ] ) ) { $dynamicOptions = aioseo()->dynamicOptions->noConflict(); self::$objectTypeFrequency[ $pageType . $objectType ] = $dynamicOptions->sitemap->priority->has( $pageType ) && $dynamicOptions->sitemap->priority->$pageType->has( $objectType ) ? json_decode( $dynamicOptions->sitemap->priority->$pageType->$objectType->frequency ) : false; } } $frequency = $this->defaultFrequency( $pageType ); if ( self::$globalFrequency[ $pageType . $objectType ] ) { $defaultValue = ! self::$grouped[ $pageType . $objectType ] && self::$advanced && ! empty( self::$objectTypeFrequency[ $pageType . $objectType ] ) ? self::$objectTypeFrequency[ $pageType . $objectType ] : self::$globalFrequency[ $pageType . $objectType ]; $frequency = 'default' === $defaultValue->value ? $frequency : $defaultValue->value; } return $frequency; } /** * Returns the default priority for the page. * * @since 4.0.0 * * @param string $pageType The type of page. * @return float The default priority. */ private function defaultPriority( $pageType ) { $defaults = [ 'homePage' => 1.0, 'blog' => 0.9, 'sitemap' => 0.8, 'postTypes' => 0.7, 'archive' => 0.5, 'author' => 0.3, 'taxonomies' => 0.3, 'other' => 0.5 ]; if ( array_key_exists( $pageType, $defaults ) ) { return $defaults[ $pageType ]; } return $defaults['other']; } /** * Returns the default frequency for the page. * * @since 4.0.0 * * @param string $pageType The type of page. * @return float The default frequency. */ private function defaultFrequency( $pageType ) { $defaults = [ 'homePage' => 'always', 'sitemap' => 'hourly', 'blog' => 'daily', 'postTypes' => 'weekly', 'author' => 'weekly', 'archive' => 'monthly', 'taxonomies' => 'monthly', 'other' => 'weekly' ]; if ( array_key_exists( $pageType, $defaults ) ) { return $defaults[ $pageType ]; } return $defaults['other']; } }