Digestible Digitshttp://college.wfu.edu/itg/robert-vidrine
A Blog by Robert VidrineMon, 02 Mar 2015 19:25:38 +0000en-UShourly1http://wordpress.org/?v=4.1.1Some WordPress Development Toolshttp://college.wfu.edu/itg/robert-vidrine/advanced/some-wordpress-development-tools/
http://college.wfu.edu/itg/robert-vidrine/advanced/some-wordpress-development-tools/#commentsMon, 02 Mar 2015 19:21:01 +0000http://college.wfu.edu/itg/robert-vidrine/?p=191I’ve been working on a new theme, WF College Two, with a focus on making it responsive. This has definitely been a challenge, though I’ve uncovered some new development tools (new to me anyway) that I think will help others get their development projects going.

Basic Tools

(Most of this stuff is going to be Windows-specific, but Mac versions of most of these are available.)

Text Editor – Notepad ++

This one is kind of a no-brainer. If you’re writing PHP or javascript, or even just HTML, this is really important. Of course, this can range from my choice of Notepad ++ which is really just a text editor with some cool add-ons, all the way to something NetBeans or Eclipse, which are full-fledged IDEs (Integrated Development Environments) which include a text editor plus a bunch of other stuff. I use Notepad++ because I could easily customize the visual look of it (my eyes like large text and high contrast), and it’s really simple to setup and use. If you’re working on huge projects with lots of moving parts, something like Eclipse or NetBeans might be a good choice. Notepad++ can handle these things alright, but is also appropriate for quick editing of any text documents you’ll never edit again.

(Notrepad++ is a Windows-only program, but there are several good text editors for Apple computers as well. Some good text editors even work on both platforms, but Notepad++ is a very easy to use, small footprint text editor that works very well.)

Local Development Environment – XAMPP

The XAMPP control panel makes it easy to start up an Apache webserver and MySQL database server on your own computer.

This is an incredibly easy to install, easy to use local web server with MySQL, PHP and other tools to handle most projecdt types. Basically, a real web server hosted on your local machine that you can start up at will to test your creations. It’s free, so download it from Apache Friends. (If you feel the need to use a different web server other than Apache, like nginx, you’ll need to search down one of the other similar projects that uses your desired web server. The ‘X’ in XAMPP stands for “Cross Platform”, though there are also Mac-specific and Windows-specific versions.)

Version Control Manager – SourceTree

SourceTree makes it easy to manage updates and track changes in your code.

Some purists may insist that learning command-line git commands is well worth the time, but I’m still using a visual tool. This tool, from Atlassian, the people who host Bitbucket.org, one of the free git repository sites out there. (It’s also where I host my code: https://bitbucket.org/rvidrine/ .) If you haven’t heard of “version control” or the currently most popular type of version control, “git”, it’s time to do some googling… After I setup my free repository at bitbucket.org, it was really easy to tell SourceTree which folder on my computer I’d be using for my current development project and start using it to easily send all of my changes to BitBucket. Luckily, there haven’t been many instances yet where I had to reverse a change I’d made before or other complex commands, but it has been useful not only as a backup of my code, but also to remind me how long I’ve been working on something, and get me into the habit of “semantic versioning”. (“Semantic Versioning” is basically just incrementing the version according to whether you made a backwards-compatible bug fix, backwards-compatible feature change, or a bigger change that moves the product past previous functionality. Wikipedia has a decent article about it.)

Development code updater – GitHub Updater

Github Updater makes it easy to keep your development install up to date with your git code repository on github.org or bitbucket.org.

This is a tool that operates somewhat outside of the paradigm of WordPress plugins, in that it supports people hosting their plugins on either github.org or bitbucket.org, instead of wordpress.org. I like the idea of having one centralized place for all themes, plugins and information about WordPress, and hosting your code on wordpress.org comes with its own advantages you can’t get elsewhere, but sometimes another solution may be called for. For instance, themes hosted on wordpress.org enjoy a certain amount of legitimacy just by being hosted there, and rightly so. Themes go through a fairly rigorous overview before being accepted for hosting there, and plugins, while not reviewed as stringently (there’s just too many of them), also get some useful attention they wouldn’t get elsewhere. However, if you’re still just developing your theme or plugin (or have a reason to restrict access to it), this might be a good option. This allows you to have one-click update lovin’ for your code hosted in a git repository on either github.org or bitbucket.org. This makes it much easier while you’re developing and testing to keep your test site updated, so you’re testing the latest version of your code.

NOTE: While Github Updater is very useful for keeping your online development site updated while you’re building your theme or plugin, it does not play well with XAMPP. (I think this is because XAMPP doesn’t include “curl” for scripting downloads, maybe?) Nonetheless, hopefully it will keep more people from “cowboy coding” (making changes to a live site before trying it anywhere else). Remember that WordPress is so great because people share their accomplishments. The point of Github Updater is not to help people keep their code private. There are distinct advantages to hosting your themes and plugins at wordpress.org, so please only use Github Updater while you’re getting your code ready.

Secure FTP Client – WinSCP

WinSCP has a familiar, clean interface, with the local files on the left and the remote on the right.

So, those of you who’ve been paying attention can see a distinct pattern in the tools I use: they are all Windows-based. This tool is no exception. While there are lots of FTP clients out there, this one is very simple to use, small file size, and is free and open source. If you’re a fan of WordPress (and why else would you be here?), you probably have at least a passing appreciation for shared code.

There’s not a lot to say about WinSCP, as it’s straightforward and just works. If you are frustrated by the small file size limit for uploading files in your cPanel instance, try WinSCP. It will let you upload and download files of arbitrary size, has a very familiar interface (local on the left, remote on the right), and even has a very simplistic editor built-in. (Keep that cowboy hat in the closet; no cowboy coding here! An acceptable way to quickly add that semicolon you forgot though…)

So get coding!

While this is not an exhaustive list, and there are other tools that you’ll probably discover you need, based on your specific project, these tools will make for a good foundation on which to build and share your code. Remember that the world turns a little more smoothly when we all share. Did something cool? Write about it, and put it out there for others to use!

Happy coding!

]]>http://college.wfu.edu/itg/robert-vidrine/advanced/some-wordpress-development-tools/feed/0WordCamp Raleigh Overviewhttp://college.wfu.edu/itg/robert-vidrine/advanced/wordcamp-raleigh-overview/
http://college.wfu.edu/itg/robert-vidrine/advanced/wordcamp-raleigh-overview/#commentsWed, 12 Nov 2014 02:59:43 +0000http://college.wfu.edu/itg/robert-vidrine/?p=184WordCamp Raleigh (Nov. 8th & 9th 2014) was a great success again this year. If you haven’t been to WordCamp Raleigh yet, you really should consider it next year. There are tons of smart, motivated WordPress experts giving presentations and attending the sessions. I’ve always enjoyed the presentations, and have always found other attendees that had useful experience and advice to share. Hopefully I will soon have some more detailed posts about the specific sessions I attended and found most useful, but for right now, I thought I’d share with everyone the high points t of my experience at WC Raleigh this year.

Tools

gulp.js – a javascript “task runner” that can be used to automate all sorts of stuff. Apparently, it’s very similar to grunt.js, but some believe has a number of improved features. It requires several other tools and environments to be installed in order to use it, like npm (Node Package Manager), bower (not sure what this one is…) and perhaps a few other dependencies. It did sound powerful, but I think there was other low-hanging fruit that will improve my development workflow that doesn’t have as many dependencies and learning curve…

uxpin.com – This one is probably a tool I’ll start fiddling with immediately. It’s a web-based way to mess around with design elements, so that one can create a rudimentary mockup of the general placement of different page elements, and see the results in a browser, where it can be tested for its “responsiveness”.

interactivestyletiles.com – another rapid design prototyping tool that is built from styletil.es, which is a special PSD that when opened in Photoshop will allow one to slide around different page elements to get an idea of the best method for laying out the desired page elements. The big advantage with this new project is that it takes the style tiles concept and moves it into a web-based server, making it easier to share, easier to recreate (no longer requires Photoshop!), and is more relevant, since the design mockup is viewed in the browser, so there isn’t a different context for the design environment and the eventual production environment.

patternlab.io – This is a site by Brad Frost that encourages one to think about the components of a layout in the smallest units first, paying attention how they combine to iteratively and progressively build a concept of a section, then page, then site. (I skipped several of the divisions in which the elements are designated, but hopefully this is a fair if oversimplified description.)

composer – A “dependency manager” which helps one keep track of and manage the various dependencies of a project, even to the point of various tools that may be required in the development process. This was my first experience with a dependency manager, but it did look like it could be quite useful, if I can properly wrap my head around it and fit it into my workflow. The presenter, Micah Wood, has a bunch of resources in his github repository at github.com/wpscholar. One big advantage of this tool (unexpected perhaps because it is a dependency manager) is that it itself has few dependencies, needing only PHP to be installed.
asplunk – A tool used at UNC to troubleshoot, monitor and measure various aspects of their two large multisites. Not only can they get statistics about who is coming to their site (by IP and other criteria), it can be used to gauge activity on each subsite in a multisite network, and tons of other stuff. Contains a very powerful engine for querying log files to get at the wealth of knowledge they can provide if contextualized in just the right way. They offer both paid and free versions, the free version limited to 500MB of log data per data. Very clearly displayed and extremely powerful.

CMB2 – This is a fork and extension of the plugin “Custom Metaboxes and Fields”, which has been rewritten and extended greatly. It’s in beta right now, but hoping to have a stable release soon, and is already available on the WordPress plugin repository. It is similar to Advanced Custom Fields plugin, but has some notable differences, including the ability to have repeatable fields in the free version. (ACF charges for this in a premium version.)

Roots – A starter theme which, according to Julien Melissas, a very active developer from Asheville and self-pronounced “Roots fan and evangelist”, this is a starter theme which will encourage the learning of several other useful developer tools and ultimately lead to a more powerful custom theme. It does sound like it diverges in some important ways from the way one might expect WordPress to normally function, as it does not lend itself to being a parent theme with children. Julien uses it to create custom themes for clients, where the site is a very unique set of functionality and design choices, versus a theme used on lots of sites.

Angular.js – Another javascript library which is claimed to have some serious advantages over others such as jquery, backbone and others. One of the most interesting potential advantages explained in the presentation by Will Haley is the concept of building “promises” in the code, which are basically points in the code where some specific input will be received and a calculation made on it perhaps, for which the code will not simply halt and wait for the data to be received and the calculation made before executing code that’s not needed to “fulfill the promise”. In other words, several points in the code can be marked as waiting for some interaction to happen before it will run, while other code can continue to run. Both a success and a failure result will normally be defined in the promise code, so the script will know what to do when the expected input is received, and the calculation or other interaction is evaluated.

People I got to talk to:

Clif Griffin, author of Simole LDAP Login. Since I and several other folks at WFU have used this plugin on a number of sites (not always with stellar success; there were some bugs a few versions back that have made many uncoomfortable upgrading for fear of new issues), I was eager to talk to him and find out where the development of this plugin is headed. It appears that he still does not have a decent test environment for this plugin, which is still a serious issue, but he did sound motivated still to work on it, and has been building some relationships with different users to get some good feedback on what’s working and what’s not. One of the biggest questions I had for him was regarding the multisite functionality of his plugin. In the past, when used on a multisite, his plugin required the settings for connecting to the local LDAP server to be repeated in each instance of the plugin in a multisite. Fortunately, he said that he has received lots of “pull requests” (git vernacular meaning that someone has submitted a suggested code change and wants him to get their suggested revision for evaluation in including it in the plugin), some relating to multisite specifically, and while these haven’t been merged into his plugin just yet, are available from his github repository for testing. If I find issues with the plugin, at least I know now that he is listening to feedback, and maybe able to resolve some issues if I can provide good feedack on what I’m seeing in an authentic environment.

William Earnhardt, works for ITS division at UNC, manages two multisites with combined 8,000 subsites. His presentation was really good, packed with information about their two massive multisites and the lessons they’ve learned. He also had several different recommendations for tools and processes to aid in assessing various aspects of a multisite network and properly administering this complex system. Definitely a presentation to watch for on wordcamp.tv…

Diana, (@thechiclife, thechiclife.com), a foodie, blogger, IT Consultant, and generally pleasant conversationalist from Charlotte who has been finding great success with SEO for WordPress (by Yoast). I’ve seen Diana at at least a couple of WordCamps now, and she always has something interesting to say about her recent experiences with WordPress. Although I think that entirely too many people look into SEO as a way to “game the system” and artificially gain search engine prominence, she pointed out that although much of the recommendations regularly given in order to improve one’s search engine ranking are best practices for many other reasons (and probably things everyone should already be doing anyway!), she found that plugins like “SEO for WordPress” by Yoast was very helpful in finding lots of those best practices that maybe could be better fulfilled, and guiding one in how to repair the issues. When I was spouting off at WC Raleigh about how lots of SEO approaches seem like “snake oil”, she brought some needed perspective that there is some important utility in several SEO products, as they do a good job checking on web site best practices which happen to be the cornerstone of strong, authentic search engine ranking.

Steve Mortiboy, one of the co-organizers of WC Raleigh, the head of Semper Fi Web Design (and a really nice guy for being so busy pulling off WC Raleigh), who confirmed that several people have noticed that WC Raleigh has been one of the best WordCamps around for several years.

Peter Baylies (honorable mention) – I didn’t actually get to see Peter at this WordCamp, but I’ve seen him in Asheville earlier this year, and Raleigh for the past two years. He’s a very friendly guy, a very skilled developer, and has been completely patient with my sometimes fairly “newb” questions, and the occasional corner I’ve coded myself into. He did a great presentation in Asheville on performance profiling methods (unfortunately much was over my head…), which I was able to recommend to several folks I met at WC Raleigh who were searching for a way to quantify their optimization efforts. (Though I missed his presentation in Asheville, while we chatted over our kim chee burritos from the “El Kim Chee” food truck after the first day of WC Asheville, he took out his phone, connected to his shared slide deck online, and gave me a personalized quick tour of his presentation! I also regularly see him doing his best to help every other perplexed amateur coder that wandered up. Peter does a great job of emodying the collaborative, community nature that WordPress so proudly strives for.)

Once upon a time, there was a sitcom on TV called “Laverne and Shirley”. During the intro to the show, we see the two women at work in a bottling plant. As Laverne watches the bottles go past, she removes one of her white gloves, puffs it out and puts it on top of one of the bottles moving past. Laverne waves to the puffy white hand cheerily rolling along the assembly line as the theme music rises and we get ready to see what madcap adventures the pair will get into this week.

Imagine that hooks are like lots of friendly hands reaching up from the “WordPress assembly line” where the assembly line is the parade of steps that WordPress goes through to create your site. Each of these hands reaching up from the assembly line is an indication that something is happening here that someone, someday may want to act upon.

Two Kinds of Hooks: Action Hooks and Filter Hooks

There are two kinds of hooks to cover the two ways in which one can interact with the stream of WordPress code: Filter Hooks and Action Hooks. The two kinds of hooks are very similar in the syntax used to interact with them, but they are designed for different types of interaction (depending on what spot in the stream of code they appear).

Action Hooks: Make Something Happen

Action hooks are placed in the stream of code in places where someone might want their custom code to be triggered to do something outside the stream when the hook comes along. In the Laverne and Shirley analogy, maybe every time the glove that indicates that Laverne and Shirley are getting off work for the day comes along, their supervisor wants to remind them to remember to clock out. This would be an action hook. The hook, when it comes along, triggers an action that’s outside of the rest of the stream of activity.

A WordPress example of this would be the activation hook for plugins. Every time a plugin is activated, WordPress marks that with the ‘activate_PLUGINNAME’ hook (where PLUGINNAME is the slug, or unique name of the plugin.) If the plugin is well-written, the developer probably told the plugin to make something else happen when the plugin is activated, like put a link to the plugin’s configuration page on the screen, initialize the place in the database where its data will be stored, or other similar stuff.

Filter Hooks: Change Something Before It Gets Used

Filter hooks are there to let someone’s custom code yank some data out of the stream, modify it (add to it, subtract from it or change it somehow) and then put it back into the stream to go on its merry way to do whatever it was going to do before. In our Laverne and Shirley analogy, if a glove comes along that indicates one of their new cherry sodas (they actually worked for a beer company, but stay with me…), perhaps Laverne is supposed to put a sticker on that bottle that says “Now with REAL CHERRY JUICE!” as it speeds past her. The bottle still continues on its merry way to the next stage where it will be boxed up, loaded onto a truck, etc., but along the way, Laverne has modified the content of that bottle’s label. Of course, anyone who has ever seen an “I Love Lucy” episode (gosh, I’m really dating myself here…) knows that it’s really hard to interrupt a moving assembly line. Not to worry. Computers are really fast, and if all is working well, a filter hook will not noticeably slow down the normal pace of the WordPress code.

A WordPress example of a filter hook would be the filter “the_content”. If one wanted to add to the end of each piece of content a copyright message, they could use this filter to grab the content after it was calculated (for whatever page was currently being viewed), add the copyright message to the end of it, then return the content with the copyright message back to the normal stream of WordPress code, so that the site can put it on the page wherever it was supposed to go.

Once More, In Plain English

So, in a nutshell: An Action Hook says to your site “whenever this point in the code comes around, go over there and do this special thing”; a Filter Hook says to your site “whenver this code comes around, grab the data being shuffled along at that point, change it in these special ways, then return it back to the stream.”

More Than a Lesson In Old TV Sitcoms?

Hopefully this will do more than let everyone know that I’m over 35 and watched a lot of TV as a kid. If you find this post useful, please feel free to link to it, copy stuff from it or tattoo it to your forearm so you’ll always have it handy. If you use more than a tiny bit of it, I’d like it if you could say that you got it from my site. If you’ve read through this and noticed that I made a tragic mistake, kindly email me at [vidrinmr at wfu dot edu] and I will appreciate the feedback!

Happy WordPressing!

]]>http://college.wfu.edu/itg/robert-vidrine/advanced/explaining-action-and-filter-hooks-with-laverne-and-shirley/feed/0Highlights from WordCamp Raleigh 2013http://college.wfu.edu/itg/robert-vidrine/advanced/highlights-from-wordcamp-raleigh-2013/
http://college.wfu.edu/itg/robert-vidrine/advanced/highlights-from-wordcamp-raleigh-2013/#commentsMon, 25 Nov 2013 20:13:46 +0000http://college.wfu.edu/itg/robert-vidrine/?p=171WordCamp Raleigh was, like most WordCamps, a very rewarding experience, and a great place for networking and picking the brains of others working with WordPress. I attended the Developer Track for almost every concurrent session, though there were a couple of times in which the Power User Track and even the Users Track looked really good. (For instance, I really wish I’d seen the Power Users Track presentation on integrating drag and drop layout tools into one’s site.)

I just got back from Raleigh, but here are some of my initial notes, reactions and thoughts on some of the presentations I saw. The title of each presentation links back to the WordCamp Raleigh site, where the authors are supposed to post a link to their presentation materials. In most cases, one can just go to slideshare.com and search for the presenter’s name to find their entire presentation, though some are on gthub.com.

I’ve used ACF on the Assessment of Student Learning site, to create a form on the back end for people to fill in all the desired information, so that each program’s report contains the required pieces, and to make sure that they are all formatted similarly. It’s a great plugin, and I was very glad to see what else I could do with it.

The first useful nugget I got from Julien’s presentation was that Eliot Condon, the author of this plugin, had decided that there was enough interest in this plugin (and the paid add-ons) that he had quit his full time job, to dedicate all of his time to Advanced Custom Fields and its add-ons. As time marches on, more and more plugins get abandoned, leaving me searching for something else that works the way the old plugin did. It was encouraging to hear that this plugin may have some extended, stable life to it (especially since I didn’t find anything else that approaches its functionality).

Julien presented a good overview of ACF and how to go about using it to supercharge post, page, or custom post type editing. However, already having used ACF quite a bit on one of my sites, I only picked up a few tips here and there.

I’ve seen a few presentations on wp-cli (WordPress command line interface) in the past, but still haven’t setup an environment to actually use it. It looks like a very powerful tool, and allows lots of options for scripting and automating site actions, but unfortunately, it requires access to the shell (AKA ‘command line’), which I don’t have on my production server. Still, it may be worth it to setup a Unix-like envvironment with shell access somewhere to use this. (One of the other presentations, about Unit Testing, relied on this and a few other components being installed in such an environment).

The best commands and functions I saw of wp-cli would actually lend themselves best to a testing/development environment anyway, including the ability to easily create a new WordPress installation, with the core files created and configured, the ability to, with one simple command, create a new plugin file, including the standard header section, ready to be filled with code. The command for removing all stock posts and other content was an interesting one, though I could only see this happening in a dev environment, and typically on a new site, there’s only going to be one page and one post…

Also interesting was the command-line import and export, database backup (presrenter wasn’t sure if this was a full database dump, or just a content export), and plugin installation. Aside from scripting backup or import, starting a new installation, and scripting the install of a basic set of plugins would be a nice feature. The database find and replace is also a nice feature.

One can even create their own commands for wp-cli, using the Cookbook (API) to build them. (Take a look at wp-cli.org for details.)

While it was presented as a way to manage production sites, I wouldn’t consider using most of the commands they described on a production site, but they could be perfect for a development environment. The exception might be the plugin update commands. It did a nice job of reporting the versions of all plugins and whether there was an update. Of course, if I’m going to update plugins, I’m always going to also look at the rendered site to make sure I didn’t break something, so even that portion may have limited usefulness to me.

I’ll just start off by saying that I’m not a big fan of sliders, not the animated transition image banners or the mini-hamburgers. One of my big reasons for going to this session (and some of the better tips I picked up) related to why not to use sliders and how they might actually be valuable. The way many sliders are done just doesn’t add useful functionality to a site, takes up screen real estate, and generally seem a waste of time to me. In this presentation, I learned some of the reasons that is sometimes the case, and how to avoid it.

Basic tips I learned:

Click-through rates for sliders are low

Don’t put “calls to action” in a slider (see above)

Use fancy transitions RARELY

Consider carefully the speed of transition

Make all elements of a slider about a common theme/goal.

So, it appears that maybe the reasons I haven’t liked sliders in the past could be mostly about how others have implemented them, and perhaps there could be a good way to implement them that would add real value to a site. While the presenter didn’t offer any source for this, or really even any metrics, the statement that click-through rates for sliders is low did not surprise me, and sounded like good ammunition against a request to include a slider on my site. Of course, the presenter was talking about sliders because they do use them a lot, and have found some useful ways to incorporate them.

The idea of making each element in a slider support a common theme or goal for the page made a lot of sense. If your call to action (“fill out this form to receive more information about the graduate program”) is preceded by a slideshow that has images and text that provide a stream of supporting reasons why the call to action should be honored, it really doesn’t matter if few people are actually going to click on the slider. While the transition speed shouldn’t outpace your visitors’ ability to read the content on the slide, if the “payoff” is in the content below the slider, which remains constant, as long as they can get enough of the text from a slide to support the call to action, it’s a successful tool. There may be instances in which a slider that contains lots of different messages could be useful, I often find that “busy” and scattered, and typically the transition speed is to short to fully read it, or even click it before it slides away, so I like this approach.

Another problem with sliders the presenter discussed (and offered a solution) was the fact that most sliders will load all of the content for every slide, before the page will finish loading. This means that all your visitors, those who care about the sliders, and those who don’t will be forced to wait until all the slider content is loaded before they can use the site at all. The presenter discussed something called “lazy loading”, which included the content for the first couple of slides in the original page building portion, but then saved loading the other elements until after the page load was complete (at which the visitor is reading content, looing for what they want and not waiting for content). I’d have to re-watch the presentation and pre over his code to see exactly how he did it, but it involved triggering the javascript that would load the full set of sliders later in the page load process.

In terms of tools, the presenter had many different tools he liked for different projects, including many paid plugins, a couple free ones, and several free javascript libraries, for including sliders in a theme or plugin. Since I haven’t tried them out and picked a favorite, and the presentation was full of software mentions, I’ll let people refer to the original presentation for software suggestions.

I missed this presentation, instead attending the presentation on WP-CLI, but heard that it was a really good one, and was one of the times I wished I could attend two sessions at once. Apparently, the talk was about a number of different tools that will add drag and drop layout tools to the backend, to the page or post editor, and the guy I talked to who saw it said that by far the most interesting out of the bunch was ‘Page Layout Builder’ in the WordPress.org plugin repository. It allows drag and drop selection of columns and other layout design elements.

The presentation is up on slideshare.com: http://www.slideshare.net/brettbum

This s one of the two sessions I saw on BuddyPress, and was a pretty good overview of what BuddyPress can do, as showcased in the NeiborBee site that Michael McNeill has helped program for the company in which he is a partner. It was all in all a very good overview, and highlighted some of the requirements that need to be met in order for BuddyPress to be happy.

Probably the most serious requirement of BuddyPress, which sounded like it was non-negotiable, was that the site must be installed at the domain root, because of the way that BuddyPress performs some functions. Nearly none of the sites around here are installed at the root of their domain, even if (as in most cases) that domain is actually a virtual domain mapping, and the site is not literally located at the public_html folder of the server.

As anyone who has heard of BuddyPress already knows, BuddyPress is a plugin for WordPress that creates a social network kind of structure for a site. It’s just a plugin, but has such a transformative effect on a site’s functionality, it almost seems like a different product (which it used to be in a way). The presenter answered an important question from the audience on this nuance, verifying that one could have a “regular” website with only a few pages using the BuddyPress functionality; while it incorporates a bunch of new features and functions, it doesn’t have to represent the whole of a site.

BuddyPress is a plugin, though in some ways, incorporates a set of plugins within it, representing different features of BuddyPress, like an activity stream (like a Facebook ‘wall’), private messaging between members, extended profile information, and other features. Although these components are not “plugins” in the sense that they must be maintained separately from one another, installed and removed separately, each of these features can be turned on and off without affecting the other features.

BuddyPress, since version 1.7, will cooperate with most any theme, instead of having to find a “BuddyPress-compatible theme”. Of course, BuddyPress comes pre-loaded with its own theme, which incorporates all the features well, and can be highly customized in a child theme if desired. (BuddyPress is in version 1.8.something now.)

Like other social networking products and sites, one can define who can see various features and posts, like limiting the entire activity feed to logged-in users, or even limiting the visibility of activity feed posts of a certain category to a specific group of site users. Of course, since this functionality and virtually all of the other functionality in BuddyPress is also present in many other social networking products like Facebook that already have a lot of users, a plethora of features, and marketing momentum that would be difficult to match, I had to ask why one would use BuddyPress instead of Facebook. The answer was basically “integration with your web site for a small niche group”. Essentially, since you control the entire social network, you have full control over the links and functionality contained within. One could setup the site in a way that encouraged users to point most link internally to articles posted on the same site, versus going elsewhere. Given that Facebook’s business model is built upon the singular goal of getting you to spend the most time possible on their site, irrespective of the quality of content or other goals, I could see how a site could focus on different goal and try to keep its users “on task” versus just “on site” (where the ads are sold).

This was an excellent talk, and full of code examples, but unfortunately, was so full of code and moved so quickly that I really didn’t have much to take notes on. I’m going to definitely look up the presentation online and pore over some of the techniques used. For those who haven’t used Gravity Forms, it’s an HTML form generator, but does much more than just the simple HTML form that you might want to hand code. There is the fact that it’s a visual design tool, the conditional logic tools that are easy to use, and the ability to tie the form to page or post submissions. Many people in the session said that they used GF specifically to enable guest posts to their blog. In addition to all of the basic features involved in using the graphical interface to build a form, GF also offers a lot of possibilities for programmatically changing the way that it works, from the various CSS selectors that can be used to style various portions, to hooks and filters that allow for lots of new functionality to be added or tweaked, including adjusting the timing of execution of different portions.

One huge takeaway from this session was the presenter’s suggestion to enable the included “honeypot” feature (called “Spam blocking” in Gravity Forms terminology) in which a hidden input field will be included on the form as a way to snag automated filling of the form by bots. Basically, since the form field is hidden, no normal visitors to the site will see it or populate it. An automated spam bot will just see it as another form field that can be populated, so will put something there, indicating the submission can be thrown away automatically. The presenter said that he has never had to enable a CAPTCHA (Completely Automated Process for Telling Computers and Humans Apart) field since using this, and spam in his forms is no longer a problem. He even showed a way that he’s used to automatically check the checkbox to tell Gravity Forms to include this on every form on the site, so someone can’t forget to check the box (or uncheck it).

This is one of the many presentations I’ve seen on Unit Testing, though it’s been difficult to wrap my head around how to actually DO it. The concept is pretty simple, basically to perform simple tests on the smallest possible chunks of code, to make sure at each step that the code you wrote actually gets the results you expected. There are several tools out there with which to do Unit Testing (PHPUnit is one of the most often used ones for WP). Since WordPress core development team uses unit testing in their development cycle, there are a number of tests and tests, examples and documentation to help one get a head start in unit testing their own PHP code for WordPress.

Of course, this is another one of the excellent tools that requires a Unix-like environment (and wp-cli installed as well) to run. (This is probably not literally true, as their probably are ports of the software to Windows, but most of the knowledge and discussion out there involves the Unix-style command structure. This also explains why so many software developers these days are using Apple computers, since Apple had the wisdom to base OS X on FreeBSD, a Unix-like operating system. Even though it’s cute and friendly on the surface, there is a very powerful command line structure underneath, with a command style that’s been around for 30+ years.)

The way that the presenter suggested setting up a unit testing environment involves the use of wp-cli and vagrant, to easily setup and destroy instances as needed. This makes it easy to test one’s code on a fresh installation without going to the trouble of manually reinstalling over and over. There are also sets of test data available from wordpress.org and other locations that will give a developer some case scenarios to test against (long titles, tons of comments, no content, etc.).

All in all, WordPress Raleigh was a great time as usual, and well worth the $35 registration price (which included a t-shirt and lunch along with all of the networking opportunities and excellent presentations)! Looking forward to next year…

]]>http://college.wfu.edu/itg/robert-vidrine/advanced/highlights-from-wordcamp-raleigh-2013/feed/0How to print in Windows 8 PDF viewer (AKA “Twinui”)http://college.wfu.edu/itg/robert-vidrine/tech-tidbits/how-to-print-in-windows-8-pdf-viewer-aka-twinui/
http://college.wfu.edu/itg/robert-vidrine/tech-tidbits/how-to-print-in-windows-8-pdf-viewer-aka-twinui/#commentsThu, 24 Oct 2013 14:17:55 +0000http://college.wfu.edu/itg/robert-vidrine/?p=150Windows 8 comes with a decent PDF viewer built in, but since it’s a “Windows app”, it doesn’t include the normal menu bar at the top, nor most of the other controls that we’re used to seeing with Windows programs.

To print from the included Windows PDF Viewer (called “Reader” by Windows, and sometimes referred to as “TWINUI” by Firefox), try using the CTRL+P keyboard shortcut. You’ll get a normal print dialog box in which you can choose the printer, how many copies to print, how much of the document to print, etc.

]]>http://college.wfu.edu/itg/robert-vidrine/tech-tidbits/how-to-print-in-windows-8-pdf-viewer-aka-twinui/feed/0Turning Off PowerPoint Presenter Modehttp://college.wfu.edu/itg/robert-vidrine/powerpoint-2013/turning-off-powerpoint-presenter-mode/
http://college.wfu.edu/itg/robert-vidrine/powerpoint-2013/turning-off-powerpoint-presenter-mode/#commentsWed, 02 Oct 2013 20:43:16 +0000http://college.wfu.edu/itg/robert-vidrine/?p=140Starting with PowerPoint 2013, if you are connected to a projector (or monitor), PowerPoint will automatically go into Presenter View, where the audience sees just the slide show, and the presenter sees the slide show plus a lot of extra information about it (notes, timer, etc.). This also means that anything outside the PowerPoint slideshow (web pages, videos, other programs) show only on the computer screen.

To stop Presenter View once the slide show has started:

In the top left corner of the Presenter View screen (on the computer), click Display Settings

Click Duplicate Slide Show

To stop PowerPoint from automatically starting a slide show in Presenter View:

There is now a really easy way to customize your theme, with not a lot of coding, by simply adding your customizations to the new Theme Customizer section in WordPress. This is a feature introduced in WordPress 3.4, so if you haven’t upgraded yet, besides the risk of being hacked and embarassing yourself and others when your site starts marketing viagra and porn, you now have an additional reason to go ahead and upgrade.

Where is the Theme Customizer?

The Theme Customizer can be accessed in a few different ways (and should probably be accessible from more; see this article for instructions on adding it to the Appearance menu in your admin area: “Theme Customizer Part Deux” ):

The mouseover menu at the top left of the admin bar (the black bar that appears when logged in), where the site name is displayed

The theme selection screen (Appearance -> Theme)

A button in one of the Dashboard widgets (if it’s not hidden)

What does the Theme Customizer do?

There is a little repetition in the Theme Customizer with some other sections, notably the Custom Header and Custom Background screens, which have their own entire pages under Appearance. It may seem like there are a few more options on the full Custom Header and Custom Background pages, but really they are just more spread out and perhaps a little easier to see. Really, I think it’s just more convenient to have all the stuff in one place, and the new Theme Customizer makes a fine place. The Theme Customizer also includes such things as a selector for the front page of one’s site (blog or static page). It’s really a nice addition.

Of course, if it just collected settings that can be modified in other places, that would be nice, but the real power of the Theme Customizer comes from the ease in which a theme programmer (even someone tweaking a theme with a custom theme) can add settings to this interface, and make lots of adjustments easily available to the users of that theme which previously might have required them to tinker with the code.

I’m intrigued; what can I actually change with the Theme Customizer?

There are two basic kinds of changes you might offer to the users of your theme: CSS changes and setting of options. (I’ll talk a little later about why both of these are really “setting options”, but I’ll save that for a little while.)

The Theme Customizer seems built primarily to allow the setting of various CSS values, as most of the tutorials and reference materials on it center around storing the values you want to insert into your CSS, and providing an easy, visual way to choose between them. However, if one takes more than a cursory look at the way the values are stored (in the Options table, along with a TON of other settings), it doesn’t take long to realize that the Theme Customizer isn’t limited to just CSS values. The only difference between setting CSS values (like choosing whether the background color is gold or white) and setting some other value (like whether a menu is horizontal or vertical) is where that value is retrieved. (If you’re changing a CSS value, you’ll retrieve the value in the middle of a CSS statement; if you’re changing a value used somewhere else, you’ll retrieve the value in the midst of anothe rpiece of code.)

Note the use of data validation in the first example. Data validation is basically just a way to make sure that the type of input or output you’re expecting is the only thing that’s actually accepted. In a nutshell, if you offer an input field for someone to type in the title of a post, and they instead type in a really awful SQL query (no, I’m not going to give an example), simply don’t accept it. At the very least, if your field is supposed to accept any arbitrary text that the user might want to enter, at least tell WordPress to “escape” the special characters, so they are just printed on the screen, not executed as code. (If a user to your site is upset or mischievous enough to type a database query for “delete all tables”, simply print the “delete all tables” command on the screen if you can’t just throw it away, instead of treating like instructions to your site.)

There are tons of data validation functions for various purposes. If you’re writing anything that puts something in the database, or gets something from the database and puts it on the screen, it would be a good idea to get familiar with the WordPress Codex article on Data Validation. This topic will get its own post soon…

Why would I want to use this in my theme?

Well, there are a surprising number of people who don’t get the concept of the child theme, or just don’t want to be bothered to create one. (Some of the users of your theme may not even have permission to create a child theme, or upload new files to one once it has been created.) The Theme Customizer gives them a way to alter some aspects of your site, without having to program a single line of PHP or CSS. If there are some settings that most people want to customize, consider putting these into the Theme Customizer. Suddenly, your theme is more useful, and many of the people who might have otherwise needed a child theme to make the tweaks they wanted can now just click a couple of buttons, and focus on the content of their articles.

Ok, sounds good; let’s see some code examples!

I’m not going to try to out-do the various tutorials on the Theme Customizer that are already out there. Unfortunately, they are not all collected in the WordPress Codex like with most things, but with a little studying, it’s not too hard to get a grasp on the technique. However, I’ll try to break it down a little, and introduce some of the various explanations of how to actually use the Theme Customization API.

Theme Customization API

The Theme Customization API article at the Codex is basically an overview of the entire process, with some good code examples, description of the usage and parameters, and links to some other related articles. While you might have to look at some of the other articles I link here to get all the code you need to build out your form, this is a good place to start.

customize_register

This is really the heart of Theme Customization (though it can also be used by plugins, if you don’t have a ton of settings to change in your plugin, and want to skip writing your own settings page). Everything you do with the Theme Customizer is going to be wrapped up in one form or another of this function.

The Function Reference for customize_register has a great deal of information about the various types of controls you might want to use (like a file upload button, a color picker, a drop down box or others). Even after you understand what the Theme Customization API is all about, you might still be struggling to find just the perfect control to pur on your form. If you can’t find it on this page, you might need to take a look at some of the stuff at OttoPress…

OttoPress Articles

For those of you haven’t had the pleasure to meet Otto, he’s one of the core developers of WordPress, has an amazing grasp on what’s happening behind the scenes, and is a really nice guy who’s very willing to share his time and knowledge. He saw that there wasn’t a lot of documentation on Theme Customization, so he wrote several great posts on one of his blogs, ottopress.com:

This article is another overview of the Theme Customizer, from a slightly different perspective (a little more technical) than the one in the WordPress Codex (though it’s actually linked from there because it does a nice job of filling in the gaps). It includes a few more examples of special controls, and dives into the discussion of theme_mod versus “serialized options” techniques for storing the values entered on the form in the database. (I’ll weigh in on this a little later…) It also gives an excellent explanation of how to use javascript to make the preview window show your changes without waiting for a screen refresh.

This article starts off with a bit more of the “why”, but also digs into the “how” as well. As I mentioned before, the Theme Customizer can actually be used for plugins as well as themes, and could come in very handy if you only have a small number of options, and don’t feel like writing your own Settings page. (You can easily make your own Section in the Theme Customizer.)

This article is pretty straightforward; if you can’t find an existing control for the Theme Customizer to do what you want, write your own. Be warned that this article gets a little heavy if you’re not at all familiar with object-oriented programming. Still, if you’re doing something really specific and can’t find the control you need for the Theme Customizer form, you’re probably doing some complex stuff, so this might be what you need. (I think it will be quite rare that you can’t find an existing control to do what you need. There are a ton of them listed in these various articles.)

So… theme_mod or “serialized theme options”?

As you might have noticed by now, there are a couple of main ways that appear in these examples for storing (and getting) the values from the Theme Customizer form. Although Otto states very clearly in the first article I link above that the “serialized theme options” method is the preferred way, because it stores all the values on one row of the options table, some of his examples still use the theme_mod method (the default method used in the wp_customize_register function, unless the type is set to ‘option’.)

Otto says that “serialized theme options” is the recommended and preferred method by the Theme Review Guidelines and the theme reviewers. While Otto is clearly much better at this than I, and more closely in touch with the theme review folks, I have to say, I don’t see this born out in the guidelines themselves.

“Themes are required to save options in a single array, rather than create multiple options for its settings page. Use of set_theme_mod and get_theme_mod handles this for you, as does using the Settings API.”

There you have it. The theme_mod technique is just as sanctioned as the Settings API method (AKA “serialized theme options” in many of Otto’s articles). To be honest, there may be nuances about the two approaches that differ more than I’m representing here, and I’m just ignorant of the finer details, but I don’t see any reason to not use the theme_mod method. The clincher for me: the theme_mod method is much less typing! Also, if you’re thinking that perhaps you should use the “serialized theme options” because it will create less database bloat, you may want to take a look at your database tables (CAREFULLY) and see that you probably already have at least one or two theme_mod lines in your options table, for the theme you’re currently using, and maybe even one for Twenty Twelve or whatever default theme was installed when you started the site.

Theme_mod still serializes your values (basically, puts an array of values into one line in the options table), is less typing, and seems to satisfy the Theme Review guidelines (in case you ever want to distribute your theme at wordpress.org, or just want to keep everything high quality.)

The most recent version of my theme, WF College One Pro has some theme options, which will hopefully make it easier to change several things, without having to learn any CSS or make a child theme.

]]>http://college.wfu.edu/itg/robert-vidrine/advanced/theme-customizer-to-the-rescue/feed/0W3 Total Cache and WPTouch: Cooperating at last!http://college.wfu.edu/itg/robert-vidrine/advanced/w3-total-cache-and-wptouch-cooperating-at-last/
http://college.wfu.edu/itg/robert-vidrine/advanced/w3-total-cache-and-wptouch-cooperating-at-last/#commentsMon, 25 Mar 2013 21:05:45 +0000http://college.wfu.edu/itg/robert-vidrine/?p=80Most people who’ve worked with WordPress for very long know, it’s important to implement some sort of caching plugin to make their site as fast as possible. Most would also agree that it is increasingly important to make your site available to mobile users. (Hey, it’s all about making the information digestible by anyone, right?)

Well, combine two of the most popular plugins for these features, and you might find you have a bit more configuring to do.

The Problem

The problem arises because W3 Total Cache will try to cache your mobile pages. This is a problem, because it doesn’t include the logic to know which user agents to supply the mobile version and which to supply the desktop version. (After all, it is not itself a “mobilizing” plugin…) The symptom is that a desktop user might get a mobile version and a mobile user might get a desktop version. (W3TC looks in its cache to see if it finds a page that resulted from a request for a certain page, finds a page at the ready, and delivers it. It doesn’t contain the logic to know that a mobile client should get the mobile version, and the desktop client should not.)

The fix

Basically, tell W3 Total Cache to completely ignore the mobile agents. This means that it won’t be delivering a cached version of the page to mobile clients, and will also never cache the mobile version of the page. (I know, this means that your mobile users are going to always have pages dynamically generated for them; there may be another way to skin this cat, but I’m not seeing it at this point, and nobody seems to be offering this as an option.)

There is an excellent explanation of this and the steps to perform to make this happen at the WordPress.org forums:

Version Number Issues in WPTouch

If you read through these steps and thought you’d followed them pretty well, but the screenshots don’t match what you’ve got, and your site says WPTouch is up to date, you might have what I’m going to call the “sinkhole version” of WPTouch. (The name is a little mean, but I think accurate.) One of the versions of WPTouch was accidentally released with a typo in the version number. Instead of version 1.9.4.1, the version number was set as 1.9.41. (Hopefully my bolding of the last couple numbers will tell you already what the problem is…) When the PHP version_compare check is performed to find out if the version at wordpress.org is newer than the version installed, it will evaluate the numbers, determine that “41” is higher than “4.1” and decide you’re up to date.

Simply reinstall WPTouch and you should be okay. (I deleted it then reinstalled, and all of my settings were still retained.)

]]>http://college.wfu.edu/itg/robert-vidrine/advanced/w3-total-cache-and-wptouch-cooperating-at-last/feed/0Two nice text editorshttp://college.wfu.edu/itg/robert-vidrine/advanced/two-nice-text-editors/
http://college.wfu.edu/itg/robert-vidrine/advanced/two-nice-text-editors/#commentsTue, 12 Mar 2013 21:06:22 +0000http://college.wfu.edu/itg/robert-vidrine/?p=63Let’s just start this off with a bang: If you’re doing more than occasional PHP editing in the WordPress editor, you’re doing it wrong.

Seriously.

There are lots of reasons not to use the WordPress interface to do anything more than the occasional “Oops! I missed a semicolon!” edit. I’ve recently started using a new tool to edit my PHP files (and javascript and CSS for that matter) and thought this was a good opportunity to rant about some best pratices and offer a couple of tips for code editors.

Why ANY editor is better than the WordPress editor:

No Undo! (This should sell it right away…)

No line numbering. (Just about any error message will give you a line number to investigate.)

Easy to save multiple versions.

Easy to edit several files at once.

Luckily, there are several free editor tools that work well…

Notepad++ This editor, like many free, open source tools, is sublime in its simplicity. It’s a small program, is simple to run (download it wherever you want, double-click it) and the interface is nice and simple. For all those people who like the simplicity of the Windows Notepad, but just wish there were a few more niceties, like line numbering and code highlighting, this tool is for you. It launches just as fast as Notepad, and I appreciate the fact that it’s all in one folder. (It makes me much more likely to try a program when I know it’s not mucking about in the Windows registry.)

It’s simple and straightforward, but you can extend it pretty far with plugins. A couple of plugins I would recommend are Compare and Zen Coding. Compare will make it very easy to compare two documents to highlight the changes made between versions. (“You mean you didn’t document everything you changed??”) Zen Coding is a very extensive plugin that makes writing HTML very quick and easy. (You essentially write HTML shorthand that looks sort of like a CSS selector, then use a keyboard shortcut to expand it into well-formatted HTML.)

Notepad++ has been my favorite editor since I heard about it at WordCamp Philly, though I have recently been trying out “PDT” or “PHP Development Tools” which is really itself an add-on (libraries and such) for Eclipse, another code editor. I’ve just started trying PDT, but the main thing that it offers above Notepad++ is PHP code hinting. A lot of the code-test-fix-test-fix-test cycle is consumed by stupid syntax mistakes, where I’ve forgotten exactly how to form an if function_exists statement or similar. Hopefully PDT can make a dent in these errors and make PHP writing much faster. (Of course, PDT doesn’t have all of the WordPress functions loaded into it, just the standard PHP ones, so there are plenty of times I still have to reference the WordPress Codex to figure out the proper syntax.)

While gathering the URLs to link in this article, though, I think I may have seen a PHP library for Notepad++, which is so far the main advantage of PDT. We’ll see how this pans out.

PHP Development Tools (AKA “PDT” or “Eclipse-PHP”) This tool, created by Zend to apparently show off their skills with PHP and also tempt people to buy their Zend Studio product, is a very full-featured PHP IDE (Integrated Development Environment). In other words, it’s more than just a text editor (even one on steroids, like Notepad++), it includes error checking, code hinting, breakpoints, file management and a bunch of other features.

I’ve actually just started using PDT, and it’s very nice (also available for Mac), but I haven’t completely transitioned from Notepad++. (This might be largely due to the fact that I can right-click a file and open it in Notepad++, but I’m also familiar with that interface already.) One thing that could be the compelling reason to get me to switch is the code hinting. Besides offering up suggestions about PHP functions I may want (based on what I’ve started typing), just the added bonus of automatically closing brackets for me when I start the brackets. There is a lot of repetition in code writing, so anything that can reduce that repetition by just including the repetitive stuff is a bonus.

Incidentally, either of these tools is also great for editing Javascript, HTML, CSS and any other files that are basically special text files. As time goes on, we’ll see which editor wins out. If you haven’t already selected an editor, and are doing all your hanges in the WordPress interface, do yourself a favor and check ‘em out!

]]>http://college.wfu.edu/itg/robert-vidrine/advanced/two-nice-text-editors/feed/0Plugins I likehttp://college.wfu.edu/itg/robert-vidrine/wordpress/plugins-i-like/
http://college.wfu.edu/itg/robert-vidrine/wordpress/plugins-i-like/#commentsMon, 03 Dec 2012 22:53:33 +0000http://localhost/digestibledigits/?p=26A common question from people that are just getting into WordPress is “how do I know if a plugin is good or not?”

There are several things you can do to vet a plugin you want to use:

What’s the rating in the WordPress.org repository? (If you’re not getting your plugin from the wordpress.org repository, be VERY suspicious unless you’re buying it from a reputable company. You can get almost anything for free from the wordpress.org repository…)

Was it updated recently? (Bonus points, though make sure they didn’t just release it for the first time recently.)

Does it work on the newest version of WordPress? (Not everything needs to be updated regularly, but if the developer hasn’t even bothered to test their plugin on the newest version of WP and say “yeah, it still works”, they lose some points.)

Take a look at the support forum:

Do people seem to be getting their questions answered fairly quickly (by the developer hopefully)? (Bonus points)

Do you see an unsolved issue that would badly affect your use of the plugin? (Look for “deal brakers”.)

Take a look at the code (don’t worry, you don’t have to know PHP):

Is it neatly-formatted, with each element indented slightly more than the element it’s inside? (Bonus points)

Are there plenty of comments in the code to explain what various pieces do? (Bonus points)

Of course, sometimes you just need some good hints of where to start, so you don’t have to evaluate everything yourself. Here are some plugins in various categories that I like.

Backup

BackupBuddy - BackupBuddy from ithemes.com. This tool will backup EVERYTHING about your WordPress site, from the files to the database entries, to everything. All of your settings, files, posts, pages, comments, everything can easily be backed up, and just as easily restored. iThemes has recognized that this is one of their jewels, and is very active in developing this, adding new features and speeding things up. Besides just the ability to restore a site back to where it was, this plugin allows you to easily migrate a site to a new server, making it easy to clone the site to install elsewhere, where you can test changes to the site out of sight of your visitors. One can also make a backup of just the files or just the database with this tool, but honestly, it’s so easy to make a full backup every time and know you have a solid restore point, why bother just backing up a piece of it?

Fine-tuned Permissions

Role Scoper - This plugin is free in the wordpress.org repository, but is one of those plugins that is so well done that I’m surprised that it’s free. Reading the developer’s comments in the plugin’s About screen, it sounded like he started programming it because he saw there was a need for it, then by the time he realized it was a HUGE task, was too far in, and had too much integrity to just ditch it. This plugin allows you to setup user groups, create new roles, adjust the capabilities of stock WordPress roles, and really get very granular with permissions. You can even assign specific people roles for specific pages and make any role have an expiration date. One handy feature that comes along with this plugin is the fact that, even in custom menus, if a visitor doesn’t have permission to get a page, it simply doesn’t show up in the menu. There is a paid-for plugin that’s associated with Role Scoper, but RS alone is incredibly powerful, and well-updated.

Members - This plugin is made by Justin Tadlock, who has a very well-respected name in the WordPress community, and has written at least one maybe more books on WP. I would consider him someone that pays strong attention to quality and has a very good understanding of the inner workings of WP. His plugin Members is also well liked by a lot of people, and many have even made additional add-ons for it or made sure their own plugin works with it. There is one thing I didn’t particularly like about Members: it changes the capabilities of the built-in WordPress roles, so when the plugin is removed, the changes remain. This could easily be seen as a strength if it’s the functionality you want, but I wanted the ability to yank out my changes and be back to a stock configuration. A different approach to the challenge which might work well for some…

Image Galleries and Slideshows

Next-Gen Gallery - Ok, this one seems kind of like a no-brainer. This plugin is probably the single most often used plugin from the wordpress.org repository. (I don’t have any data to back that up, but I believe it to be true…) This plugin includes lots of out-of-the box functionality for creating, managing and reusing groups of images. It comes with an image gallery setting, a slideshow setting, and a single picture-viewer setting. All-in-all, very easy to use, and even offers a decent template system, whereby one can make up their own format for how they want to display and use the images. Lots of people have made sure their plugins work with this plugin, and many have developed their own free add-ons to extend it further.

Google Analytics

Google Analyticator - Besides having a cool name, this plugin not only makes it easy to insert the GA code into your site WITHOUT ACTUALLY EDITING YOUR TEMPLATES, it also offers a Dashboard widget, so you can quickly see your GA stats when you log into your site. I like the options for excluding visits from the administrator or other accounts, so every page update, patch or test doesn’t look like another visitor.

LDAP Authentication

Simple LDAP - Ok, so this one is a little specialized, and probably only colleges and universities and other large organizations will even have their own LDAP (or other directory method) server, but if you need this functionality, you need something that works and is easy to use. Some out there with LDAP servers which incorporate a lot of metadata or other functionality may actually prefer one of the other LDAP authentication plugins out there. The LDAP system at my organization is fairly straightforward, and includes almost no metadata, so this “slimmed-down, get it done” plugin fits the bill well.

There are a few others that I like here and there but this is a pretty good start. Note that, according to several of the knowledgeable folks I’ve met who really know WordPress, a well-written plugin will not cause a drag on the site’s performance compared to just putting the code into the site in another way (like pasting it into the functions.php file.)