WPSEO_Taxonomy_Metabox
This class generates the metabox on the edit term page.
Defined (1)
The class is defined in the following location(s).
- /admin/taxonomy/class-taxonomy-metabox.php
- class WPSEO_Taxonomy_Metabox {
- /**
- * @var stdClass
- */
- private $term;
- /**
- * @var string
- */
- private $taxonomy;
- /**
- * @var WPSEO_Taxonomy_Fields_Presenter
- */
- private $taxonomy_tab_content;
- /**
- * The constructor.
- *
- * @param string $taxonomy The taxonomy.
- * @param stdClass $term The term.
- */
- public function __construct( $taxonomy, $term ) {
- $this->term = $term;
- $this->taxonomy = $taxonomy;
- $this->taxonomy_tab_content = new WPSEO_Taxonomy_Fields_Presenter( $this->term );
- add_action( 'admin_footer', array( $this, 'template_generic_tab' ) );
- add_action( 'admin_footer', array( $this, 'template_keyword_tab' ) );
- }
- /**
- * Shows the Yoast SEO metabox for the term.
- */
- public function display() {
- $content_sections = $this->get_content_sections();
- $product_title = 'Yoast SEO';
- if ( file_exists( WPSEO_PATH . 'premium/' ) ) {
- $product_title .= ' Premium';
- }
- printf( '<div id="wpseo_meta" class="postbox yoast wpseo-taxonomy-metabox-postbox"><h2><span>%1$s</span></h2>', $product_title );
- echo '<div class="inside">';
- $helpcenter_tab = new WPSEO_Option_Tab( 'tax-metabox', 'Meta box',
- array( 'video_url' => 'https://yoa.st/metabox-taxonomy-screencast' ) );
- $helpcenter = new WPSEO_Help_Center( 'tax-metabox', $helpcenter_tab );
- $helpcenter->output_help_center();
- echo '<div id="taxonomy_overall"></div>';
- if ( ! defined( 'WPSEO_PREMIUM_FILE' ) ) {
- echo $this->get_buy_premium_link();
- }
- echo '<div class="wpseo-metabox-sidebar"><ul>';
- foreach ( $content_sections as $content_section ) {
- if ( $content_section->name === 'premium' ) {
- continue;
- }
- $content_section->display_link();
- }
- echo '</ul></div>';
- foreach ( $content_sections as $content_section ) {
- $content_section->display_content();
- }
- echo '</div></div>';
- }
- /**
- * Returns the relevant metabox sections for the current view.
- *
- * @return WPSEO_Metabox_Section[]
- */
- private function get_content_sections() {
- $content_sections = array(
- $this->get_content_meta_section(),
- $this->get_social_meta_section(),
- $this->get_settings_meta_section(),
- );
- if ( ! defined( 'WPSEO_PREMIUM_FILE' ) ) {
- $content_sections[] = $this->get_buy_premium_section();
- }
- return $content_sections;
- }
- /**
- * Returns the metabox section for the content analysis.
- *
- * @return WPSEO_Metabox_Section
- */
- private function get_content_meta_section() {
- $taxonomy_content_fields = new WPSEO_Taxonomy_Content_Fields( $this->term );
- $content = $this->taxonomy_tab_content->html( $taxonomy_content_fields->get() );
- $tab = new WPSEO_Metabox_Form_Tab(
- 'content',
- $content,
- '',
- array(
- 'tab_class' => 'yoast-seo__remove-tab',
- )
- );
- return new WPSEO_Metabox_Tab_Section(
- 'content',
- '<span class="screen-reader-text">' . __( 'Content optimization', 'wordpress-seo' ) . '</span><span class="yst-traffic-light-container">' . $this->traffic_light_svg() . '</span>',
- array( $tab ),
- array(
- 'link_aria_label' => __( 'Content optimization', 'wordpress-seo' ),
- 'link_class' => 'yoast-tooltip yoast-tooltip-e',
- )
- );
- }
- /**
- * Returns the metabox section for the settings.
- *
- * @return WPSEO_Metabox_Section
- */
- private function get_settings_meta_section() {
- $taxonomy_settings_fields = new WPSEO_Taxonomy_Settings_Fields( $this->term );
- $content = $this->taxonomy_tab_content->html( $taxonomy_settings_fields->get() );
- $tab = new WPSEO_Metabox_Form_Tab(
- 'settings',
- $content,
- __( 'Settings', 'wordpress-seo' ),
- array(
- 'single' => true,
- )
- );
- return new WPSEO_Metabox_Tab_Section(
- 'settings',
- '<span class="screen-reader-text">' . __( 'Settings', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-admin-generic"></span>',
- array( $tab ),
- array(
- 'link_aria_label' => __( 'Settings', 'wordpress-seo' ),
- 'link_class' => 'yoast-tooltip yoast-tooltip-e',
- )
- );
- }
- /**
- * Returns the metabox section for the social settings.
- *
- * @return WPSEO_Metabox_Section
- */
- private function get_social_meta_section() {
- $options = WPSEO_Options::get_option( 'wpseo_social' );
- $taxonomy_social_fields = new WPSEO_Taxonomy_Social_Fields( $this->term );
- $tabs = array();
- $single = true;
- if ( $options['opengraph'] === true && $options['twitter'] === true ) {
- $single = null;
- }
- if ( $options['opengraph'] === true ) {
- $facebook_meta_fields = $taxonomy_social_fields->get_by_network( 'opengraph' );
- $tabs[] = new WPSEO_Metabox_Form_Tab(
- 'facebook',
- $this->taxonomy_tab_content->html( $facebook_meta_fields ),
- '<span class="screen-reader-text">' . __( 'Facebook / Open Graph metadata', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-facebook-alt"></span>',
- array(
- 'link_aria_label' => __( 'Facebook / Open Graph metadata', 'wordpress-seo' ),
- 'link_class' => 'yoast-tooltip yoast-tooltip-se',
- 'single' => $single,
- )
- );
- }
- if ( $options['twitter'] === true ) {
- $twitter_meta_fields = $taxonomy_social_fields->get_by_network( 'twitter' );
- $tabs[] = new WPSEO_Metabox_Form_Tab(
- 'twitter',
- $this->taxonomy_tab_content->html( $twitter_meta_fields ),
- '<span class="screen-reader-text">' . __( 'Twitter metadata', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-twitter"></span>',
- array(
- 'link_aria_label' => __( 'Twitter metadata', 'wordpress-seo' ),
- 'link_class' => 'yoast-tooltip yoast-tooltip-se',
- 'single' => $single,
- )
- );
- }
- return new WPSEO_Metabox_Tab_Section(
- 'social',
- '<span class="screen-reader-text">' . __( 'Social', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-share"></span>',
- $tabs,
- array(
- 'link_aria_label' => __( 'Social', 'wordpress-seo' ),
- 'link_class' => 'yoast-tooltip yoast-tooltip-e',
- )
- );
- }
- /**
- * Returns a link to activate the Buy Premium tab.
- *
- * @return string
- */
- private function get_buy_premium_link() {
- return sprintf( "<div class='%s'><a href='#wpseo-meta-section-premium' class='wpseo-meta-section-link'><span class='dashicons dashicons-star-filled wpseo-buy-premium'></span>%s</a></div>",
- 'wpseo-metabox-buy-premium',
- __( 'Go Premium', 'wordpress-seo' )
- );
- }
- /**
- * Returns the metabox section for the Premium section..
- *
- * @return WPSEO_Metabox_Section
- */
- private function get_buy_premium_section() {
- $content = sprintf( "<div class='wpseo-metabox-premium-description'>
- %s
- <ul class='wpseo-metabox-premium-advantages'>
- <li>
- <strong>%s</strong> - %s
- </li>
- <li>
- <strong>%s</strong> - %s
- </li>
- <li>
- <strong>%s</strong> - %s
- </li>
- <li>
- <strong>%s</strong> - %s
- </li>
- </ul>
- <a target='_blank' id='wpseo-buy-premium-popup-button' class='button button-buy-premium wpseo-metabox-go-to' href='%s'>
- %s
- </a>
- <p><a target='_blank' class='wpseo-metabox-go-to' href='%s'>%s</a></p>
- </div>",
- /** translators: %1$s expands to Yoast SEO Premium. */
- sprintf( __( 'You\'re not getting the benefits of %1$s yet. If you had %1$s, you could use its awesome features:', 'wordpress-seo' ), 'Yoast SEO Premium' ),
- __( 'Redirect manager', 'wordpress-seo' ),
- __( 'Create and manage redirects within your WordPress install.', 'wordpress-seo' ),
- __( 'Multiple focus keywords', 'wordpress-seo' ),
- __( 'Optimize a single post for up to 5 keywords.', 'wordpress-seo' ),
- __( 'Social Previews', 'wordpress-seo' ),
- __( 'Check what your Facebook or Twitter post will look like.', 'wordpress-seo' ),
- __( 'Premium support', 'wordpress-seo' ),
- __( 'Gain access to our 24/7 support team.', 'wordpress-seo' ),
- WPSEO_Shortlinker::get( 'https://yoa.st/pe-buy-premium' ),
- /** translators: %s expands to Yoast SEO Premium. */
- sprintf( __( 'Get %s now!', 'wordpress-seo' ), 'Yoast SEO Premium' ),
- WPSEO_Shortlinker::get( 'https://yoa.st/pe-premium-page' ),
- __( 'More info', 'wordpress-seo' )
- );
- $tab = new WPSEO_Metabox_Form_Tab(
- 'premium',
- $content,
- 'Yoast SEO Premium',
- array(
- 'single' => true,
- )
- );
- return new WPSEO_Metabox_Tab_Section(
- 'premium',
- '<span class="dashicons dashicons-star-filled wpseo-buy-premium"></span>',
- array( $tab ),
- array(
- 'link_aria_label' => 'Yoast SEO Premium',
- 'link_class' => 'yoast-tooltip yoast-tooltip-e',
- )
- );
- }
- /**
- * Test whether we are on a public taxonomy - no metabox actions needed if we are not
- * Unfortunately we have to hook most everything in before the point where all taxonomies are registered and
- * we know which taxonomy is being requested, so we need to use this check in nearly every hooked in function.
- *
- * @since 1.5.0
- */
- private function tax_is_public() {
- // Don't make static as taxonomies may still be added during the run.
- $taxonomy = get_taxonomy( $this->taxonomy );
- return $taxonomy->public;
- }
- /**
- * Return the SVG for the traffic light in the metabox.
- */
- public function traffic_light_svg() {
- return <<<SVG
- <svg class="yst-traffic-light init" version="1.1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
- x="0px" y="0px" viewBox="0 0 30 47" enable-background="new 0 0 30 47" xml:space="preserve">
- <g id="BG_1_">
- </g>
- <g id="traffic_light">
- <g>
- <g>
- <g>
- <path fill="#5B2942" d="M22, 0H8C3.6, 0, 0, 3.6, 0, 7.9v31.1C0, 43.4, 3.6, 47, 8, 47h14c4.4, 0, 8-3.6, 8-7.9V7.9C30, 3.6, 26.4, 0, 22, 0z
- M27.5, 38.8c0, 3.1-2.6, 5.7-5.8, 5.7H8.3c-3.2, 0-5.8-2.5-5.8-5.7V8.3c0-1.5, 0.6-2.9, 1.7-4c1.1-1, 2.5-1.6, 4.1-1.6h13.4
- c1.5, 0, 3, 0.6, 4.1, 1.6c1.1, 1.1, 1.7, 2.5, 1.7, 4V38.8z"/>
- </g>
- <g class="traffic-light-color traffic-light-red">
- <ellipse fill="#C8C8C8" cx="15" cy="23.5" rx="5.7" ry="5.6"/>
- <ellipse fill="#DC3232" cx="15" cy="10.9" rx="5.7" ry="5.6"/>
- <ellipse fill="#C8C8C8" cx="15" cy="36.1" rx="5.7" ry="5.6"/>
- </g>
- <g class="traffic-light-color traffic-light-orange">
- <ellipse fill="#F49A00" cx="15" cy="23.5" rx="5.7" ry="5.6"/>
- <ellipse fill="#C8C8C8" cx="15" cy="10.9" rx="5.7" ry="5.6"/>
- <ellipse fill="#C8C8C8" cx="15" cy="36.1" rx="5.7" ry="5.6"/>
- </g>
- <g class="traffic-light-color traffic-light-green">
- <ellipse fill="#C8C8C8" cx="15" cy="23.5" rx="5.7" ry="5.6"/>
- <ellipse fill="#C8C8C8" cx="15" cy="10.9" rx="5.7" ry="5.6"/>
- <ellipse fill="#63B22B" cx="15" cy="36.1" rx="5.7" ry="5.6"/>
- </g>
- <g class="traffic-light-color traffic-light-empty">
- <ellipse fill="#C8C8C8" cx="15" cy="23.5" rx="5.7" ry="5.6"/>
- <ellipse fill="#C8C8C8" cx="15" cy="10.9" rx="5.7" ry="5.6"/>
- <ellipse fill="#C8C8C8" cx="15" cy="36.1" rx="5.7" ry="5.6"/>
- </g>
- <g class="traffic-light-color traffic-light-init">
- <ellipse fill="#5B2942" cx="15" cy="23.5" rx="5.7" ry="5.6"/>
- <ellipse fill="#5B2942" cx="15" cy="10.9" rx="5.7" ry="5.6"/>
- <ellipse fill="#5B2942" cx="15" cy="36.1" rx="5.7" ry="5.6"/>
- </g>
- </g>
- </g>
- </g>
- </svg>
- SVG;
- }
- /**
- * Generic tab.
- */
- public function template_generic_tab() {
- // This template belongs to the post scraper so don't echo it if it isn't enqueued.
- if ( ! wp_script_is( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper' ) ) {
- return;
- }
- echo '<script type="text/html" id="tmpl-generic_tab">
- <li class="<# if ( data.classes ) { #>{{data.classes}}<# } #><# if ( data.active ) { #> active<# } #>">
- <a class="wpseo_tablink" href="#wpseo_generic" data-score="{{data.score}}">
- <span class="wpseo-score-icon {{data.score}}"></span>
- <span class="wpseo-tab-prefix">{{data.prefix}}</span>
- <span class="wpseo-tab-label">{{data.label}}</span>
- <span class="screen-reader-text wpseo-generic-tab-textual-score">{{data.scoreText}}</span>
- </a>
- <# if ( data.hideable ) { #>
- <button type="button" class="remove-tab" aria-label="{{data.removeLabel}}"><span>x</span></button>
- <# } #>
- </li>
- </script>';
- }
- /**
- * Keyword tab for enabling analysis of multiple keywords.
- */
- public function template_keyword_tab() {
- // This template belongs to the term scraper so don't echo it if it isn't enqueued.
- if ( ! wp_script_is( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper' ) ) {
- return;
- }
- echo '<script type="text/html" id="tmpl-keyword_tab">
- <li class="<# if ( data.classes ) { #>{{data.classes}}<# } #><# if ( data.active ) { #> active<# } #>">
- <a class="wpseo_tablink" href="#wpseo_content" data-keyword="{{data.keyword}}" data-score="{{data.score}}">
- <span class="wpseo-score-icon {{data.score}}"></span>
- <span class="wpseo-tab-prefix">{{data.prefix}}</span>
- <em class="wpseo-keyword">{{data.label}}</em>
- <span class="screen-reader-text wpseo-keyword-tab-textual-score">{{data.scoreText}}</span>
- </a>
- <# if ( data.hideable ) { #>
- <button type="button" class="remove-keyword" aria-label="{{data.removeLabel}}"><span>x</span></button>
- <# } #>
- </li>
- </script>';
- }
- }