'description', '_headspace_metakey' => 'keywords', ); /** * Register plugin's hooks * * @return null */ private function __construct() { add_filter( 'pre_get_document_title', array( $this, 'filter_pre_get_document_title' ) ); add_filter( 'wp_title', array( $this, 'filter_wp_title' ), 10, 3 ); add_action( 'wp_head', array( $this, 'action_wp_head' ) ); add_action( 'wp_footer', array( $this, 'action_wp_footer' ) ); } /** * Filter page titles in WP 4.1+ themes * add_theme_support( 'title-tag' ) */ public function filter_pre_get_document_title( $title ) { $_title = get_post_meta( get_the_ID(), '_headspace_page_title', true ); if ( ! empty( $_title ) ) { $title = esc_html( $_title ); } unset( $_title ); return $title; } /** * Filter page titles in themes designed for < WP 4.1 * wp_title() */ public function filter_wp_title( $title, $sep, $loc ) { $_title = get_post_meta( get_the_ID(), '_headspace_page_title', true ); if ( ! empty( $_title ) ) { $_title = esc_html( $_title ); if ( 'right' == $loc ) { $title = $_title . ' ' . $sep . ' '; } else { $title = ' ' . $sep . ' ' . $_title; } } unset( $_title ); return $title; } /** * Add meta tags */ public function action_wp_head() { // Applies only to individual post objects if ( ! is_singular() ) { return; } // Check for HS data $hs_data = array(); // Keys that only exist once per post foreach ( array_merge( $this->hs_string_keys, $this->hs_robots_keys ) as $hs_key ) { $value = get_post_meta( get_the_ID(), $hs_key, true ); if ( ! empty( $value ) ) { $hs_data[ $hs_key ] = $value; } } // Keys that can exist multiple times per post foreach ( $this->hs_array_keys as $hs_key ) { $values = get_post_meta( get_the_ID(), $hs_key, false ); if ( ! empty( $values ) ) { $hs_data[ $hs_key ] = $values; } } // Bail if no HS data exists for this post if ( empty( $hs_data ) ) { return; } // Handle basic, string-containing keys $output = array(); foreach ( $hs_data as $hs_key => $hs_value ) { switch( $hs_key ) { case '_headspace_description' : case '_headspace_metakey' : $output[] = ''; break; case '_headspace_scripts' : foreach ( $hs_value as $_source ) { $output[] = ''; } break; case '_headspace_stylesheets' : foreach ( $hs_value as $_source ) { $output[] = ''; } break; default : continue; break; } } // Handle robots key, which is build from several meta keys $robots = array(); foreach ( $this->hs_robots_keys as $hs_robot_key ) { if ( isset( $hs_data[ $hs_robot_key] ) ) { $robots[] = str_replace( '_headspace_', '', $hs_robot_key ); } } if ( ! empty( $robots ) ) { if ( 1 === count( $robots ) && in_array( 'noindex', $robots ) ) { $robots[] = 'follow'; } $robots = implode( ',', $robots ); $output[] = '' . "\n"; } // Raw output should follow all other output if ( isset( $hs_data[ '_headspace_raw' ] ) && ! empty( $hs_data[ '_headspace_raw' ] ) ) { $output[] = $hs_data[ '_headspace_raw' ]; } // Output whatever we've built if ( ! empty( $output ) ) { echo "\n\n" . implode( "\n", $output ) . "\n\n"; } } /** * Add custom footer content */ public function action_wp_footer() { $output = get_post_meta( get_the_ID(), '_headspace_raw_footer', true ); if ( ! empty( $output ) ) { echo $output . "\n"; } } } ETH_Escape_HeadSpace2::get_instance();