1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
<?php
namespace Yoast\WP\SEO\Integrations;
use stdClass; use WP_Error; use WP_Post; use WPSEO_Primary_Term; use Yoast\WP\SEO\Conditionals\Primary_Category_Conditional;
/** * Adds customizations to the front end for the primary category. */ class Primary_Category implements Integration_Interface {
/** * Returns the conditionals based on which this loadable should be active. * * In this case only when on the frontend, the post overview, post edit or new post admin page. * * @return array The conditionals. */ public static function get_conditionals() { return [ Primary_Category_Conditional::class ]; }
/** * Registers a filter to change a post's primary category. * * @return void */ 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 ); if ( $post === null ) { return $category; }
$primary_category = $this->get_primary_category( $post ); if ( $primary_category !== false && $primary_category !== $category->cat_ID ) { $category = \get_category( $primary_category ); }
return $category; }
/** * Get the id of the primary category. * * @codeCoverageIgnore It justs wraps a dependency. * * @param WP_Post $post The post in question. * * @return int Primary category id. */ protected function get_primary_category( $post ) { $primary_term = new WPSEO_Primary_Term( 'category', $post->ID );
return $primary_term->get_primary_term(); } }
|