diff --git a/eth-escape-headspace.php b/eth-escape-headspace.php index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..edb9945bc2fcb9b539ebbaa2dae8f1bb2a1f4ee7 100644 --- a/eth-escape-headspace.php +++ b/eth-escape-headspace.php @@ -0,0 +1,138 @@ +<?php +/* +Plugin Name: ETH Escape HeadSpace2 +Plugin URI: https://ethitter.com/plugins/ +Description: Output existing HeadSpace2 data without the original plugin. Allows HeadSpace2 (no longer maintained) to be deactivated without impactacting legacy content. +Author: Erick Hitter +Version: 0.1 +Author URI: https://ethitter.com/ + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +class ETH_Escape_HeadSpace2 { + /** + * Singleton + */ + private static $instance = null; + + /** + * Instantiate singleton + */ + public static function get_instance() { + if ( ! is_a( self::$instance, __CLASS__ ) ) { + self::$instance = new self; + } + + return self::$instance; + } + + /** + * Class properties + */ + private $hs_string_keys = array( + '_headspace_description', + '_headspace_metakey', + ); + + private $hs_robots_keys = array( + '_headspace_noindex', + '_headspace_nofollow', + '_headspace_noarchive', + '_headspace_noodp', + '_headspace_noydir', + ); + + private $hs_keys_to_meta_names = array( + '_headspace_description' => 'description', + '_headspace_metakey' => 'keywords', + ); + + /** + * Register plugin's hooks + * + * @return null + */ + private function __construct() { + add_action( 'wp_head', array( $this, 'action_wp_head' ) ); + } + + /** + * + */ + public function action_wp_head() { + // Applies only to individual post objects + if ( ! is_singular() ) { + return; + } + + // Check for HS data + $hs_data = array(); + + 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; + } + } + + // Bail if no HS data exists for this post + if ( empty( $hs_data ) ) { + return; + } + + // Build output + echo "\n<!-- Escape HeadSpace2 by Erick Hitter; ethitter.com -->\n"; + + // Handle basic, string-containing keys + foreach ( $hs_data as $hs_key => $hs_value ) { + switch( $hs_key ) { + case '_headspace_description' : + case '_headspace_metakey' : + echo '<meta name="' . esc_attr( $this->hs_keys_to_meta_names[ $hs_key ] ) . '" content="' . esc_attr( $hs_value ) . '" />' . "\n"; + 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 ); + + echo '<meta name="robots" content="' . esc_attr( $robots ) . '" />' . "\n"; + } + + // Mark end of output + echo "<!-- Escape HeadSpace2 -->\n"; + } +} + +ETH_Escape_HeadSpace2::get_instance(); diff --git a/readme.txt b/readme.txt index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..66e7a2a1575c53cdc0b3c48cdb1d84d3ee8f9757 100644 --- a/readme.txt +++ b/readme.txt @@ -0,0 +1,33 @@ +=== ETH Escape HeadSpace2 === +Contributors: ethitter +Donate link: https://ethitter.com/ +Tags: seo, meta tags +Requires at least: 4.4 +Tested up to: 4.4 +Stable tag: 0.1 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Output existing HeadSpace2 data without the original plugin. Deactivate HeadSpace2 (no longer maintained) without impactacting legacy content. + +== Description == + +Outputs data stored in HeadSpace2 post meta without requiring HeadSpace2. This allows one to remove the now-unmaintained HeadSpace2 plugin without losing the data associated with legacy content. + +Note that many current SEO plugins for WordPress also handle migration, but since I don't use any such plugins on my network, I created this alternative. + +== Installation == + +1. Upload the plugin files to the `/wp-content/plugins/eth-escape-headspace` directory, or install the plugin through the WordPress plugins screen directly. +1. Activate the plugin through the 'Plugins' screen in WordPress + +== Frequently Asked Questions == + += Can I modify existing data using this plugin? = + +No. If you need to update entries, reinstall HeadSpace2 or modify the values directly in the database. + +== Changelog == + += 0.1 = +* Initial release