Recently I was searching around looking for a way to create a hidden page on a WordPress site. It is a hosted site, not on wordpress.com. It is on a Linux server to which I have shell access.
Initially I tried using a plugin that I found that hides pages and posts. Plugins, you got to love or hate them. Love then when they work great right out of the box, hate them when they take a long time to troubleshoot.
Rather than waste too much time with the plugin, I went straight to the command line.
It turns out that if you publish a page and then log into the hosting server, make a directory somewhere under your public_html, change directory into it and execute…
wget -x -nH your-page-url-to-hide-here
…then go back it and make the page a draft or under review, so it “disappears” from the menu structure. It will still work as a “cached” HTML page that has been downloaded to the folder that you have created. It will work, pictures and what not that you have loaded in it will be fully functional.
Example of a hidden page
http://erick.heart-centered-living.org/hidden/i-am-a-hidden-page/
Once the original page is put into draft/under review or private mode, it is gone…
http://erick.heart-centered-living.org/i-am-a-hidden-page/
Caveat
I have noticed that caching can get in the way. If your server caches pages, wget may not see the page updated when you make changes. A quick remedy is to set the page to draft/pending review or private, delete the hidden page. I usually use rm -rf from the directory above it and then force it to download the “404” page. Then you can publish the page re-run wget and it will force it to get the fresh version. Keep note of the size of the file as a hint that it is getting the right one.
Upcoming: Do this with a CGI Script
In an upcoming post, I will cover how to make a CGI script that will allow you to create a hidden page easily without having to use SSH to login to the server.
wget options used in this example, from the man page
-x
–force-directories
The opposite of -nd—create a hierarchy of directories, even if
one would not have been created otherwise. E.g. wget -x
http://fly.srk.fer.hr/robots.txt will save the downloaded file to
fly.srk.fer.hr/robots.txt.
-nH
–no-host-directories
Disable generation of host-prefixed directories. By default,
invoking Wget with -r http://fly.srk.fer.hr/ will create a
structure of directories beginning with fly.srk.fer.hr/. This
option disables such behavior.
Wget Resources
https://www.lifewire.com/uses-of-command-wget-2201085
https://www.labnol.org/software/wget-command-examples/28750/
http://www.linuxjournal.com/content/downloading-entire-web-site-wget