Some time back, I tried to make Rob Miller’s Now-Reading plugin display who’s reading each book on the individual pages. But the PHP code I posted at that time didn’t work like I thought it did, my interests changed and I moved onto other things. Today I had a visitor stop by asking about my broken tweak. So I took another look at the code and I believe I’ve got something that works this time.

// Now-Reading Plugin: Get the display name of the book's reader
function mlm_book_reader( $echo=true ) {
	global $book;

	$user_info = get_userdata($book->reader);
	
	if ( $echo )
		echo $user_info->display_name;
	return $user_info->display_name;
		
}

This grabs “Display name publicly as” from the user’s profile and displays it on the page. I put the function in the functions.php file of the theme I’m using (so any automatic upgrades of the plugin won’t erase it). Then I put < ?php mlm_book_reader() ?> into my custom single.php template and viola!

Note: this has only been tested on WordPress 2.6.2 with Now-Reading 4.4.3.

Ever since upgrading to the latest version of Rob Miller’s Now-Reading plugin, I noticed my single book pages were working but not displaying everything correctly. Specifically books I’d marked having been borrowed from my local library were being displayed as:

  • I borrowed this book fromlibrary

When they should simply have a line reading “I borrowed this book from my local library”. I had spent much
time fiddling with my templates trying to figure out how the upgrade broke them and today I figured it out. The truth is my template was just fine. The problem is the newer version of Now-Reading was applying a new filter to book-meta1. That filter is wpautop and it was wrapping my variable in <p> … </p> tags. Those tags screwed up the display and made my variable checks fail. To correct the problem, I went into now-reading/default-filters.php and commented out add_filter('book_meta_val', 'wpautop');. Now my single book pages look like they’re supposed to again. Yeah!

1 This is a custom field available in the back-end of the plugin and it is where I store the information telling my template if I borrowed the book and from whom I borrowed it.

A recent visitor to the CB pointed out a problem on some of my older entries.  It’s something I was expecting to have to fix but got sidetracked and never got around to.  Basically with the upgrade to WordPress 2.5.x, there are a couple of new settings in the wp_config.php file which have WordPress to use UTF-8 character encoding to better handle non-English langauges/characters.  However as older versions of WordPress automatically converted standard quotes/astrophes to their fancy/curly versions and those fancy versions are dependent upon which character encoding scheme they are written in.  Since I wasn’t sure how many entries I had that are affected by this and I wanted to leave the UTF-8 encoding enabled; I ran this SQL query to fix at least some of the problems: UPDATE wp_posts SET post_content = REPLACE(post_content,''','\'') WHERE post_content LIKE '%'%';

There are probably other characters I need to fix yet, so if you happen to see something like hieroglyphics on this site or other gibberish, let me know what entries you found it on so I can fix them.  And my thanks to Lynsey for prompting me to fix these entries.

I use Rob Miller’s excellent Now-Reading plugin to track all the books I’ve read and am reading here at CoffeeBear. After my recent site upgrade I decided to tweak the single book template for my library. I noticed that the latest version of Now-Reading allows you to note who read a given book on multiuser sites. As my wife occassionally posts here I wanted my reads to be marked as mine, but the default output of the function Rob implemented only displays the user’s login name. Seriously Rob, what were you thinking? If you did not want to give end users the option to select how they want their name to print out why wouldn’t you go with display_name?

I looked at the code Rob used and with a little help from the Practical PHP I hacked together my own function based on Rob’s. By default print_reader2 works the exactly the same as print_reader1 but by feeding it an additional parameter, you get your choice of what to use to display as reader’s name:

  • 0: Prints out the user_login aka the username you use to log into WordPress.
  • 1: Prints user_nicename, appears to simply be an all lower case version of the user’s nickname2.
  • 2: Prints display_name, from the “Display name publicly as” field in your WordPress profile.
  • 3: Prints first_name, from the “First name” field in your WordPress profile.
  • 4: Prints nickname, from the “Nickname” field in your WordPress profile.
function print_reader2( $echo=true, $reader_id = 0, $display = 0 ) {
	global $userdata;

	$username='';

	switch($display) {
		case "1": if (!$reader_id) { get_currentuserinfo(); $username = $userdata->user_nicename; } else { $user_info = get_userdata($reader_id); $username = $user_info->user_nicename; }; break;
		case "2": if (!$reader_id) { get_currentuserinfo(); $username = $userdata->display_name; } else { $user_info = get_userdata($reader_id); $username = $user_info->display_name; }; break;
		case "3": if (!$reader_id) { get_currentuserinfo(); $username = $userdata->first_name; } else { $user_info = get_userdata($reader_id); $username = $user_info->first_name; }; break;
		case "4": if (!$reader_id) { get_currentuserinfo(); $username = $userdata->nickname; } else { $user_info = get_userdata($reader_id); $username = $user_info->nickname; }; break;
		default: if (!$reader_id) { get_currentuserinfo(); $username = $userdata->user_login; } else { $user_info = get_userdata($reader_id); $username = $user_info->user_login;};
   }
	if ($echo)
		echo $username;
	return $username;
}

Side note: WordPress 2.5.1 got released today and it includes a security fix, be sure to update your blogs!

1 At least, I think it does. I’m not a programmer and I only know enough PHP to be dangerous to myself.
2 The WordPress Codex does not appear to define what this field is used for or why it exists, so that’s just my guess.

The library issues I was having appear to be resolved. When I upgraded WordPress, I simply overwrote the existing files (‘cuz I’m lazy) and then I went into my permalink settings and hit the update button (without actually making any changes). This is supposed to be enough to get the plugin I use for the library to reset the permalinks but that didn’t happen this time. I ended up deleting all of WordPress’ core file, re-uploading them, changing my webhost’s configuration to support PHP5, upgrading to the very latest copy of the plugin and re-saving my permalink settings before I was able to get the library working correctly again.

Other Changes

I also noticed when I upgraded/changed themes last time I forgot to add back in the magic codes to have ads from Google AdSense appear in a couple of places on my site. Those are ads are now back, though I do use another plugin to hide them from regular readers and on current content. Basically, if you are just stopping by (e.g. found me via a search engine) you will see ads. If you’ve been here a few times in the past couple of weeks, then you most likely won’t. Mind you these ads aren’t making me rich1, but they do help offset the costs of my online addiction webhosting.

New Theme

Yeah, I wasn’t a big fan of the previous theme I was using but it was good enough for a short term solution. The current theme2 is better but still needs more tweaks to make it mine. Things are likely to be in a state of flux until further notice around here. Things I still need to do:

  • Add one or more random photos to the sidebar or possibly the footer.
  • Work up a better header image.
  • Style the footer more to my liking.
  • Fix the sidebar formatting issues in IE3

1 I haven’t even had enough clicks on the silly Google AdSense ads to get paid yet
2 In case you happen to be curious, it’s a slightly tweaked version of the Shades of Gray style for the Sandbox theme.
3 Odds of this happening are tiny. I only use IE at work and then only rarely. If the slight offsets in the sidebar offends your design sensibilites, get Firefox!