You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
<?php |
|
/** |
|
* WPSEO plugin file. |
|
* |
|
* @package WPSEO\Frontend |
|
*/ |
|
|
|
/** |
|
* Adds customizations to the front end for the primary category. |
|
*/ |
|
class WPSEO_Frontend_Primary_Category implements WPSEO_WordPress_Integration { |
|
|
|
/** |
|
* Registers the hooks necessary for correct primary category behaviour. |
|
*/ |
|
public function register_hooks() { |
|
add_filter( 'post_link_category', array( $this, 'post_link_category' ), 10, 3 ); |
|
} |
|
|
|
/** |
|
* Filters post_link_category to change the category to the chosen category by the user. |
|
* |
|
* @param stdClass $category The category that is now used for the post link. |
|
* @param array $categories This parameter is not used. |
|
* @param WP_Post $post The post in question. |
|
* |
|
* @return array|null|object|WP_Error The category we want to use for the post link. |
|
*/ |
|
public function post_link_category( $category, $categories = null, $post = null ) { |
|
$post = get_post( $post ); |
|
$primary_category = $this->get_primary_category( $post ); |
|
|
|
if ( false !== $primary_category && $primary_category !== $category->cat_ID ) { |
|
$category = $this->get_category( $primary_category ); |
|
} |
|
|
|
return $category; |
|
} |
|
|
|
/** |
|
* Get the id of the primary category. |
|
* |
|
* @param WP_Post $post The post in question. |
|
* |
|
* @return int Primary category id. |
|
*/ |
|
protected function get_primary_category( $post = null ) { |
|
$post = get_post( $post ); |
|
|
|
if ( $post === null ) { |
|
return false; |
|
} |
|
|
|
$primary_term = new WPSEO_Primary_Term( 'category', $post->ID ); |
|
|
|
return $primary_term->get_primary_term(); |
|
} |
|
|
|
/** |
|
* Wrapper for get category to make mocking easier. |
|
* |
|
* @param int $primary_category ID of primary category. |
|
* |
|
* @return array|null|object|WP_Error |
|
*/ |
|
protected function get_category( $primary_category ) { |
|
$category = get_category( $primary_category ); |
|
|
|
return $category; |
|
} |
|
}
|
|
|