WordPress.org

Ready to get started?Download WordPress

Forums

[Plugin: Share On Facebook] Share on Facebook plugin code (2 posts)

  1. miken32
    Member
    Posted 5 years ago #

    I had to rework this code so it would be valid XHTML, and in the process made the PHP a lot nicer as well. Let's see how this handles a big block of code:

    <?php
    /*
    Plugin Name: Share On Facebook
    Version: 1.1
    Plugin URI: http://nothing.golddave.com/?page_id=680
    Description: Adds a footer link to add the current post or page to as a Facebook link.
    Author: David Goldstein
    Author URI: http://nothing.golddave.com/
    */
    
    /*
    Change Log
    
    1.1
      * Fixed bug in template tag implementation.
    
    1.0
      * First public release.
    */ 
    
    function share_on_facebook($data = ''){
    	global $post;
    	$current_options = get_option('share_on_facebook_options');
    	$url = 'http://www.facebook.com/share.php?u=' . rawurlencode(get_permalink($post->ID)) . '&amp;t=' . rawurlencode(get_post($post->ID)->post_title);
    	$basestyle = "font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;";
    	switch ($current_options['link_type']) {
    		case "link":
    			$data .= <<< HTML
    <a href="$url" id="facebook_share_link">Share on Facebook</a>
    HTML;
    			break;
    		case "icon":
    			$data .= <<< HTML
    <a href="$url" id="facebook_share_icon" style="$basestyle"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
    HTML;
    			break;
    		case "both":
    			$data .= <<< HTML
    <a href="$url" id="facebook_share_both" style="$basestyle padding:2px 0 0 20px; height:16px; background:url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top left;">Share on Facebook</a>
    HTML;
    			break;
    		case "button":
    			$data .= <<< HTML
    <a href="$url" id="facebook_share_button" style="$basestyle display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
    HTML;
    			break;
    		}
    	$data .= <<< HTML
    
    <script type="text/javascript">
    var button = document.getElementById('facebook_share_link') || document.getElementById('facebook_share_icon') || document.getElementById('facebook_share_both') || document.getElementById('facebook_share_button');
    if (button) {
    	button.onclick = function(e) {
    		var url = this.href.replace(/share\.php/, 'sharer.php');
    		window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
    		return false;
    	}
    
    	if (button.id === 'facebook_share_button') {
    		button.onmouseover = function(){
    			this.style.color='#fff';
    			this.style.borderColor = '#295582';
    			this.style.backgroundColor = '#3b5998';
    		}
    		button.onmouseout = function(){
    			this.style.color = '#3b5998';
    			this.style.borderColor = '#d8dfea';
    			this.style.backgroundColor = '#fff';
    		}
    	}
    }
    </script>
    
    HTML;
    		return $data;
    }
    
    function activate_share_on_facebook(){
    	global $post;
    	$current_options = get_option('share_on_facebook_options');
    	$insertiontype = $current_options['insertion_type'];
    	if ($insertiontype !== 'template'){
    		add_filter('the_content', 'share_on_facebook', 10);
    		add_filter('the_excerpt', 'share_on_facebook', 10);
    	}
    }
    
    activate_share_on_facebook();
    
    function shareonfacebook(){
    	global $post;
    	$current_options = get_option('share_on_facebook_options');
    	$insertiontype = $current_options['insertion_type'];
    	if ($insertiontype !== 'auto'){
    		echo share_on_facebook();
    	}
    }
    
    // Create the options page
    function share_on_facebook_options_page() {
    	$current_options = get_option('share_on_facebook_options');
    	$link = $current_options["link_type"];
    	$insert = $current_options["insertion_type"];
    	if ($_POST['action']){ ?>
    		<div id="message" class="updated fade"><p><strong>Options saved.</strong></p></div>
    	<?php } ?>
    	<div class="wrap" id="share-on-facebook-options">
    		<h2>Share on Facebook Options</h2>
    
    		<form method="post" action="<?php echo $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']; ?>">
    			<fieldset>
    				<legend>Options:</legend>
    				<input type="hidden" name="action" value="save_share_on_facebook_options" />
    				<table width="100%" cellspacing="2" cellpadding="5" class="editform">
    					<tr>
    						<th valign="top" scope="row"><label for="link_type">Link Type:</label></th>
    						<td><select name="link_type">
    						<option value="link" <?php if ($link === "link") echo 'selected="selected"';?>>Link Only</option>
    						<option value="icon" <?php if ($link === "icon") echo 'selected="selected"';?>>Icon Only</option>
    						<option value ="both" <?php if ($link === "both") echo 'selected="selected"';?>>Link and Icon</option>
    						<option value ="button" <?php if ($link === "button") echo 'selected="selected"';?>>Share Button</option>
    						</select></td>
    					</tr>
    					<tr>
    						<th valign="top" scope="row"><label for="insertion_type">Insertion Type:</label></th>
    						<td><select name="insertion_type">
    						<option value ="auto" <?php if ($insert === "auto") echo 'selected="selected"';?>>Auto</option>
    						<option value ="template"<?php if ($insert === "template") echo 'selected="selected"';?>>Template</option>
    						</select></td>
    					</tr>
    				</table>
    			</fieldset>
    			<p class="submit">
    				<input type="submit" name="Submit" value="Update Options &raquo;" />
    			</p>
    		</form>
    	</div>
    <?php
    }
    
    function share_on_facebook_add_options_page() {
    	// Add a new menu under Options:
    	add_options_page('Share on Facebook', 'Share on Facebook', 10, __FILE__, 'share_on_facebook_options_page');
    }
    
    function share_on_facebook_save_options() {
    	// create array
    	$share_on_facebook_options["link_type"] = $_POST["link_type"];
    	$share_on_facebook_options["insertion_type"] = $_POST["insertion_type"];
    
    	update_option('share_on_facebook_options', $share_on_facebook_options);
    	$options_saved = true;
    }
    
    add_action('admin_menu', 'share_on_facebook_add_options_page');
    
    if (!get_option('share_on_facebook_options')){
    	// create default options
    	$share_on_facebook_options["link_type"] = 'link';
    	$share_on_facebook_options["insertion_type"] = 'auto';
    
    	update_option('share_on_facebook_options', $share_on_facebook_options);
    }
    
    if ($_POST['action'] == 'save_share_on_facebook_options'){
    	share_on_facebook_save_options();
    }
    ?>

    http://wordpress.org/extend/plugins/share-on-facebook/

  2. miken32
    Member
    Posted 5 years ago #

    Essentially I've taken the crap HTML that Facebook provides and redone it properly; I also split out some of the stuff so that it's not being repeated 6 times. In fact the entire shareonfacebook() function was just repeating what share_on_facebook() did so I had the former call the latter instead of repeating all the code.
    Since WP mangles CDATA sections I couldn't put the URL into the JavaScript, you can see it just pulls the URL from the HTML and changes it to what it needs.
    I also made changes to the styles for the "button" since the original Facebook code didn't take into account existing colors, fonts, line heights, etc.
    I'll email a copy to the developer and we'll see what shows up in the next version of this plugin.

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags

No tags yet.