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

110 lines 3.1 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 /**
25 * Generates and inserts metadata readable by the Parse.ly Crawler.
26 *
27 * @since 1.0.0
28 * @since 3.3.0 Logic extracted from Parsely\Parsely class to separate file/class.
29 */
30 class Metadata {
31 /**
32 * Instance of Parsely class.
33 *
34 * @var Parsely
35 */
36 private $parsely;
37
38 /**
39 * Constructor.
40 *
41 * @param Parsely $parsely Instance of Parsely class.
42 */
43 public function __construct( Parsely $parsely ) {
44 $this->parsely = $parsely;
45 }
46
47 /**
48 * Creates Parse.ly metadata object from post metadata.
49 *
50 * @param WP_Post $post object.
51 *
52 * @return array<string, mixed>
53 */
54 public function construct_metadata( WP_Post $post ): array {
55 $options = $this->parsely->get_options();
56 $queried_object_id = get_queried_object_id();
57
58 if ( is_front_page() ) {
59 if ( ! is_paged() ) {
60 $builder = new Front_Page_Builder( $this->parsely );
61 } else {
62 $builder = new Paginated_Front_Page_Builder( $this->parsely );
63 }
64 } elseif ( 'page' === get_option( 'show_on_front' ) && ! get_option( 'page_on_front' ) ) {
65 $builder = new Front_Page_Builder( $this->parsely );
66 } elseif (
67 is_home() && (
68 ! ( 'page' === get_option( 'show_on_front' ) && ! get_option( 'page_on_front' ) ) ||
69 $queried_object_id && (int) get_option( 'page_for_posts' ) === $queried_object_id
70 )
71 ) {
72 $builder = new Page_For_Posts_Builder( $this->parsely );
73 } elseif ( is_author() ) {
74 $builder = new Author_Archive_Builder( $this->parsely );
75 } elseif ( is_category() || is_post_type_archive() || is_tax() ) {
76 $builder = new Category_Builder( $this->parsely );
77 } elseif ( is_date() ) {
78 $builder = new Date_Builder( $this->parsely );
79 } elseif ( is_tag() ) {
80 $builder = new Tag_Builder( $this->parsely );
81 } elseif ( in_array( get_post_type( $post ), $options['track_post_types'], true ) && Parsely::post_has_trackable_status( $post ) ) {
82 $builder = new Post_Builder( $this->parsely, $post );
83 } elseif ( in_array( get_post_type( $post ), $options['track_page_types'], true ) && Parsely::post_has_trackable_status( $post ) ) {
84 $builder = new Page_Builder( $this->parsely, $post );
85 }
86
87 if ( isset( $builder ) ) {
88 $parsely_page = $builder->get_metadata();
89 } else {
90 $parsely_page = array();
91 }
92
93 /**
94 * Filters the structured metadata.
95 *
96 * @param array $parsely_page Existing structured metadata for a page.
97 * @param WP_Post $post Post object.
98 * @param array $options The Parse.ly options.
99 *
100 * @since 2.5.0
101 */
102 $filtered = apply_filters( 'wp_parsely_metadata', $parsely_page, $post, $options );
103 if ( is_array( $filtered ) ) {
104 return $filtered;
105 }
106
107 return array();
108 }
109 }
110