Scriptless Social Sharing Buttons
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

README.md

Scriptless Social Sharing

This plugin adds super simple social sharing buttons to the end of posts.

Scriptless Social Sharing is a wee plugin to add buttons to your posts/pages, to make it easier for your readers to share your content on social networks.

The sharing links use the most basic methods provided by each network. There is no JavaScript, nothing fancy included in this plugin, so if you want fancy, this is not the plugin you're looking for. It just builds a set of links.

The sharing buttons are accessible--even if you choose the "Icons Only" button styles, the network names are still part of the buttons, just hidden in an accessible-ready manner.

There is a small settings page, so you can make decisions about which content types should have sharing buttons, what buttons should be added, and whether or not to use the plugin's styles. Beyond that, developers may like to make use of filters throughout the plugin.

Installation

Manual

  1. Download the latest tagged archive (choose the "zip" option).
  2. Unzip the archive.
  3. Copy the folder to your /wp-content/plugins/ directory.
  4. Go to the Plugins screen and click Activate.

Check out the Codex for more information about installing plugins manually.

Git

Using git, browse to your /wp-content/plugins/ directory and clone this repository:

git clone git@github.com:robincornett/scriptless-social-sharing.git

Then go to your Plugins screen and click Activate.

Screenshots

Screenshot of the Scriptless Social Sharing Settings Page
Screenshot of the Scriptless Social Sharing Settings Page.

Screenshot of the Scriptless Social Sharing Buttons on a Post
Screenshot of the Scriptless Social Sharing Buttons on a Post.

Frequently Asked Questions

What if I want to move where the buttons are output?

Version 2.0.0 changes everything here. The plugin now offers options for adding sharing buttons to each and every type of content on your site. Buttons can be added in multiple places, or easily add support so you can add buttons anywhere you like. The default button locations are:

  • Before Content: at the beginning of the post/entry, within the post/entry content.
  • After Content: at the end of the post/entry, within the post/entry content.
  • Manual: select this if you are adding buttons with your own code (this ensures that the necessary styles are loaded, and some other housekeeping).

To take advantage of the new location options, you must visit the plugin settings page and update your settings.

Note: if you have code that removes the original buttons output and adds it back by hand, make sure that you select Manual for the location for each affected content type.

The best way to change the button output location is by using a filter. This example changes the locations from using the_content filter (with hook set to false) to using action hooks instead.

add_filter( 'scriptlesssocialsharing_locations', 'prefix_change_sss_locations' );
function prefix_change_sss_locations( $locations ) {
	$locations['before'] = array(
		'hook'     => 'genesis_before_entry',
		'filter'   => false,
		'priority' => 8,
	);
	$locations['after'] = array(
		'hook'     => 'loop_end',
		'filter'   => false,
		'priority' => 8,
	);

	return $locations;
}

If you use the Genesis Framework, you can tell the plugin to prefer Genesis specific action hooks with this very simple filter:

add_filter( 'scriptlesssocialsharing_prefer_genesis_hooks', '__return_true' );

What about a shortcode?

As of version 2.0.0, you can add sharing buttons directly to your content with a shortcode. You can tweak the output, too. For example, to add the buttons to your content, exactly as you have them set up in your settings, just use this shortcode:

[scriptless]

If you want to remove the heading, try it this way (or customize the heading by adding text):

[scriptless heading=""]

Want to only show certain buttons in the shortcode? Add them as a shortcode attribute (separate with commas, no spaces). This will show just the email and facebook buttons:

[scriptless buttons="email,facebook"]

Can I add sharing buttons to posts on archive pages?

Yes. First, you have to tell the plugin that it can, in fact, run, even on the relevant archive page:

add_filter( 'scriptlesssocialsharing_can_do_buttons', 'prefix_add_buttons_archives' );
function prefix_add_buttons_archives( $cando ) {
	if ( is_home() || is_tax() || is_category() ) {
		$cando = true;
	}
	return $cando;
}

Then you can add the buttons to the individual posts:

add_action( 'genesis_entry_content', 'prefix_scriptlesssocialsharing_buttons_entry_content', 25 );
function prefix_scriptlesssocialsharing_buttons_entry_content() {
	if ( ! function_exists( 'scriptlesssocialsharing_do_buttons' ) ) {
		return;
	}
	$is_disabled = get_post_meta( get_the_ID(), '_scriptlesssocialsharing_disable', true ) ? true : '';
	if ( ! $is_disabled && ! is_singular() ) {
		echo wp_kses_post( scriptlesssocialsharing_do_buttons() );
	}
}

Some posts are missing the Pinterest button. Why is that?

Yes, this is intentional. Pinterest really really really wants your posts to have an image. The Pinterest button breaks if there isn't an image. The plugin looks in three places to find one: 1) the custom Pinterest image; 2) the post featured image; and 3) if there is no featured image set, it picks the first image uploaded to that specific post. At this point, if there is still no image, rather than putting up a button which won't work, the plugin won't output a Pinterest button at all on that particular post.

What is this "Custom Pinterest Image"?

As of version 1.5.0, you can add an image for the plugin to use specifically for Pinterest, instead of the post's featured image. This image will be added to the Pinterest sharing button as well as hidden in your content, so that the Pinterest bookmarklet will be able to "see" the image.

How can I change the order of the sharing buttons?

You can customize the order of the sharing buttons with a filter. Here's an example which places Reddit as the first button, and email as the last:

add_filter( 'scriptlesssocialsharing_networks', 'prefix_sort_networks_custom' );
function prefix_sort_networks_custom( $networks ) {
	$networks['email']['order']     = 7;
	$networks['facebook']['order']  = 1;
	$networks['google']['order']    = 2;
	$networks['linkedin']['order']  = 4;
	$networks['reddit']['order']    = 0;
	$networks['twitter']['order']   = 6;
	$networks['pinterest']['order'] = 5;

	uasort( $networks, 'prefix_set_scriptless_sort_order' );

	return $networks;
}

/**
 * Custom comparison function to sort the networks.
 * @param $a
 * @param $b
 *
 * @return bool
 */
function prefix_set_scriptless_sort_order( $a, $b ) {
	return $a['order'] > $b['order'];
}

You can set any order you like. 0 is the first number.

Changelog

2.2.2

  • changed: Google+ is now off for new users and will be removed in a future version
  • changed: order of Pinterest button parameters to maybe reduce conflicts with lightbox plugins (props @pnwwebworks)
  • fixed: overly aggressive sanitization of the custom Pinterest description which had issues with special characters (props @pnwwebworks)

2.2.1

  • fixed: error on settings validation

2.2.0

  • added: custom Pinterest description per post
  • added: default email content setting
  • changed: code reorganization
  • fixed: email button should not open a new tab (props @salcode)
  • fixed: initial Gutenberg compatibility
  • fixed: end of content sharing buttons longer show after a shortcode if disabled

2.1.1

  • changed: CSS autoprefixing; buttons are now hidden on print

2.1.0

  • added: filter on the sharing link markup
  • added: tabnapping fix on links
  • fixed: button attributes on archives
  • fixed: title encoding when special characters are present

2.0.1

  • fixed: possible division by zero if Pinterest is the only button and there is no image
  • fixed: special characters in post titles breaking Twitter share

2.0.0

  • added: new settings to manage buttons output by content type
  • added: a shortcode!
  • added: link to the settings page from the Plugins page
  • added: filter to manage button locations
  • improved: URL construction methods now allow you to do things like add your own custom query args (props Sal Ferrarello)
  • improved: if you've gone to the trouble of adding alt text to your featured images, thank you, and your Pinterest button will now use that (update from 1.5.2 applied to all featured images)

1.5.2

  • improved: custom Pinterest image alt text will be preferred over post title, if alt text is set
  • fixed: URL encoding for strings with spaces

1.5.1

  • updated: Font Awesome (4.7.0)

1.5.0

  • added: ability to set a custom Pinterest image
  • added: "related" parameter to Twitter URL (props Ben Meredith)
  • improved: filter methods for adding new buttons
  • fixed: disappearing post meta settings

1.4.0

  • added: option for button padding
  • added: option for table width (width of all buttons)
  • bugfix: errant + in some mail programs (props Anders Carlen)

1.3.0

  • added: option to only show icons on buttons, no text
  • added: Reddit sharing button
  • added: option to add sharing buttons to the beginning or end of content
  • updated: code cleanup for settings and output
  • bugfix: post type setting was not saved correctly--settings should be resaved

1.2.2

  • updated: Font Awesome 4.6.3
  • fixed: error when a post is embedded in another site (feature introduced in WP 4.4) due to other checks being bypassed

1.2.1

  • fixed: pinterest button is now protected from an overzealous pinit script

1.2.0

  • added: setting to disable buttons on an individual post basis
  • fixed: use repository language packs

1.1.0

  • added: filter to disable heading on output
  • added: filter for the post fallback image (because pinterest)
  • fixed: made CSS a bit more specific to avoid theme conflicts

1.0.2

  • Fix CSS for buttons

1.0.1

  • add a fallback image method
  • bugfix: don't add Pinterest button if there is no image

1.0.0

  • Added a settings page.

0.1.0

  • Initial release on Github