You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
3.6 KiB
PHP
158 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
* The Term Class
|
|
*
|
|
* @since 1.0.22
|
|
* @package RankMath
|
|
* @subpackage RankMath\Paper
|
|
* @author Rank Math <support@rankmath.com>
|
|
*/
|
|
|
|
namespace RankMath\Paper;
|
|
|
|
use RankMath\Term;
|
|
use RankMath\Helper;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Taxonomy class.
|
|
*/
|
|
class Taxonomy implements IPaper {
|
|
|
|
/**
|
|
* Retrieves the SEO title for a taxonomy.
|
|
*
|
|
* @return string The SEO title for the taxonomy.
|
|
*/
|
|
public function title() {
|
|
$object = get_queried_object();
|
|
if ( ! is_object( $object ) ) {
|
|
return Paper::get_from_options( '404_title', [], esc_html__( 'Page not found', 'rank-math' ) );
|
|
}
|
|
|
|
$title = Term::get_meta( 'title', $object, $object->taxonomy );
|
|
if ( '' !== $title ) {
|
|
return $title;
|
|
}
|
|
|
|
return Paper::get_from_options( "tax_{$object->taxonomy}_title", $object );
|
|
}
|
|
|
|
/**
|
|
* Retrieves the SEO description for a taxonomy.
|
|
*
|
|
* @return string The SEO description for the taxonomy.
|
|
*/
|
|
public function description() {
|
|
$object = get_queried_object();
|
|
$description = Term::get_meta( 'description', $object, $object->taxonomy );
|
|
if ( '' !== $description ) {
|
|
return $description;
|
|
}
|
|
|
|
return Paper::get_from_options( "tax_{$object->taxonomy}_description", $object );
|
|
}
|
|
|
|
/**
|
|
* Retrieves the robots for a taxonomy.
|
|
*
|
|
* @return string The robots for the taxonomy
|
|
*/
|
|
public function robots() {
|
|
$object = get_queried_object();
|
|
$robots = Paper::robots_combine( Term::get_meta( 'robots', $object ) );
|
|
|
|
if ( is_object( $object ) && empty( $robots ) && Helper::get_settings( "titles.tax_{$object->taxonomy}_custom_robots" ) ) {
|
|
$robots = Paper::robots_combine( Helper::get_settings( "titles.tax_{$object->taxonomy}_robots" ), true );
|
|
}
|
|
|
|
if ( $this->noindex_term( $object ) ) {
|
|
$robots['index'] = 'noindex';
|
|
}
|
|
|
|
return $robots;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the advanced robots for a taxonomy.
|
|
*
|
|
* @return array The advanced robots for the taxonomy
|
|
*/
|
|
public function advanced_robots() {
|
|
$object = get_queried_object();
|
|
$robots = Paper::advanced_robots_combine( Term::get_meta( 'advanced_robots', $object ) );
|
|
|
|
if ( is_object( $object ) && empty( $robots ) && Helper::get_settings( "titles.tax_{$object->taxonomy}_custom_robots" ) ) {
|
|
$robots = Paper::advanced_robots_combine( Helper::get_settings( "titles.tax_{$object->taxonomy}_advanced_robots" ), true );
|
|
}
|
|
|
|
return $robots;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the canonical URL.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function canonical() {
|
|
$object = get_queried_object();
|
|
|
|
if ( empty( $object ) || Term::is_multiple_terms_query() ) {
|
|
return [];
|
|
}
|
|
|
|
$term_link = get_term_link( $object, $object->taxonomy );
|
|
|
|
return [
|
|
'canonical' => is_wp_error( $term_link ) ? '' : $term_link,
|
|
'canonical_override' => Term::get_meta( 'canonical_url', $object, $object->taxonomy ),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Retrieves the keywords.
|
|
*
|
|
* @return string The focus keywords.
|
|
*/
|
|
public function keywords() {
|
|
$object = get_queried_object();
|
|
|
|
if ( empty( $object ) || Term::is_multiple_terms_query() ) {
|
|
return '';
|
|
}
|
|
|
|
return Term::get_meta( 'focus_keyword', $object, $object->taxonomy );
|
|
}
|
|
|
|
/**
|
|
* Whether to noindex empty terms.
|
|
*
|
|
* @param object $object Current taxonomy term object.
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function noindex_term( $object ) {
|
|
if ( Term::is_multiple_terms_query() ) {
|
|
return true;
|
|
}
|
|
|
|
if ( is_object( $object ) && 0 === $object->count && Helper::get_settings( 'titles.noindex_empty_taxonomies' ) ) {
|
|
$children = get_terms(
|
|
$object->taxonomy,
|
|
[
|
|
'parent' => $object->term_id,
|
|
'number' => 1,
|
|
'fields' => 'ids',
|
|
]
|
|
);
|
|
|
|
if ( empty( $children ) ) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|