PluginProbe
Parse.ly / 3.19.0
Parse.ly v3.19.0
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.19.0, at src/class-metadata.php

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