parsely = $parsely; } /** * Creates Parse.ly metadata object from post metadata. * * @param WP_Post $post object. * @return Metadata_Attributes */ public function construct_metadata( WP_Post $post ): array { $options = $this->parsely->get_options(); $queried_object_id = get_queried_object_id(); if ( is_front_page() ) { if ( ! is_paged() ) { $builder = new Front_Page_Builder( $this->parsely ); } else { $builder = new Paginated_Front_Page_Builder( $this->parsely ); } } elseif ( 'page' === get_option( 'show_on_front' ) && ! get_page_on_front() ) { $builder = new Front_Page_Builder( $this->parsely ); } elseif ( is_home() && ( ! ( 'page' === get_option( 'show_on_front' ) && ! get_page_on_front() ) || get_page_for_posts() === $queried_object_id ) ) { $builder = new Page_For_Posts_Builder( $this->parsely ); } elseif ( is_author() ) { $builder = new Author_Archive_Builder( $this->parsely ); } elseif ( is_category() || is_post_type_archive() || is_tax() ) { $builder = new Category_Builder( $this->parsely ); } elseif ( is_date() ) { $builder = new Date_Builder( $this->parsely ); } elseif ( is_tag() ) { $builder = new Tag_Builder( $this->parsely ); } elseif ( in_array( get_post_type( $post ), $options['track_post_types'], true ) && Parsely::post_has_trackable_status( $post ) ) { $builder = new Post_Builder( $this->parsely, $post ); } elseif ( in_array( get_post_type( $post ), $options['track_page_types'], true ) && Parsely::post_has_trackable_status( $post ) ) { $builder = new Page_Builder( $this->parsely, $post ); } if ( isset( $builder ) ) { $current_metadata = $builder->get_metadata(); } else { $current_metadata = array(); } /** * Filters the structured metadata. * * @since 2.5.0 * @var mixed * * @param array $current_metadata The currently generated metadata. * @param WP_Post $post Post object. * @param array $options The Parse.ly options. */ $filtered = apply_filters( 'wp_parsely_metadata', $current_metadata, $post, $options ); if ( is_array( $filtered ) ) { return $filtered; } return array(); } }