SS-Downloads WordPress Plugin

July 21, 2010

Testing our new SS-Downloads plugin. It basically will require an email address before serving a specified file. Right now, I’m using a zip of the pre-release plugin for testing. I will update this to point to the latest version once it’s ready.

Should see a form or download link here.

Enter your email address to download ss-downloads.zip

Future plans:

  • Option to require account creation (instead of just an email address). Done
  • Option to email file as attachment instead of showing a link. Done
  • Icons for files in template.

FAQ

Q: My downloads are incomplete, corrupt, or otherwise not downloading… especially large files.
A: This may be caused by a low memory issue or some other issue with serving the file through the getfile.php script. You can configure the plugin to simply redirect to the chosen file rather than serving it through the script by editing /ss-downloads/includes/setup.php and setting the GETFILE_REDIRECT value to true. The file will have to be served in a public web folder, and 733t hackers will be able to see the actual URL of the file.
Note: I’ve changed the GETFILE_REDIRECT to default to true. But if you have the inverse problem (the download is working, but you want to make it more secure by avoiding the redirect — which savvy users might be able to watch to get the URL of the file) you can set that value to false.
Edit:
Bob at 2bretired.com has a good writeup of how to clear out the download stats for your files if you want to do that sort of thing.

Make One Category Display Full Posts in Thesis Theme

July 19, 2010

Update: Seems like this doesn’t work with the latest version of thesis. If you get it working, let me know.

Got a request from a client to have a specific category page on their WordPress blog running the Thesis theme show full posts (vs. excerpts) for just one category. So I’m going to figure it out and write the steps here for the benefit of humanity.

First, to be clear, I’m not talking about changing ALL CATEGORY PAGES from excerpts to full posts. That can be done easily through the Thesis Display Options. You would change the “Posts” display options to “display full content” and the “Archives” display options to “same as home page”.

What I want to do is show excerpts on every category page except one. You do this by settings up a custom category theme, and Thesis has its own way to do that. A custom category theme wasn’t optimal for this install, so I need to do something different. It’s good to have different ways of doing things. Maybe my method below works for you too.

Here’s what we’re going to do.

  1. Use the “thesis_hook_before_post_box” hook to check the current category and if it is the “Quick Takes” category, change the $thesis['display']['archives']['style'] value to “content”.
  2. Use the “thesis_hook_after_post_box” hook to change the $thesis['display']['archives']['style'] value back to what it was before we tweaked it.

Sounds complicated, but it’s only a few lines to add to the /custom/custom_functions.php file in your Thesis theme folder.

function quicktakes_fullpost_setup()
{
	$target_category = "Quick Takes";
 
	//saving the global archives display setting so we can revert later
	global $thesis, $saved_thesis_display_archives_style;
	$saved_thesis_display_archives_style = $thesis['display']['archives']['style'];
 
	//checking the category, if it's the target category, then set the display to full post
	$current_category = single_cat_title("", false);
	if($current_category == $target_category)
		$thesis['display']['archives']['style'] = "content";
 
}
function quicktakes_fullpost_cleanup()
{
	//we're setting the display archives style back to what it was before we tweaked it
	global $thesis, $saved_thesis_display_archives_style;
	$thesis['display']['archives']['style'] = $saved_thesis_display_archives_style;
}
add_action('thesis_hook_before_post_box', 'quicktakes_fullpost_setup');
add_action('thesis_hook_after_post_box', 'quicktakes_fullpost_cleanup');

Be sure to change the $target_category variable to the title of the category you want to change.

If you want to do the inverse of this, which would be to show the excerpt on just one category page and update show the full post on all others, you would:

  1. Change the Thesis Display Options for posts to “display full post content”
  2. Change the Thesis Display Options for archives to “same as your homepage”
  3. Then adjust line 12 in the code above to set the style to “excerpts” instead of “content.

I hope this helps. Let me know if you have any questions about this or similar customizations for Thesis.

WordPress get_the_content_after_more() Function

July 6, 2010

In WordPress, if you want to get just the excerpt of a post, you can use the built-in functions the_excerpt or get_the_excerpt. And if you want all of the content, you can of course use the the_content or get_the_content functions. But what if you want to get everything BUT the excerpt?

The Code

Here is a function that will do that: get_the_content_after_more()

function get_the_content_after_more()
{
	$content = get_the_content();
	$moretag = preg_match("/\<span id="\&quot;more-[0-9]*\&quot;\">\&lt;\/span\&gt;/", $content, $matches);
	if($moretag)
	{
		$morespan = $matches[0];
		$morespan_pos = strpos($content, $morespan);
		$newcontent = substr($content, $morespan_pos + strlen($morespan), strlen($content) - strlen($morespan));
		$newcontent = apply_filters('the_content', $newcontent);
		return $newcontent;
	}
	else
		return "";
}

How to Use This

Notice that this is a “get_” version of the function. So you will get to echo the results or save them to a variable for future use. Just plop an echo get_the_content_after_more() into your LOOP and you’re good to go.

How it Works

The function works by getting the post content through “get_the_content” (and so will give you the content for the current post in your loop) and looking (preg_match) for the span tag that WordPress puts at the more break. (If older versions of WordPress don’t add this tag, this function won’t work. But this works in 2.9-3.0 at least.)

If a more tag is found, I create a variable $newcontent holding everything after the more tag. Then I run it through apply_filters to all of your plugins/etc that work on the_content will work on this.

If a post doesn’t have an excerpt (no excerpt or more tag in the post), the function returns an empty string.

The function could easily be called get_the_inverse_excerpt or get_the_content_after_excerpt or get_the_content_minus_excerpt. Let me know if you have a better idea for this… or tell me what you searched for to figure this out.

Why Would I Use This?

Kim was updating our portfolio page, which is really a list of WordPress posts. She wanted to style the “excerpt” differently from the rest of the content. Notice how the top section (“WineLog is…”) is in a gradient box on the WineLog portfolio item… and then the rest is styled as written in the post content. We used code like this:

<div class="excerpt">
<?php    
    the_excerpt();
?>
</div>
<?php     	
    echo get_the_content_after_more();			
?>

When we decided to do this, I first checked if WordPress was adding some tag around the excerpt that we could piggy back on. Nope. All that is added is a span like at the point where the more break is. Then I looked for a buit-in function or some parameter of the_content that could be used to do this. No luck. (Let me know if there is a built-in way to do this.)

If I Were Updating WordPress…

… and it’s open source. So maybe I will. One could add a parameter to the_content/get_the_content functions to exclude the excerpt. The code would be largely the same, though they could look for the more tag itself since they won’t have that stripped out yet. That feels clunky to me. Let me know if you have better ideas.