Ben Lobaugh Online

I think, therefore I am. I am, therefore I sail

Category: Computing (Page 2 of 48)

Using wget to crawl your website

If you are looking to crawl your website for something like cache warming you can do so with wget quite easily.

The following wget command will crawl a site and leave nothing behind on the local filesystem afterward.

wget --mirror -q -e robots=off -p -r --delete-after -nd http://www.isleofmtv.com
–mirror crawls the entire site
-q prevents wget from writing output to the buffer
-e robots=off ignores directives in robots.txt
-p get all page assets
-r recursively request pages
–delete-after clean up any local files after running wget
-nd prevents wget from writing a directory structure that gets left behind

Find and update WordPress posts with comments older than NNN days

I have a use case where I need to disable comments on posts in WordPress where the last comment was more than one year, or 365 days, ago.

Posts can be found with this query:

SELECT p.ID, p.post_title, p.post_date, p.comment_status, p.`ping_status`
FROM wp_posts AS p
WHERE p.ID IN (
     SELECT c.comment_post_ID
     FROM wp_comments AS c
     WHERE DATEDIFF( curdate(), c.comment_date ) <= 365
  );

The outer query takes the inner query as the search parameter. The inner query is finding the latest comment for each post based on the number in the WHERE condition. 365 represents 365 days, or 1 year.

Therefore, this query is getting the latest comment for post where the comment is less than 1 year old.

Now let’s say you need to update the posts to disable comments. The goal is to disable commenting for all posts that have not had a comment within the last year. It can be accomplished with the following:

UPDATE wp_posts
SET comment_status='closed', ping_status='closed'
WHERE ID IN (
		SELECT c.comment_post_ID
		FROM wp_comments AS c
		WHERE DATEDIFF( curdate(), c.comment_date ) >= 365
);

Here again the number 365 represents the number of days.

Check the posts and you should see the comments have been closed.

Quickly list all hosts in your ssh config

I try to be a good citizen and create unique ssh keys for each service I ssh into. I setup all sorts of fun config items and one of my favorites is host aliases. I have accumulated dozens of hosts in my config file and remembering the names of each can be problematic. I tend to open the config file a couple times a day to find a host. This morning I whipped up a quick command that will dump a list of all my hosts into the terminal with one command. No more opening the config file with an editor and scrolling through it. Hopefully this will be something you can enjoy also!

Update: A commenter provided a smoother version that gets rid of the grep call. Here it is.

sed -rn ‘s/^\s*Host\s+(.*)\s*/\1/ip’ ~/.ssh/config

But wait! That is a lot to type and this was supposed to make life easier. Add this as a shell alias and simply type sshhosts to get the list!

alias sshhosts="sed -rn ‘s/^\s*Host\s+(.*)\s*/\1/ip’ ~/.ssh/config"

Mute and unmute your mic quickly with this Alfred Workflow

I am on a lot of calls for work every day and juggle several different call applications. Finding the apps mute/unmute button quickly gets tedious. On some apps the UI is so poorly designed as to make toggling the mic nearly unusable.

Enter Alfred! Alfred is an amazing productivity app. Alfred let you run custom commands and hotkeys in custom Workflows.

I created a Workflow that, once installed, allows you to mute and unmute your mic with the command-M hotkey.

To install simply download the Workflow and double click it to load it into Alfred.

Click here to download the Mic PTT Alfred Workflow

The Workflow is on Github! If you have ideas for improvements create a fork and send them to me: https://github.com/blobaugh/Mic-PTT-Alfred-Workflow

WordPress Multisite: Global options that can be overridden per site

I recently ran into a situation where a WordPress Multisite install needed to have some options replicated across each site, both new and existing. It also needed to be able to override the options per site if so desired. The solution is fairly trivial.

  • Setup the options page in wp-admin. Ensure it exists on all subsites
  • On the main site fill in the values that should be defaulted across all sites
  • Drop the following code into your site and replace the placeholder with your own option name
  • Freely use the values from the main site or alter the options on a subsite

All you need to do to get this working is drop the following code into your site and change the placeholder to be the same as the option name that should be replicated.

add_filter( 'option_{OPTION_NAME}', 'my_option_settings', 10, 2 );
add_filter( 'default_option_{OPTION_NAME}', 'my_option_settings', 10, 2 );

function my_option_settings( $value, $option_name ) {
  // Do not loop on ourself
  if( 1 == get_current_blog_id() ) {
    // Bail out
    return $value;
  }
  if( ! $value ) {
    $value = get_blog_option( 1, $option_name );
  }
  return $value;
}

Page 2 of 48

Powered by WordPress & Drip City Coffee