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.
117 lines
3.0 KiB
PHTML
117 lines
3.0 KiB
PHTML
8 months ago
|
<?php
|
||
|
/**
|
||
|
* The Term Class
|
||
|
*
|
||
|
* @since 0.9.0
|
||
|
* @package RankMath
|
||
|
* @subpackage RankMath\Core
|
||
|
* @author Rank Math <support@rankmath.com>
|
||
|
*/
|
||
|
|
||
|
namespace RankMath;
|
||
|
|
||
|
use WP_Term;
|
||
|
|
||
|
defined( 'ABSPATH' ) || exit;
|
||
|
|
||
|
/**
|
||
|
* Term class.
|
||
|
*/
|
||
|
class Term extends Metadata {
|
||
|
|
||
|
/**
|
||
|
* Type of object metadata is for
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $meta_type = 'term';
|
||
|
|
||
|
/**
|
||
|
* Retrieve Term instance.
|
||
|
*
|
||
|
* @param mixed $term Term to get either (string) term name, (int) term ID or (object) term.
|
||
|
* @param string $taxonomy Optional. Limit matched terms to those matching `$taxonomy`. Only used for
|
||
|
* disambiguating potentially shared terms.
|
||
|
* @return Term|false Term object, false otherwise.
|
||
|
*/
|
||
|
public static function get( $term = 0, $taxonomy = null ) {
|
||
|
$term = self::get_term_id( $term, $taxonomy );
|
||
|
if ( empty( $term ) ) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
if ( isset( self::$objects[ $term ] ) && 'term' === self::$objects[ $term ]->meta_type ) {
|
||
|
return self::$objects[ $term ];
|
||
|
}
|
||
|
|
||
|
$_term = new self( WP_Term::get_instance( $term, $taxonomy ) );
|
||
|
$_term->object_id = $term;
|
||
|
self::$objects[ $term ] = $_term;
|
||
|
|
||
|
return $_term;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get term ID.
|
||
|
*
|
||
|
* @param mixed $term Term to get either (string) term name, (int) term ID or (object) term.
|
||
|
* @param string $taxonomy Optional. Limit matched terms to those matching `$taxonomy`. Only used for
|
||
|
* disambiguating potentially shared terms.
|
||
|
*/
|
||
|
private static function get_term_id( $term = 0, $taxonomy = null ) {
|
||
|
if ( is_string( $term ) ) {
|
||
|
$term = get_term_by( 'slug', $term, $taxonomy );
|
||
|
} elseif ( is_int( $term ) && 0 === absint( $term ) ) {
|
||
|
$term = $GLOBALS['wp_query']->get_queried_object();
|
||
|
}
|
||
|
|
||
|
if ( is_object( $term ) && isset( $term->term_id ) ) {
|
||
|
return $term->term_id;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get term meta value.
|
||
|
*
|
||
|
* @param string $key Meta key.
|
||
|
* @param mixed $term Term name, term ID, or term object.
|
||
|
* @param string $taxonomy Optional. Limit matched terms to those matching `$taxonomy`. Only used for
|
||
|
* disambiguating potentially shared terms.
|
||
|
* @param string $default Default value to use when metadata does not exists.
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public static function get_meta( $key, $term = 0, $taxonomy = null, $default = '' ) {
|
||
|
$term = self::get( $term, $taxonomy );
|
||
|
|
||
|
if ( is_null( $term ) || ! $term->is_found() ) {
|
||
|
return $default;
|
||
|
}
|
||
|
|
||
|
return $term->get_metadata( $key, $default );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check if the current query is for multiple terms (e.g. /term-1,term-2/).
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function is_multiple_terms_query() {
|
||
|
global $wp_query;
|
||
|
|
||
|
if ( ! is_tax() && ! is_tag() && ! is_category() ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$term = get_queried_object();
|
||
|
$queried_terms = $wp_query->tax_query->queried_terms;
|
||
|
|
||
|
if ( empty( $queried_terms[ $term->taxonomy ]['terms'] ) ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return count( $queried_terms[ $term->taxonomy ]['terms'] ) > 1;
|
||
|
}
|
||
|
}
|