Skip to content

Commit

Permalink
Adding support to update the plugin via GitHub
Browse files Browse the repository at this point in the history
  • Loading branch information
millertchris committed Jan 26, 2021
1 parent 9b985af commit c46fbec
Show file tree
Hide file tree
Showing 110 changed files with 11,614 additions and 30 deletions.
41 changes: 13 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# WP Light

Create a lighter and more performant WordPress by removing things you don’t need.

## Description

WordPress out of the box includes several things in the head section of your theme that you may never use. If you’re a clean freak like me, you may want to limit or control exactly what goes into your head section.

There are future plans to give you control over what to keep and what to remove but for now, activating this plugin will remove the following.
Expand All @@ -15,31 +17,31 @@ remove_action('wp_head', 'wp_generator');
// remove rss feed links (e.g. <link rel="alternate" type="application/rss+xml" title="Site Feed" href="/feed/" /> <link rel="alternate" type="application/rss+xml" title="Site Comments Feed" href="/comments/feed/" />)
remove_action('wp_head', 'feed_links', 2);
// remove all extra rss feed links
remove_action('wp_head', 'feed_links_extra', 3);
// remove link to index page
remove_action('wp_head', 'index_rel_link');
// remove wlwmanifest.xml (e.g. needed to support windows live writer) | <link rel="https://api.w.org/" href="/wp-json/" /><link rel="wlwmanifest" type="application/wlwmanifest+xml" href="/wp-includes/wlwmanifest.xml" />
remove_action('wp_head', 'wlwmanifest_link');
// remove random post link
remove_action('wp_head', 'start_post_rel_link', 10, 0);
// remove parent post link
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
// remove the next and previous post links
// remove the next and previous post links
remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);
// remove adjacent post rel link
// remove adjacent post rel link
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
// remove JSON link from head (e.g. <link rel="https://api.w.org/" href="/wp-json/" /><link rel="alternate" type="application/json" href="/wp-json/wp/v2/posts/15" /><link rel="canonical" href="/test/" />)
remove_action('wp_head', 'rest_output_link_wp_head');
// remove shortlink (i.e. <link rel='shortlink' href='/?p=15' />)
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);
Expand All @@ -51,24 +53,7 @@ remove_action( 'wp_print_styles', 'print_emoji_styles' );
```

## Installation

1. Upload `wp-light.php` to the `/wp-content/plugins/` directory
2. Activate the plugin through the ‘Plugins’ menu in WordPress
3. Grab some coffee ☕

### Changelog

= 1.0 =
* Added `remove_action('wp_head', 'rsd_link’);`
* Added `remove_action('wp_head', 'wp_generator');`
* Added `remove_action('wp_head', 'feed_links', 2);`
* Added `remove_action('wp_head', 'feed_links_extra', 3);`
* Added `remove_action('wp_head', 'index_rel_link');`
* Added `remove_action('wp_head', 'wlwmanifest_link');`
* Added `remove_action('wp_head', 'start_post_rel_link', 10, 0);`
* Added `remove_action('wp_head', 'parent_post_rel_link', 10, 0);`
* Added `remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);`
* Added `remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);`
* Added `remove_action('wp_head', 'rest_output_link_wp_head');`
* Added `remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);`
* Added `remove_action( 'wp_head', 'print_emoji_detection_script', 7 );`
* Added `remove_action( 'wp_print_styles', 'print_emoji_styles' );`
15 changes: 15 additions & 0 deletions plugin-update-checker/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[*]
charset=utf-8
end_of_line=lf
insert_final_newline=false
indent_style=tab
tab_width=4

[{phpunit.xml.dist,*.jhm,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.tld,*.fxml,*.jrxml,*.xml,*.jnlp,*.wsdl}]
indent_style=space
indent_size=4

[*.svg]
indent_style=space
indent_size=4

40 changes: 40 additions & 0 deletions plugin-update-checker/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Created by .ignore support plugin (hsz.mobi)
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# The entire IDEA/PhpStorm directory
.idea/

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
6 changes: 6 additions & 0 deletions plugin-update-checker/Puc/v4/Factory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
if ( !class_exists('Puc_v4_Factory', false) ):

class Puc_v4_Factory extends Puc_v4p10_Factory { }

endif;
63 changes: 63 additions & 0 deletions plugin-update-checker/Puc/v4p10/Autoloader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php

if ( !class_exists('Puc_v4p10_Autoloader', false) ):

class Puc_v4p10_Autoloader {
private $prefix = '';
private $rootDir = '';
private $libraryDir = '';

private $staticMap;

public function __construct() {
$this->rootDir = dirname(__FILE__) . '/';
$nameParts = explode('_', __CLASS__, 3);
$this->prefix = $nameParts[0] . '_' . $nameParts[1] . '_';

$this->libraryDir = $this->rootDir . '../..';
if ( !self::isPhar() ) {
$this->libraryDir = realpath($this->libraryDir);
}
$this->libraryDir = $this->libraryDir . '/';

$this->staticMap = array(
'PucReadmeParser' => 'vendor/PucReadmeParser.php',
'Parsedown' => 'vendor/Parsedown.php',
'Puc_v4_Factory' => 'Puc/v4/Factory.php',
);

spl_autoload_register(array($this, 'autoload'));
}

/**
* Determine if this file is running as part of a Phar archive.
*
* @return bool
*/
private static function isPhar() {
//Check if the current file path starts with "phar://".
static $pharProtocol = 'phar://';
return (substr(__FILE__, 0, strlen($pharProtocol)) === $pharProtocol);
}

public function autoload($className) {
if ( isset($this->staticMap[$className]) && file_exists($this->libraryDir . $this->staticMap[$className]) ) {
/** @noinspection PhpIncludeInspection */
include ($this->libraryDir . $this->staticMap[$className]);
return;
}

if (strpos($className, $this->prefix) === 0) {
$path = substr($className, strlen($this->prefix));
$path = str_replace('_', '/', $path);
$path = $this->rootDir . $path . '.php';

if (file_exists($path)) {
/** @noinspection PhpIncludeInspection */
include $path;
}
}
}
}

endif;
186 changes: 186 additions & 0 deletions plugin-update-checker/Puc/v4p10/DebugBar/Extension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
<?php
if ( !class_exists('Puc_v4p10_DebugBar_Extension', false) ):

class Puc_v4p10_DebugBar_Extension {
const RESPONSE_BODY_LENGTH_LIMIT = 4000;

/** @var Puc_v4p10_UpdateChecker */
protected $updateChecker;
protected $panelClass = 'Puc_v4p10_DebugBar_Panel';

public function __construct($updateChecker, $panelClass = null) {
$this->updateChecker = $updateChecker;
if ( isset($panelClass) ) {
$this->panelClass = $panelClass;
}

add_filter('debug_bar_panels', array($this, 'addDebugBarPanel'));
add_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies'));

add_action('wp_ajax_puc_v4_debug_check_now', array($this, 'ajaxCheckNow'));
}

/**
* Register the PUC Debug Bar panel.
*
* @param array $panels
* @return array
*/
public function addDebugBarPanel($panels) {
if ( $this->updateChecker->userCanInstallUpdates() ) {
$panels[] = new $this->panelClass($this->updateChecker);
}
return $panels;
}

/**
* Enqueue our Debug Bar scripts and styles.
*/
public function enqueuePanelDependencies() {
wp_enqueue_style(
'puc-debug-bar-style-v4',
$this->getLibraryUrl("/css/puc-debug-bar.css"),
array('debug-bar'),
'20171124'
);

wp_enqueue_script(
'puc-debug-bar-js-v4',
$this->getLibraryUrl("/js/debug-bar.js"),
array('jquery'),
'20170516'
);
}

/**
* Run an update check and output the result. Useful for making sure that
* the update checking process works as expected.
*/
public function ajaxCheckNow() {
if ( $_POST['uid'] !== $this->updateChecker->getUniqueName('uid') ) {
return;
}
$this->preAjaxRequest();
$update = $this->updateChecker->checkForUpdates();
if ( $update !== null ) {
echo "An update is available:";
echo '<pre>', htmlentities(print_r($update, true)), '</pre>';
} else {
echo 'No updates found.';
}

$errors = $this->updateChecker->getLastRequestApiErrors();
if ( !empty($errors) ) {
printf('<p>The update checker encountered %d API error%s.</p>', count($errors), (count($errors) > 1) ? 's' : '');

foreach (array_values($errors) as $num => $item) {
$wpError = $item['error'];
/** @var WP_Error $wpError */
printf('<h4>%d) %s</h4>', $num + 1, esc_html($wpError->get_error_message()));

echo '<dl>';
printf('<dt>Error code:</dt><dd><code>%s</code></dd>', esc_html($wpError->get_error_code()));

if ( isset($item['url']) ) {
printf('<dt>Requested URL:</dt><dd><code>%s</code></dd>', esc_html($item['url']));
}

if ( isset($item['httpResponse']) ) {
if ( is_wp_error($item['httpResponse']) ) {
$httpError = $item['httpResponse'];
/** @var WP_Error $httpError */
printf(
'<dt>WordPress HTTP API error:</dt><dd>%s (<code>%s</code>)</dd>',
esc_html($httpError->get_error_message()),
esc_html($httpError->get_error_code())
);
} else {
//Status code.
printf(
'<dt>HTTP status:</dt><dd><code>%d %s</code></dd>',
wp_remote_retrieve_response_code($item['httpResponse']),
wp_remote_retrieve_response_message($item['httpResponse'])
);

//Headers.
echo '<dt>Response headers:</dt><dd><pre>';
foreach (wp_remote_retrieve_headers($item['httpResponse']) as $name => $value) {
printf("%s: %s\n", esc_html($name), esc_html($value));
}
echo '</pre></dd>';

//Body.
$body = wp_remote_retrieve_body($item['httpResponse']);
if ( $body === '' ) {
$body = '(Empty response.)';
} else if ( strlen($body) > self::RESPONSE_BODY_LENGTH_LIMIT ) {
$length = strlen($body);
$body = substr($body, 0, self::RESPONSE_BODY_LENGTH_LIMIT)
. sprintf("\n(Long string truncated. Total length: %d bytes.)", $length);
}

printf('<dt>Response body:</dt><dd><pre>%s</pre></dd>', esc_html($body));
}
}
echo '<dl>';
}
}

exit;
}

/**
* Check access permissions and enable error display (for debugging).
*/
protected function preAjaxRequest() {
if ( !$this->updateChecker->userCanInstallUpdates() ) {
die('Access denied');
}
check_ajax_referer('puc-ajax');

error_reporting(E_ALL);
@ini_set('display_errors', 'On');
}

/**
* Remove hooks that were added by this extension.
*/
public function removeHooks() {
remove_filter('debug_bar_panels', array($this, 'addDebugBarPanel'));
remove_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies'));
remove_action('wp_ajax_puc_v4_debug_check_now', array($this, 'ajaxCheckNow'));
}

/**
* @param string $filePath
* @return string
*/
private function getLibraryUrl($filePath) {
$absolutePath = realpath(dirname(__FILE__) . '/../../../' . ltrim($filePath, '/'));

//Where is the library located inside the WordPress directory structure?
$absolutePath = Puc_v4p10_Factory::normalizePath($absolutePath);

$pluginDir = Puc_v4p10_Factory::normalizePath(WP_PLUGIN_DIR);
$muPluginDir = Puc_v4p10_Factory::normalizePath(WPMU_PLUGIN_DIR);
$themeDir = Puc_v4p10_Factory::normalizePath(get_theme_root());

if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) {
//It's part of a plugin.
return plugins_url(basename($absolutePath), $absolutePath);
} else if ( strpos($absolutePath, $themeDir) === 0 ) {
//It's part of a theme.
$relativePath = substr($absolutePath, strlen($themeDir) + 1);
$template = substr($relativePath, 0, strpos($relativePath, '/'));
$baseUrl = get_theme_root_uri($template);

if ( !empty($baseUrl) && $relativePath ) {
return $baseUrl . '/' . $relativePath;
}
}

return '';
}
}

endif;
Loading

0 comments on commit c46fbec

Please sign in to comment.