Code Samples

Hotlinking is always annoying, but easy to prevent. Here are two ways to do this with nginx. The first example simply returns a 405 when any hotlinking is detected. The second example prevents hotlinking only from specific domains. I used this when a site tried to embed media files through … more

I recently moved my projects to gunicorn and needed init scripts. Here's what I'm currently using. I have the gunicorns running behind nginx, so you might want to tweak the IP and PORT settings. It might also be nice to use start-stop-daemon. more

I have an abstract base class that is used by various other models. The problem is that I need the same method that runs a query on all instances of those models, and that the manager isn't accessible via model instances. This is the code I ended up using. more

You can use wget to mirror pages that use cookies to authenticate visitors. That's usually the case when there is a login form on a site. more

You want to make sure the About and Blog pages exist, so create them before if necessary, see wp_insert_post() more

To check for multiple custom fields you have to join the meta table twice. more

Run some code when a new blog is created. I'm not sure, but I guess this code has to be in a network-activated or mu-plugins plugin. Maybe having this code enabled in the blog you're using will suffice. more

This snippet shows how you can add metadata to your existing custom taxonomy. So you can use update_metadata() and get_metadata() on your taxonomy. The filter on switch_blog is only necessary if the code runs on a blog network (recommended to implement anyway). The name of the database table is very … more

Build a custom WordPress query and order the posts however you want them. Notice that this won't work properly if you page results, so it is only useful in very specific cases. Btw, wrap everything into your class and get rid o the global var when you use this ;-) more

Show the user a useful search form when on a 404 page. Turn the query string into a search. more