post = $post; $this->permalink = $structure; $this->use_social_templates = $this->use_social_templates(); } /** * Determines whether the social templates should be used. * * @return bool Whether the social templates should be used. */ public function use_social_templates() { return WPSEO_Options::get( 'opengraph', false ) === true; } /** * Returns the translated values. * * @return array */ public function get_values() { $values = [ 'metaDescriptionDate' => '', ]; if ( $this->post instanceof WP_Post ) { $keyword_usage = $this->get_focus_keyword_usage(); $values_to_set = [ 'keyword_usage' => $keyword_usage, 'keyword_usage_post_types' => $this->get_post_types_for_all_ids( $keyword_usage ), 'title_template' => $this->get_title_template(), 'title_template_no_fallback' => $this->get_title_template( false ), 'metadesc_template' => $this->get_metadesc_template(), 'metaDescriptionDate' => $this->get_metadesc_date(), 'first_content_image' => $this->get_image_url(), 'social_title_template' => $this->get_social_title_template(), 'social_description_template' => $this->get_social_description_template(), 'social_image_template' => $this->get_social_image_template(), 'isInsightsEnabled' => $this->is_insights_enabled(), ]; $values = ( $values_to_set + $values ); } /** * Filter: 'wpseo_post_edit_values' - Allows changing the values Yoast SEO uses inside the post editor. * * @param array $values The key-value map Yoast SEO uses inside the post editor. * @param WP_Post $post The post opened in the editor. */ return apply_filters( 'wpseo_post_edit_values', $values, $this->post ); } /** * Gets the image URL for the post's social preview. * * @return string|null The image URL for the social preview. */ protected function get_image_url() { return WPSEO_Image_Utils::get_first_usable_content_image_for_post( $this->post->ID ); } /** * Counts the number of given keywords used for other posts other than the given post_id. * * @return array The keyword and the associated posts that use it. */ private function get_focus_keyword_usage() { $keyword = WPSEO_Meta::get_value( 'focuskw', $this->post->ID ); $usage = [ $keyword => $this->get_keyword_usage_for_current_post( $keyword ) ]; /** * Allows enhancing the array of posts' that share their focus keywords with the post's related keywords. * * @param array $usage The array of posts' ids that share their focus keywords with the post. * @param int $post_id The id of the post we're finding the usage of related keywords for. */ return apply_filters( 'wpseo_posts_for_related_keywords', $usage, $this->post->ID ); } /** * Retrieves the post types for the given post IDs. * * @param array $post_ids_per_keyword An associative array with keywords as keys and an array of post ids where those keywords are used. * @return array The post types for the given post IDs. */ private function get_post_types_for_all_ids( $post_ids_per_keyword ) { $post_type_per_keyword_result = []; foreach ( $post_ids_per_keyword as $keyword => $post_ids ) { $post_type_per_keyword_result[ $keyword ] = WPSEO_Meta::post_types_for_ids( $post_ids ); } return $post_type_per_keyword_result; } /** * Gets the keyword usage for the current post and the specified keyword. * * @param string $keyword The keyword to check the usage of. * * @return array The post IDs which use the passed keyword. */ protected function get_keyword_usage_for_current_post( $keyword ) { return WPSEO_Meta::keyword_usage( $keyword, $this->post->ID ); } /** * Retrieves the title template. * * @param bool $fallback Whether to return the hardcoded fallback if the template value is empty. * * @return string The title template. */ private function get_title_template( $fallback = true ) { $title = $this->get_template( 'title' ); if ( $title === '' && $fallback === true ) { return '%%title%% %%page%% %%sep%% %%sitename%%'; } return $title; } /** * Retrieves the metadesc template. * * @return string The metadesc template. */ private function get_metadesc_template() { return $this->get_template( 'metadesc' ); } /** * Retrieves the social title template. * * @return string The social title template. */ private function get_social_title_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'title' ); } return ''; } /** * Retrieves the social description template. * * @return string The social description template. */ private function get_social_description_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'description' ); } return ''; } /** * Retrieves the social image template. * * @return string The social description template. */ private function get_social_image_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'image-url' ); } return ''; } /** * Retrieves a template. * * @param string $template_option_name The name of the option in which the template you want to get is saved. * * @return string */ private function get_template( $template_option_name ) { $needed_option = $template_option_name . '-' . $this->post->post_type; if ( WPSEO_Options::get( $needed_option, '' ) !== '' ) { return WPSEO_Options::get( $needed_option ); } return ''; } /** * Retrieves a social template. * * @param string $template_option_name The name of the option in which the template you want to get is saved. * * @return string */ private function get_social_template( $template_option_name ) { /** * Filters the social template value for a given post type. * * @param string $template The social template value, defaults to empty string. * @param string $template_option_name The subname of the option in which the template you want to get is saved. * @param string $post_type The name of the post type. */ return apply_filters( 'wpseo_social_template_post_type', '', $template_option_name, $this->post->post_type ); } /** * Determines the date to be displayed in the snippet preview. * * @return string */ private function get_metadesc_date() { return YoastSEO()->helpers->date->format_translated( $this->post->post_date, 'M j, Y' ); } /** * Determines whether the insights feature is enabled for this post. * * @return bool */ protected function is_insights_enabled() { return WPSEO_Options::get( 'enable_metabox_insights', false ); } }