コード例 #1
0
 function get_jetpack_seo_title_formats()
 {
     return Jetpack_SEO_Titles::get_custom_title_formats();
 }
コード例 #2
0
ファイル: jetpack-seo.php プロジェクト: automattic/jetpack
 public function meta_tags()
 {
     global $wp_query;
     $period = '';
     $template = '';
     $meta = array();
     /**
      * Can be used to specify a list of themes that set their own meta tags.
      *
      * If current site is using one of the themes listed as conflicting, inserting Jetpack SEO
      * meta tags will be prevented.
      *
      * @module seo-tools
      *
      * @since 4.4.0
      *
      * @param array List of conflicted theme names. Defaults to empty array.
      */
     $conflicted_themes = apply_filters('jetpack_seo_meta_tags_conflicted_themes', array());
     if (isset($conflicted_themes[get_option('template')])) {
         return;
     }
     /**
      * Can be used to insert custom site host that will used for meta title.
      *
      * @module seo-tools
      *
      * @since 4.4.0
      *
      * @param string Name of the site host. Defaults to empty string.
      */
     $site_host = apply_filters('jetpack_seo_site_host', '');
     $meta['title'] = sprintf(_x('%1$s', 'Site Title', 'jetpack'), get_bloginfo('title'));
     if (!empty($site_host)) {
         $meta['title'] = sprintf(_x('%1$s on %2$s', 'Site Title on WordPress', 'jetpack'), get_bloginfo('title'), $site_host);
     }
     $front_page_meta = Jetpack_SEO_Utils::get_front_page_meta_description();
     $description = $front_page_meta ? $front_page_meta : get_bloginfo('description');
     $meta['description'] = trim($description);
     // Try to target things if we're on a "specific" page of any kind.
     if (is_singular()) {
         $meta['title'] = sprintf(_x('%1$s | %2$s', 'Post Title | Site Title on WordPress', 'jetpack'), get_the_title(), $meta['title']);
         // Business users can overwrite the description.
         if (!(is_front_page() && Jetpack_SEO_Utils::get_front_page_meta_description())) {
             $description = Jetpack_SEO_Posts::get_post_description(get_post());
             if ($description) {
                 $description = wp_trim_words(strip_shortcodes(wp_kses($description, array())));
                 $meta['description'] = $description;
             }
         }
     } elseif (is_author()) {
         $obj = get_queried_object();
         $meta['title'] = sprintf(_x('Posts by %1$s | %2$s', 'Posts by Author Name | Blog Title on WordPress', 'jetpack'), $obj->display_name, $meta['title']);
         $meta['description'] = sprintf(_x('Read all of the posts by %1$s on %2$s', 'Read all of the posts by Author Name on Blog Title', 'jetpack'), $obj->display_name, get_bloginfo('title'));
     } elseif (is_tag() || is_category() || is_tax()) {
         $obj = get_queried_object();
         $meta['title'] = sprintf(_x('Posts about %1$s on %2$s', 'Posts about Category on Blog Title', 'jetpack'), single_term_title('', false), get_bloginfo('title'));
         $description = get_term_field('description', $obj->term_id, $obj->taxonomy, 'raw');
         if (!is_wp_error($description) && '' != $description) {
             $meta['description'] = wp_trim_words($description);
         } else {
             $authors = $this->get_authors();
             $meta['description'] = wp_sprintf(_x('Posts about %1$s written by %2$l', 'Posts about Category written by John and Bob', 'jetpack'), single_term_title('', false), $authors);
         }
     } elseif (is_date()) {
         if (is_year()) {
             $period = get_query_var('year');
             $template = _nx('%1$s post published by %2$l in the year %3$s', '%1$s posts published by %2$l in the year %3$s', count($wp_query->posts), '10 posts published by John in the year 2012', 'jetpack');
         } elseif (is_month()) {
             $period = date('F Y', mktime(0, 0, 0, get_query_var('monthnum'), 1, get_query_var('year')));
             $template = _nx('%1$s post published by %2$l during %3$s', '%1$s posts published by %2$l during %3$s', count($wp_query->posts), '10 posts publishes by John during May 2012', 'jetpack');
         } elseif (is_day()) {
             $period = date('F j, Y', mktime(0, 0, 0, get_query_var('monthnum'), get_query_var('day'), get_query_var('year')));
             $template = _nx('%1$s post published by %2$l on %3$s', '%1$s posts published by %2$l on %3$s', count($wp_query->posts), '10 posts published by John on May 30, 2012', 'jetpack');
         }
         $meta['title'] = sprintf(_x('Posts from %1$s on %2$s', 'Posts from May 2012 on Blog Title', 'jetpack'), $period, get_bloginfo('title'));
         $authors = $this->get_authors();
         $meta['description'] = wp_sprintf($template, count($wp_query->posts), $authors, $period);
     }
     $custom_title = Jetpack_SEO_Titles::get_custom_title();
     if (!empty($custom_title)) {
         $meta['title'] = $custom_title;
     }
     /**
      * Can be used to edit the default SEO tools meta tags.
      *
      * @module seo-tools
      *
      * @since 4.4.0
      *
      * @param array Array that consists of meta name and meta content pairs.
      */
     $meta = apply_filters('jetpack_seo_meta_tags', $meta);
     // Output them
     foreach ($meta as $name => $content) {
         if (!empty($content)) {
             echo '<meta name="' . esc_attr($name) . '" content="' . esc_attr($content) . '" />' . "\n";
         }
     }
 }
 /**
  * Updates site settings for authorized users
  *
  * @return (array)
  */
 public function update_settings()
 {
     // $this->input() retrieves posted arguments whitelisted and casted to the $request_format
     // specs that get passed in when this class is instantiated
     /**
      * Filters the settings to be updated on the site.
      *
      * @module json-api
      *
      * @since 3.6.0
      *
      * @param array $input Associative array of site settings to be updated.
      */
     $input = apply_filters('rest_api_update_site_settings', $this->input());
     $jetpack_relatedposts_options = array();
     $sharing_options = array();
     $updated = array();
     foreach ($input as $key => $value) {
         if (!is_array($value)) {
             $value = trim($value);
         }
         $value = wp_unslash($value);
         switch ($key) {
             case 'default_ping_status':
             case 'default_comment_status':
                 // settings are stored as closed|open
                 $coerce_value = $value ? 'open' : 'closed';
                 if (update_option($key, $coerce_value)) {
                     $updated[$key] = $value;
                 }
                 break;
             case 'jetpack_protect_whitelist':
                 if (function_exists('jetpack_protect_save_whitelist')) {
                     $result = jetpack_protect_save_whitelist($value);
                     if (is_wp_error($result)) {
                         return $result;
                     }
                     $updated[$key] = jetpack_protect_format_whitelist();
                 }
                 break;
             case 'jetpack_sync_non_public_post_stati':
                 Jetpack_Options::update_option('sync_non_public_post_stati', $value);
                 break;
             case 'jetpack_relatedposts_enabled':
             case 'jetpack_relatedposts_show_thumbnails':
             case 'jetpack_relatedposts_show_headline':
                 if (!$this->jetpack_relatedposts_supported()) {
                     break;
                 }
                 if ('jetpack_relatedposts_enabled' === $key && method_exists('Jetpack', 'is_module_active') && $this->jetpack_relatedposts_supported()) {
                     $before_action = Jetpack::is_module_active('related-posts');
                     if ($value) {
                         Jetpack::activate_module('related-posts', false, false);
                     } else {
                         Jetpack::deactivate_module('related-posts');
                     }
                     $after_action = Jetpack::is_module_active('related-posts');
                     if ($after_action == $before_action) {
                         break;
                     }
                 }
                 $just_the_key = substr($key, 21);
                 $jetpack_relatedposts_options[$just_the_key] = $value;
                 break;
             case 'social_notifications_like':
             case 'social_notifications_reblog':
             case 'social_notifications_subscribe':
                 // settings are stored as on|off
                 $coerce_value = $value ? 'on' : 'off';
                 if (update_option($key, $coerce_value)) {
                     $updated[$key] = $value;
                 }
                 break;
             case 'wga':
                 if (!isset($value['code']) || !preg_match('/^$|^UA-[\\d-]+$/i', $value['code'])) {
                     return new WP_Error('invalid_code', 'Invalid UA ID');
                 }
                 $wga = get_option('wga', array());
                 $wga['code'] = $value['code'];
                 // maintain compatibility with wp-google-analytics
                 if (update_option('wga', $wga)) {
                     $updated[$key] = $value;
                 }
                 $enabled_or_disabled = $wga['code'] ? 'enabled' : 'disabled';
                 /** This action is documented in modules/widgets/social-media-icons.php */
                 do_action('jetpack_bump_stats_extras', 'google-analytics', $enabled_or_disabled);
                 $business_plugins = WPCOM_Business_Plugins::instance();
                 $business_plugins->activate_plugin('wp-google-analytics');
                 break;
             case 'jetpack_testimonial':
             case 'jetpack_portfolio':
             case 'jetpack_comment_likes_enabled':
                 // settings are stored as 1|0
                 $coerce_value = (int) $value;
                 if (update_option($key, $coerce_value)) {
                     $updated[$key] = (bool) $value;
                 }
                 break;
             case 'jetpack_testimonial_posts_per_page':
             case 'jetpack_portfolio_posts_per_page':
                 // settings are stored as numeric
                 $coerce_value = (int) $value;
                 if (update_option($key, $coerce_value)) {
                     $updated[$key] = $coerce_value;
                 }
                 break;
                 // Sharing options
             // Sharing options
             case 'sharing_button_style':
             case 'sharing_show':
             case 'sharing_open_links':
                 $sharing_options[preg_replace('/^sharing_/', '', $key)] = $value;
                 break;
             case 'sharing_label':
                 $sharing_options[$key] = $value;
                 break;
                 // Keyring token option
             // Keyring token option
             case 'eventbrite_api_token':
                 // These options can only be updated for sites hosted on WordPress.com
                 if (defined('IS_WPCOM') && IS_WPCOM) {
                     if (empty($value) || WPCOM_JSON_API::is_falsy($value)) {
                         if (delete_option($key)) {
                             $updated[$key] = null;
                         }
                     } else {
                         if (update_option($key, $value)) {
                             $updated[$key] = (int) $value;
                         }
                     }
                 }
                 break;
             case 'holidaysnow':
                 if (empty($value) || WPCOM_JSON_API::is_falsy($value)) {
                     if (function_exists('jetpack_holiday_snow_option_name') && delete_option(jetpack_holiday_snow_option_name())) {
                         $updated[$key] = false;
                     }
                 } else {
                     if (function_exists('jetpack_holiday_snow_option_name') && update_option(jetpack_holiday_snow_option_name(), 'letitsnow')) {
                         $updated[$key] = true;
                     }
                 }
                 break;
             case 'timezone_string':
                 // Map UTC+- timezones to gmt_offsets and set timezone_string to empty
                 // https://github.com/WordPress/WordPress/blob/4.4.2/wp-admin/options.php#L175
                 if (!empty($value) && preg_match('/^UTC[+-]/', $value)) {
                     $gmt_offset = preg_replace('/UTC\\+?/', '', $value);
                     if (update_option('gmt_offset', $gmt_offset)) {
                         $updated['gmt_offset'] = $gmt_offset;
                     }
                     $value = '';
                 }
                 // Always set timezone_string either with the given value or with an
                 // empty string
                 if (update_option($key, $value)) {
                     $updated[$key] = $value;
                 }
                 break;
             case 'site_icon':
                 // settings are stored as deletable numeric (all empty
                 // values as delete intent), validated as media image
                 if (empty($value) || WPCOM_JSON_API::is_falsy($value)) {
                     if (delete_option($key)) {
                         $updated[$key] = null;
                     }
                 } else {
                     if (is_numeric($value)) {
                         $coerce_value = (int) $value;
                         if (wp_attachment_is_image($coerce_value) && update_option($key, $coerce_value)) {
                             $updated[$key] = $coerce_value;
                         }
                     }
                 }
                 break;
             case Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION:
                 if (!Jetpack_SEO_Utils::is_enabled_jetpack_seo() && !Jetpack_SEO_Utils::has_grandfathered_front_page_meta()) {
                     return new WP_Error('unauthorized', __('SEO tools are not enabled for this site.', 'jetpack'), 403);
                 }
                 if (!is_string($value)) {
                     return new WP_Error('invalid_input', __('Invalid SEO meta description value.', 'jetpack'), 400);
                 }
                 $new_description = Jetpack_SEO_Utils::update_front_page_meta_description($value);
                 if (!empty($new_description)) {
                     $updated[$key] = $new_description;
                 }
                 break;
             case Jetpack_SEO_Titles::TITLE_FORMATS_OPTION:
                 if (!Jetpack_SEO_Utils::is_enabled_jetpack_seo()) {
                     return new WP_Error('unauthorized', __('SEO tools are not enabled for this site.', 'jetpack'), 403);
                 }
                 if (!Jetpack_SEO_Titles::are_valid_title_formats($value)) {
                     return new WP_Error('invalid_input', __('Invalid SEO title format.', 'jetpack'), 400);
                 }
                 $new_title_formats = Jetpack_SEO_Titles::update_title_formats($value);
                 if (!empty($new_title_formats)) {
                     $updated[$key] = $new_title_formats;
                 }
                 break;
             case 'verification_services_codes':
                 $verification_codes = jetpack_verification_validate($value);
                 if (update_option('verification_services_codes', $verification_codes)) {
                     $updated[$key] = $verification_codes;
                 }
                 break;
             default:
                 //allow future versions of this endpoint to support additional settings keys
                 if (has_filter('site_settings_endpoint_update_' . $key)) {
                     /**
                      * Filter current site setting value to be updated.
                      *
                      * @module json-api
                      *
                      * @since 3.9.3
                      *
                      * @param mixed $response_item A single site setting value.
                      */
                     $value = apply_filters('site_settings_endpoint_update_' . $key, $value);
                     $updated[$key] = $value;
                     continue;
                 }
                 // no worries, we've already whitelisted and casted arguments above
                 if (update_option($key, $value)) {
                     $updated[$key] = $value;
                 }
         }
     }
     if (count($jetpack_relatedposts_options)) {
         // track new jetpack_relatedposts options against old
         $old_relatedposts_options = Jetpack_Options::get_option('relatedposts');
         if (Jetpack_Options::update_option('relatedposts', $jetpack_relatedposts_options)) {
             foreach ($jetpack_relatedposts_options as $key => $value) {
                 if ($value !== $old_relatedposts_options[$key]) {
                     $updated['jetpack_relatedposts_' . $key] = $value;
                 }
             }
         }
     }
     if (!empty($sharing_options) && class_exists('Sharing_Service')) {
         $ss = new Sharing_Service();
         // Merge current values with updated, since Sharing_Service expects
         // all values to be included when updating
         $current_sharing_options = $ss->get_global_options();
         foreach ($current_sharing_options as $key => $val) {
             if (!isset($sharing_options[$key])) {
                 $sharing_options[$key] = $val;
             }
         }
         $updated_social_options = $ss->set_global_options($sharing_options);
         if (isset($input['sharing_button_style'])) {
             $updated['sharing_button_style'] = (string) $updated_social_options['button_style'];
         }
         if (isset($input['sharing_label'])) {
             // Sharing_Service won't report label as updated if set to default
             $updated['sharing_label'] = (string) $sharing_options['sharing_label'];
         }
         if (isset($input['sharing_show'])) {
             $updated['sharing_show'] = (array) $updated_social_options['show'];
         }
         if (isset($input['sharing_open_links'])) {
             $updated['sharing_open_links'] = (string) $updated_social_options['open_links'];
         }
     }
     return array('updated' => $updated);
 }