PluginProbe
Parse.ly / 3.7.1
Parse.ly v3.7.1
3.24.1 3.24.0 3.23.7 3.23.6 3.23.5 3.23.4 3.23.3 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.17.0 3.18.0 3.18.1 3.19.0 3.19.1 3.19.2 3.19.3 3.2.0 3.2.1 3.20.0 3.20.1 3.20.2 3.20.3 All 105 releases
wp-parsely / src / class-metadata.php

class-metadata.php in Parse.ly 3.7.1, at src/class-metadata.php

149 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Metadata class
4 *
5 * @package Parsely
6 * @since 3.3.0
7 */
8
9 declare(strict_types=1);
10
11 namespace Parsely;
12
13 use Parsely\Metadata\Author_Archive_Builder;
14 use Parsely\Metadata\Category_Builder;
15 use Parsely\Metadata\Date_Builder;
16 use Parsely\Metadata\Front_Page_Builder;
17 use Parsely\Metadata\Page_Builder;
18 use Parsely\Metadata\Page_For_Posts_Builder;
19 use Parsely\Metadata\Paginated_Front_Page_Builder;
20 use Parsely\Metadata\Post_Builder;
21 use Parsely\Metadata\Tag_Builder;
22 use WP_Post;
23
24 use function Parsely\Utils\get_page_for_posts;
25 use function Parsely\Utils\get_page_on_front;
26
27 /**
28 * Generates and inserts metadata readable by the Parse.ly Crawler.
29 *
30 * @since 1.0.0
31 * @since 3.3.0 Logic extracted from Parsely\Parsely class to separate file/class.
32 *
33 * @phpstan-type Metadata_Attributes array{
34 * '@id'?: string,
35 * '@type'?: string,
36 * headline?: string,
37 * url?: string,
38 * image?: Metadata_Image,
39 * thumbnailUrl?: string,
40 * articleSection?: string,
41 * creator?: string[],
42 * author?: Metadata_Author[],
43 * publisher?: Metadata_Publisher,
44 * keywords?: string[],
45 * dateCreated?: string,
46 * datePublished?: string,
47 * dateModified?: string,
48 * custom_metadata?: string,
49 * }
50 *
51 * @phpstan-type Metadata_Image array{
52 * '@type': 'ImageObject',
53 * url: string,
54 * }
55 *
56 * @phpstan-type Metadata_Author array{
57 * '@type': 'Person',
58 * name: string,
59 * }
60 *
61 * @phpstan-type Metadata_Publisher array{
62 * '@type': 'Organization',
63 * name: string,
64 * logo: string,
65 * }
66 */
67 class Metadata {
68 /**
69 * Instance of Parsely class.
70 *
71 * @var Parsely
72 */
73 private $parsely;
74
75 /**
76 * Constructor.
77 *
78 * @param Parsely $parsely Instance of Parsely class.
79 */
80 public function __construct( Parsely $parsely ) {
81 $this->parsely = $parsely;
82 }
83
84 /**
85 * Creates Parse.ly metadata object from post metadata.
86 *
87 * @param WP_Post $post object.
88 *
89 * @return Metadata_Attributes
90 */
91 public function construct_metadata( WP_Post $post ) {
92 $options = $this->parsely->get_options();
93 $queried_object_id = get_queried_object_id();
94
95 if ( is_front_page() ) {
96 if ( ! is_paged() ) {
97 $builder = new Front_Page_Builder( $this->parsely );
98 } else {
99 $builder = new Paginated_Front_Page_Builder( $this->parsely );
100 }
101 } elseif ( 'page' === get_option( 'show_on_front' ) && ! get_page_on_front() ) {
102 $builder = new Front_Page_Builder( $this->parsely );
103 } elseif (
104 is_home() && (
105 ! ( 'page' === get_option( 'show_on_front' ) && ! get_page_on_front() ) ||
106 get_page_for_posts() === $queried_object_id
107 )
108 ) {
109 $builder = new Page_For_Posts_Builder( $this->parsely );
110 } elseif ( is_author() ) {
111 $builder = new Author_Archive_Builder( $this->parsely );
112 } elseif ( is_category() || is_post_type_archive() || is_tax() ) {
113 $builder = new Category_Builder( $this->parsely );
114 } elseif ( is_date() ) {
115 $builder = new Date_Builder( $this->parsely );
116 } elseif ( is_tag() ) {
117 $builder = new Tag_Builder( $this->parsely );
118 } elseif ( in_array( get_post_type( $post ), $options['track_post_types'], true ) && Parsely::post_has_trackable_status( $post ) ) {
119 $builder = new Post_Builder( $this->parsely, $post );
120 } elseif ( in_array( get_post_type( $post ), $options['track_page_types'], true ) && Parsely::post_has_trackable_status( $post ) ) {
121 $builder = new Page_Builder( $this->parsely, $post );
122 }
123
124 if ( isset( $builder ) ) {
125 $parsely_page = $builder->get_metadata();
126 } else {
127 $parsely_page = array();
128 }
129
130 /**
131 * Filters the structured metadata.
132 *
133 * @var mixed
134 *
135 * @param array $parsely_page Existing structured metadata for a page.
136 * @param WP_Post $post Post object.
137 * @param array $options The Parse.ly options.
138 *
139 * @since 2.5.0
140 */
141 $filtered = apply_filters( 'wp_parsely_metadata', $parsely_page, $post, $options );
142 if ( is_array( $filtered ) ) {
143 return $filtered;
144 }
145
146 return array();
147 }
148 }
149