123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- <?php
- /**
- * WPSEO plugin file.
- *
- * @package WPSEO\Admin
- */
- /**
- * This class generates the metabox on the edit term page.
- */
- class WPSEO_Taxonomy_Metabox {
- /**
- * The term currently being edited.
- *
- * @var WP_Term
- */
- private $term;
- /**
- * The term's taxonomy.
- *
- * @var string
- */
- private $taxonomy;
- /**
- * Renders the taxonomy field.
- *
- * @var WPSEO_Taxonomy_Fields_Presenter
- */
- private $taxonomy_tab_content;
- /**
- * Renders the taxonomy social fields.
- *
- * @var WPSEO_Taxonomy_Social_Fields
- */
- private $taxonomy_social_fields;
- /**
- * This class adds the Social tab to the Yoast SEO metabox and makes sure the settings are saved.
- *
- * @var WPSEO_Social_Admin
- */
- private $social_admin;
- /**
- * 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 );
- }
- /**
- * 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';
- }
- // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $product_title is hardcoded.
- printf( '<div id="wpseo_meta" class="postbox yoast wpseo-taxonomy-metabox-postbox"><h2><span>%1$s</span></h2>', $product_title );
- echo '<div class="inside">';
- echo '<div id="taxonomy_overall"></div>';
- echo '<div class="wpseo-metabox-content">';
- // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $product_title is hardcoded.
- printf( '<div class="wpseo-metabox-menu"><ul role="tablist" class="yoast-aria-tabs" aria-label="%s">', $product_title );
- foreach ( $content_sections as $content_section ) {
- $content_section->display_link();
- }
- echo '</ul></div>';
- foreach ( $content_sections as $content_section ) {
- $content_section->display_content();
- }
- echo '</div></div>';
- echo '</div>';
- }
- /**
- * Returns the relevant metabox sections for the current view.
- *
- * @return WPSEO_Metabox_Section[]
- */
- private function get_content_sections() {
- $content_sections = [];
- $content_sections[] = $this->get_seo_meta_section();
- $readability_analysis = new WPSEO_Metabox_Analysis_Readability();
- if ( $readability_analysis->is_enabled() ) {
- $content_sections[] = $this->get_readability_meta_section();
- }
- $content_sections[] = $this->get_social_meta_section();
- return $content_sections;
- }
- /**
- * Returns the metabox section for the content analysis.
- *
- * @return WPSEO_Metabox_Section
- */
- private function get_seo_meta_section() {
- $taxonomy_content_fields = new WPSEO_Taxonomy_Content_Fields( $this->term );
- $content = $this->taxonomy_tab_content->html( $taxonomy_content_fields->get( $this->term ) );
- $seo_analysis = new WPSEO_Metabox_Analysis_SEO();
- $label = __( 'SEO', 'wordpress-seo' );
- if ( $seo_analysis->is_enabled() ) {
- $label = '<span class="wpseo-score-icon-container" id="wpseo-seo-score-icon"></span>' . $label;
- }
- $html_after = '';
- if ( WPSEO_Capability_Utils::current_user_can( 'wpseo_edit_advanced_metadata' ) || WPSEO_Options::get( 'disableadvanced_meta' ) === false ) {
- $taxonomy_settings_fields = new WPSEO_Taxonomy_Settings_Fields( $this->term );
- $advanced_collapsible = new WPSEO_Paper_Presenter(
- __( 'Advanced', 'wordpress-seo' ),
- null,
- [
- 'collapsible' => true,
- 'class' => 'metabox wpseo-form wpseo-collapsible-container',
- 'content' => $this->taxonomy_tab_content->html( $taxonomy_settings_fields->get() ),
- 'paper_id' => 'collapsible-advanced-settings',
- ]
- );
- $html_after = '<div class="wpseo_content_wrapper">' . $advanced_collapsible->get_output() . '</div>';
- }
- return new WPSEO_Metabox_Section_React(
- 'content',
- $label,
- $content,
- [
- 'html_after' => $html_after,
- ]
- );
- }
- /**
- * Returns the metabox section for the readability analysis.
- *
- * @return WPSEO_Metabox_Section
- */
- private function get_readability_meta_section() {
- return new WPSEO_Metabox_Section_Readability();
- }
- /**
- * Returns the metabox section for the social settings.
- *
- * @return WPSEO_Metabox_Section
- */
- private function get_social_meta_section() {
- $this->taxonomy_social_fields = new WPSEO_Taxonomy_Social_Fields( $this->term );
- $this->social_admin = new WPSEO_Social_Admin();
- $collapsibles = [];
- $collapsibles[] = $this->create_collapsible( 'facebook', 'opengraph', 'facebook-alt', __( 'Facebook', 'wordpress-seo' ) );
- $collapsibles[] = $this->create_collapsible( 'twitter', 'twitter', 'twitter', __( 'Twitter', 'wordpress-seo' ) );
- return new WPSEO_Metabox_Collapsibles_Sections(
- 'social',
- '<span class="dashicons dashicons-share"></span>' . __( 'Social', 'wordpress-seo' ),
- $collapsibles
- );
- }
- /**
- * Creates a social network tab.
- *
- * @param string $name The name of the tab.
- * @param string $network The network of the tab.
- * @param string $icon The icon for the tab.
- * @param string $label The label for the tab.
- *
- * @return WPSEO_Metabox_Tab A WPSEO_Metabox_Tab instance.
- */
- private function create_collapsible( $name, $network, $icon, $label ) {
- if ( WPSEO_Options::get( $network ) !== true ) {
- return new WPSEO_Metabox_Null_Tab();
- }
- $meta_fields = $this->taxonomy_social_fields->get_by_network( $network );
- $content = $this->taxonomy_tab_content->html( $meta_fields );
- /**
- * If premium hide the form to show the social preview instead, we still need the fields to be output because
- * the values of the social preview are saved in the hidden field.
- */
- $features = new WPSEO_Features();
- if ( $features->is_premium() ) {
- $content = $this->hide_form( $content );
- }
- $tab_settings = new WPSEO_Metabox_Collapsible(
- $name,
- $this->social_admin->get_premium_notice( $network ) . $content,
- $label
- );
- return $tab_settings;
- }
- /**
- * Hides the given output when rendered to HTML.
- *
- * @param string $tab_content The social tab content.
- *
- * @return string The content.
- */
- private function hide_form( $tab_content ) {
- return '<div class="hidden">' . $tab_content . '</div>';
- }
- }
|