1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?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', [ $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;
- }
- }
|