laipower/wp-content/themes/generatepress/inc/class-html-attributes.php

496 lines
11 KiB
PHP

<?php
/**
* Add HTML attributes to our theme elements.
*
* @package GeneratePress
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* This class adds HTML attributes to various theme elements.
*/
class GeneratePress_HTML_Attributes {
/**
* Class instance.
*
* @access private
* @var $instance Class instance.
*/
private static $instance;
/**
* Initiator
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
public function __construct() {
add_filter( 'generate_parse_attr', array( $this, 'parse_attributes' ), 10, 3 );
}
/**
* Parse the attributes.
*
* @since 3.1.0
* @param array $attributes The current attributes.
* @param string $context The context in which attributes are applied.
* @param array $settings Custom settings passed to the filter.
*/
public function parse_attributes( $attributes, $context, $settings ) {
switch ( $context ) {
case 'top-bar':
return $this->top_bar( $attributes );
case 'inside-top-bar':
return $this->inside_top_bar( $attributes );
case 'header':
return $this->site_header( $attributes );
case 'inside-header':
return $this->inside_site_header( $attributes );
case 'menu-toggle':
return $this->menu_toggle( $attributes );
case 'navigation':
return $this->primary_navigation( $attributes );
case 'inside-navigation':
return $this->primary_inner_navigation( $attributes );
case 'mobile-menu-control-wrapper':
return $this->mobile_menu_control_wrapper( $attributes );
case 'site-info':
return $this->site_info( $attributes );
case 'inside-site-info':
return $this->inside_site_info( $attributes );
case 'entry-header':
return $this->entry_header( $attributes );
case 'page-header':
return $this->page_header( $attributes );
case 'site-content':
return $this->site_content( $attributes );
case 'page':
return $this->page( $attributes );
case 'content':
return $this->content( $attributes );
case 'main':
return $this->main( $attributes );
case 'post-navigation':
return $this->post_navigation( $attributes );
case 'left-sidebar':
return $this->left_sidebar( $attributes );
case 'right-sidebar':
return $this->right_sidebar( $attributes );
case 'footer-widgets-container':
return $this->footer_widgets_container( $attributes );
case 'comment-body':
return $this->comment_body( $attributes, $settings );
case 'comment-meta':
return $this->comment_meta( $attributes );
case 'footer-entry-meta':
return $this->footer_entry_meta( $attributes );
case 'woocommerce-content':
return $this->woocommerce_content( $attributes );
}
return $attributes;
}
/**
* Add attributes to our top bar.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function top_bar( $attributes ) {
$classes = generate_get_element_classes( 'top_bar' );
if ( $classes ) {
$attributes['class'] .= ' ' . join( ' ', $classes );
}
return $attributes;
}
/**
* Add attributes to our inside top bar container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function inside_top_bar( $attributes ) {
$attributes['class'] .= ' inside-top-bar';
if ( 'contained' === generate_get_option( 'top_bar_inner_width' ) ) {
$attributes['class'] .= ' grid-container';
if ( ! generate_is_using_flexbox() ) {
$attributes['class'] .= ' grid-parent';
}
}
return $attributes;
}
/**
* Add attributes to our site header.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function site_header( $attributes ) {
$attributes['id'] = 'masthead';
$attributes['aria-label'] = esc_attr__( 'Site', 'generatepress' );
return $attributes;
}
/**
* Add attributes to our inside site header container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function inside_site_header( $attributes ) {
$classes = generate_get_element_classes( 'inside_header' );
if ( $classes ) {
$attributes['class'] .= ' ' . join( ' ', $classes );
}
return $attributes;
}
/**
* Add attributes to our menu toggle.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function menu_toggle( $attributes ) {
$attributes['class'] .= ' menu-toggle';
$attributes['aria-controls'] = 'primary-menu';
$attributes['aria-expanded'] = 'false';
return $attributes;
}
/**
* Add attributes to our main navigation.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function primary_navigation( $attributes ) {
$attributes['id'] = 'site-navigation';
$attributes['aria-label'] = esc_attr__( 'Primary', 'generatepress' );
return $attributes;
}
/**
* Add attributes to our main navigation.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function primary_inner_navigation( $attributes ) {
$classes = generate_get_element_classes( 'inside_navigation' );
if ( $classes ) {
$attributes['class'] .= ' ' . join( ' ', $classes );
}
return $attributes;
}
/**
* Add attributes to our main navigation.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function mobile_menu_control_wrapper( $attributes ) {
$attributes['id'] = 'mobile-menu-control-wrapper';
$attributes['class'] .= ' main-navigation mobile-menu-control-wrapper';
$attributes['aria-label'] = esc_attr__( 'Mobile Toggle', 'generatepress' );
return $attributes;
}
/**
* Add attributes to our footer element.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function site_info( $attributes ) {
$attributes['class'] .= ' site-info';
$attributes['aria-label'] = esc_attr__( 'Site', 'generatepress' );
return $attributes;
}
/**
* Add attributes to our inside site info container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function inside_site_info( $attributes ) {
$attributes['class'] .= ' inside-site-info';
if ( 'full-width' !== generate_get_option( 'footer_inner_width' ) ) {
$attributes['class'] .= ' grid-container';
if ( ! generate_is_using_flexbox() ) {
$attributes['class'] .= ' grid-parent';
}
}
return $attributes;
}
/**
* Add attributes to our entry headers.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function entry_header( $attributes ) {
$attributes['class'] .= ' entry-header';
return $attributes;
}
/**
* Add attributes to our page headers.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function page_header( $attributes ) {
$attributes['class'] .= ' page-header';
$attributes['aria-label'] = esc_attr__( 'Page', 'generatepress' );
return $attributes;
}
/**
* Add attributes to our entry headers.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function post_navigation( $attributes ) {
if ( is_single() ) {
$attributes['class'] .= ' post-navigation';
$attributes['aria-label'] = esc_attr__( 'Posts', 'generatepress' );
} else {
$attributes['class'] .= ' paging-navigation';
$attributes['aria-label'] = esc_attr__( 'Archive Page', 'generatepress' );
}
return $attributes;
}
/**
* Add attributes to our page container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function page( $attributes ) {
$attributes['id'] = 'page';
return $attributes;
}
/**
* Add attributes to our site content container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function site_content( $attributes ) {
$attributes['id'] = 'content';
$attributes['class'] .= ' site-content';
return $attributes;
}
/**
* Add attributes to our primary content container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function content( $attributes ) {
$attributes['id'] = 'primary';
return $attributes;
}
/**
* Add attributes to our primary content container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function main( $attributes ) {
$attributes['id'] = 'main';
return $attributes;
}
/**
* Add attributes to our left sidebar.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function left_sidebar( $attributes ) {
$classes = generate_get_element_classes( 'left_sidebar' );
if ( $classes ) {
$attributes['class'] .= ' ' . join( ' ', $classes );
}
$attributes['id'] = 'left-sidebar';
return $attributes;
}
/**
* Add attributes to our right sidebar.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function right_sidebar( $attributes ) {
$classes = generate_get_element_classes( 'right_sidebar' );
if ( $classes ) {
$attributes['class'] .= ' ' . join( ' ', $classes );
}
$attributes['id'] = 'right-sidebar';
return $attributes;
}
/**
* Add attributes to our footer widget inner container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function footer_widgets_container( $attributes ) {
$classes = generate_get_element_classes( 'inside_footer' );
if ( $classes ) {
$attributes['class'] .= ' ' . join( ' ', $classes );
}
return $attributes;
}
/**
* Add attributes to our footer widget inner container.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
* @param array $settings Settings passed through the function.
*/
public function comment_body( $attributes, $settings ) {
$attributes['class'] .= ' comment-body';
$attributes['id'] = 'div-comment-' . $settings['comment-id'];
return $attributes;
}
/**
* Add attributes to our comment meta.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function comment_meta( $attributes ) {
$attributes['class'] .= ' comment-meta';
$attributes['aria-label'] = esc_attr__( 'Comment meta', 'generatepress' );
return $attributes;
}
/**
* Add attributes to our footer entry meta.
*
* @since 3.1.0
* @param array $attributes The existing attributes.
*/
public function footer_entry_meta( $attributes ) {
$attributes['class'] .= ' entry-meta';
$attributes['aria-label'] = esc_attr__( 'Entry meta', 'generatepress' );
return $attributes;
}
/**
* Add attributes to our WooCommerce content container.
*
* @since 3.2.0
* @param array $attributes The existing attributes.
*/
public function woocommerce_content( $attributes ) {
if ( is_singular() ) {
$attributes['id'] = 'post-' . get_the_ID();
$attributes['class'] = esc_attr( implode( ' ', get_post_class( '', get_the_ID() ) ) );
if ( 'microdata' === generate_get_schema_type() ) {
$type = apply_filters( 'generate_article_itemtype', 'CreativeWork' );
$attributes['itemtype'] = sprintf(
'https://schema.org/%s',
$type
);
$attributes['itemscope'] = true;
}
} else {
$attributes['class'] = 'woocommerce-archive-wrapper';
}
return $attributes;
}
}
GeneratePress_HTML_Attributes::get_instance();