You are on page 1of 53

Building Web Apps with WordPress

WordPress as an Application
Framework Brian Messenlehner
Visit to download the full and correct content document:
https://textbookfull.com/product/building-web-apps-with-wordpress-wordpress-as-an-a
pplication-framework-brian-messenlehner/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

WordPress Genius Guide Coll.

https://textbookfull.com/product/wordpress-genius-guide-coll/

WordPress fundamentals A comprehensive beginner s guide


to WordPress 3rd Edition Kathleen Peterson

https://textbookfull.com/product/wordpress-fundamentals-a-
comprehensive-beginner-s-guide-to-wordpress-3rd-edition-kathleen-
peterson/

WordPress for Beginners Imagine Publishing Ltd

https://textbookfull.com/product/wordpress-for-beginners-imagine-
publishing-ltd/

Wordpress plugin Development 2nd Edition Williams

https://textbookfull.com/product/wordpress-plugin-
development-2nd-edition-williams/
WordPress Security Made Easy 1st Edition Niko Guruli

https://textbookfull.com/product/wordpress-security-made-
easy-1st-edition-niko-guruli/

Server Side Swift with Vapor Building Web APIs and Web
Apps in Swift 3rd Edition Raywenderlich.Com Tutorial
Team

https://textbookfull.com/product/server-side-swift-with-vapor-
building-web-apis-and-web-apps-in-swift-3rd-edition-
raywenderlich-com-tutorial-team/

Practical Node.js: Building Real-World Scalable Web


Apps Azat Mardan

https://textbookfull.com/product/practical-node-js-building-real-
world-scalable-web-apps-azat-mardan/

Progressive Web Apps with React Create Lightning Fast


Web Apps With Native Power Using React and Firebase 1st
Edition Scott Domes

https://textbookfull.com/product/progressive-web-apps-with-react-
create-lightning-fast-web-apps-with-native-power-using-react-and-
firebase-1st-edition-scott-domes/

Introducing Play Framework Java Web Application


Development Second Edition Prem Kumar Karunakaran

https://textbookfull.com/product/introducing-play-framework-java-
web-application-development-second-edition-prem-kumar-
karunakaran/
1. Foreword
2. Preface

a. Who This Book Is For


b. Who This Book Is Not For
c. What You’ll Learn
d. About the Code
e. Conventions Used in This Book
f. Using Code Examples
g. O’Reilly Online Learning
h. How to Contact Us
i. Acknowledgments
3. 1. Building Web Apps with WordPress

a. What Is a Website?
b. What Is an App?
c. What Is a Web App?
i. Features of a Web App
ii. Mobile Apps
iii. Progressive Web Apps

d. Why Use WordPress?

i. You Are Already Using WordPress


ii. Content Management Is Easy with
WordPress
iii. User Management Is Easy and Secure
with WordPress
iv. Plugins
v. Flexibility Is Important
vi. Frequent Security Updates
vii. Cost
viii. Responses to Some Common Criticisms
of WordPress
e. When Not to Use WordPress

i. You Plan to License or Sell Your Site’s


Technology
ii. Another Platform Will Get You “There”
Faster
iii. Flexibility Is Not Important to You
iv. Your App Needs to Be Highly Real
Time

f. WordPress as an Application Framework


i. WordPress Versus Model-View-
Controller Frameworks

g. Anatomy of a WordPress App

i. What Is SchoolPress?
ii. SchoolPress Runs on a WordPress
Multisite Network
iii. The SchoolPress Business Model
iv. Membership Levels and User Roles
v. Classes Are BuddyPress Groups
vi. Assignments Are a CPT
vii. Submissions Are a (Sub)CPT for
Assignments
viii. Semesters Are a Taxonomy on the Class
CPT
ix. Departments Are a Taxonomy on the
Class CPT
x. SchoolPress Has One Main Custom
Plugin
xi. SchoolPress Uses a Few Other Custom
Plugins
xii. SchoolPress Uses the Memberlite
Theme
4. 2. WordPress Basics

a. WordPress Directory Structure

i. Root Directory
ii. /wp-admin
iii. /wp-includes
iv. /wp-content

b. WordPress Database Structure

i. wp_options
ii. Functions Found in /wp-
includes/option.php
iii. wp_users
iv. Functions Found in /wp-includes/…
v. wp_usermeta
vi. wp_posts
vii. Functions Found in /wp-
includes/post.php
viii. wp_postmeta
ix. Functions Found in /wp-
includes/post.php
x. wp_comments
xi. Functions Found in /wp-
includes/comment.php
xii. wp_commentsmeta
xiii. Functions Found in /wp-
includes/comment.php
xiv. wp_terms
xv. Functions Found in /wp-
includes/taxonomy.php
xvi. wp_termmeta
xvii. wp_term_taxonomy
xviii. /wp-includes/taxonomy.php
xix. wp_term_relationships
c. Hooks: Actions and Filters

i. Actions
ii. Filters
d. Development and Hosting Environments

i. Working Locally
ii. Choosing a Web Host
iii. Development, Staging, and Production
Environments
e. Extending WordPress
5. 3. Using WordPress Plugins
a. The General Public License, Version 2, License
b. Installing WordPress Plugins
c. Building Your Own Plugin
d. File Structure for an App Plugin

i. /adminpages/
ii. /classes/
iii. /css/
iv. /js/
v. /images/
vi. /includes/
vii. /includes/lib/
viii. /pages/
ix. /services/
x. /scheduled/
xi. /schoolpress.php

e. Add-Ons to Existing Plugins


f. Use Cases and Examples

i. The WordPress Loop


ii. WordPress Global Variables
g. Free Plugins

i. Admin Columns
ii. Advanced Custom Fields
iii. BadgeOS
iv. Posts 2 Posts
v. Members
vi. W3 Total Cache
vii. Yoast SEO
h. Premium Plugins

i. Gravity Forms
ii. BackupBuddy
iii. WP All Import
i. Community Plugins

i. BuddyPress
6. 4. Themes
a. Themes Versus Plugins

i. Where to Place Code When Developing


Apps
ii. When Developing Plugins
iii. Where to Place Code When Developing
Themes
b. The Template Hierarchy
c. Page Templates
i. Sample Page Template
ii. Using Hooks to Copy Templates
iii. When Should You Use a Theme
Template?
d. Theme-Related WordPress Functions

i. Using locate_template in Your Plugins

e. Style.css
i. Versioning Your Theme’s CSS Files

f. functions.php
g. Themes and CPTs
h. Popular Theme Frameworks

i. WordPress Theme Frameworks


ii. Non-WordPress Theme Frameworks

i. Creating a Child Theme for Memberlite


j. Including Bootstrap in Your App’s Theme
k. Menus

i. Navigation Menus
ii. Dynamic Menus
l. Responsive Design
i. Device and Display Detection in CSS
ii. Device and Feature Detection in
JavaScript
iii. Device Detection in PHP
iv. Final Note on Browser Detection
7. 5. Custom Post Types, Post Metadata, and Taxonomies

a. Default Post Types and CPTs


i. Page
ii. Post
iii. Attachment
iv. Revisions
v. Navigation Menu Item
vi. Custom CSS
vii. Changesets
viii. oEmbed Cache
ix. User Requests
x. Reusable Blocks

b. Defining and Registering CPTs

i. register_post_type( $post_type, $args


);

c. What Is a Taxonomy and How Should I Use It?


i. Taxonomies Versus Post Meta
ii. Creating Custom Taxonomies
iii. register_taxonomy( $taxonomy,
$object_type, $args )
iv. register_taxonomy_for_object_type(
$taxonomy, $object_type )
d. Using CPTs and Taxonomies in Your Themes
and Plugins

i. The Theme Archive and Single


Template Files
ii. Good Old WP_Query and get_posts()
e. Metadata with CPTs

i. add_meta_box( $id, $title, $callback,


$screen, $context, $priority,
$callback_args )
ii. Using Meta Boxes with the Block
Editor

f. Custom Wrapper Classes for CPTs

i. Extending WP_Post Versus Wrapping


It
ii. Why Use Wrapper Classes?
iii. Keep Your CPTs and Taxonomies
Together
iv. Keep It in the Wrapper Class
v. Wrapper Classes Read Better
8. 6. Users, Roles, and Capabilities

a. Getting User Data


b. Add, Update, and Delete Users
c. Hooks and Filters
d. What Are Roles and Capabilities?
i. Checking a User’s Role and Capabilities
ii. Creating Custom Roles and Capabilities

e. Extending the WP_User Class


f. Adding Registration and Profile Fields
g. Customizing the Users Table in the Dashboard
h. Plugins

i. Theme My Login
ii. Hide the Admin Bar from
Nonadministrators
iii. Paid Memberships Pro
iv. PMPro Register Helper
v. Members
vi. WP User Fields
9. 7. Working with WordPress APIs, Objects, and Helper
Functions

a. Shortcode API

i. Shortcode Attributes
ii. Nested Shortcodes
iii. Removing Shortcodes
iv. Other Useful Shortcode-Related
Functions
b. Widgets API

i. Before You Add Your Own Widget


ii. Adding Widgets
iii. Defining a Widget Area
iv. Embedding a Widget Outside of a
Dynamic Sidebar
c. Dashboard Widgets API

i. Removing Dashboard Widgets


ii. Adding Your Own Dashboard Widget

d. Settings API

i. Do You Really Need a Settings Page?


ii. Could You Use a Hook or Filter
Instead?
iii. Use Standards When Adding Settings
iv. Ignore Standards When Adding
Settings

e. Rewrite API
i. Adding Rewrite Rules
ii. Flushing Rewrite Rules
iii. Other Rewrite Functions

f. WP-Cron
i. Adding Custom Intervals
ii. Scheduling Single Events
iii. Kicking Off Cron Jobs from the Server
iv. Using Server Crons Only
g. WP Mail
i. Sending Nicer Emails with WordPress

h. File Header API

i. Adding File Headers to Your Own Files


ii. Adding New Headers to Plugins and
Themes

i. Heartbeat API
10. 8. Secure WordPress

a. Why It’s Important


b. Security Basics

i. Update Frequently
ii. Don’t Use the Username “admin”
iii. Use a Strong Password
iv. Examples of Bad Passwords
v. Examples of Good Passwords

c. Hardening WordPress
i. Don’t Allow Admins to Edit Plugins or
Themes
ii. Change Default Database Tables Prefix
iii. Move wp-config.php
iv. Hide Login Error Messages
v. Hide Your WordPress Version
vi. Don’t Allow Logins via wp-login.php
vii. Add Custom .htaccess Rules for
Locking Down wp-admin
d. SSL Certificates and HTTPS
i. Installing an SSL Certificate on Your
Server
ii. WordPress Login and WordPress
Administrator over SSL
iii. Debugging HTTPS Issues
iv. Avoiding SSL Errors with the “Nuclear
Option”

e. Back Up Everything!
f. Scan, Scan, Scan!
g. Useful Security Plugins
i. Spam-Blocking Plugins
ii. Backup Plugins
iii. Firewall/Scanner Plugins
iv. Login and Password-Protection Plugins
h. Writing Secure Code

i. Check User Capabilities


ii. Custom SQL Statements
iii. Data Validation, Sanitization, and
Escaping
iv. Nonces
11. 9. JavaScript Frameworks and Workflow
a. What Is ECMAScript?
b. What Is ES6?
c. What Is ES9?
d. What Is ESNext?
e. What Is Ajax?
f. What Is JSON?
g. jQuery and WordPress
i. Enqueuing Other JavaScript Libraries
ii. Where to Put Your Custom JavaScript
h. Ajax Calls with WordPress and jQuery
i. Managing Multiple Ajax Requests
j. Heartbeat API
k. WordPress Limitations with Asynchronous
Processing
l. JavaScript Frameworks
i. Backbone.js
ii. React
12. 10. WordPress REST API
a. What Is a REST API?
i. API
ii. REST
iii. JSON
iv. HTTP
b. Why Use the WordPress REST API?
c. Using the WordPress REST API V2

i. Discovery
ii. Authentication
iii. Routes and Endpoints
iv. Requests
v. Responses
d. Adding Your Own Routes and Endpoints
i. register_rest_route( $namespace,
$route, $args, $override );
ii. Setting Up the WordPress Single Sign-
On Plugin
iii. Adding the /wp-sso/v1/check Route
iv. Bundling Basic Authentication with
Our Plugin
v. Using the Endpoint We Set Up to
Check User Credentials

e. Popular Plugins Using the WordPress REST


API
i. WooCommerce
ii. BuddyPress
iii. Paid Memberships Pro
13. 11. Project Gutenberg, Blocks, and Custom Block Types
a. The WordPress Editor
b. The Classic Editor Plugin
c. Using Blocks for Content and Design
d. Using Blocks for Functionality
e. Creating Your Own Blocks

i. Minimal Block Example


f. Using Custom Blocks to Build App Experiences
i. Enabling the Block Editor in Your CPTs
ii. Block Categories
iii. The Homework Blocks
iv. Limiting Blocks to Specific CPTs
v. Limiting CPTs to Specific Blocks
vi. Block Templates
vii. Saving Block Data to Post Meta
g. Tips
i. Enable WP_SCRIPT_DEBUG
ii. Use filemtime() for the Script Version
iii. More Tips
iv. Learn JavaScript, Node.js, and React
More Deeply
14. 12. WordPress Multisite Networks
a. Why Multisite?
b. Why Not Multisite?
c. Multisite Alternatives

i. Multiple Authors or Categories on the


Same WordPress Site
ii. Custom Post Types
iii. Totally Separate Sites
iv. Use a WordPress Maintenance Service
v. Multitenancy

d. Setting Up a Multisite Network


e. Managing a Multisite Network
i. Dashboard
ii. Sites
iii. Users
iv. Themes
v. Plugins
vi. Settings
vii. Updates
f. Multisite Database Structure
i. Networkwide Tables
ii. Individual Site Tables
iii. Shared Site Tables
g. Domain Mapping
h. Random Useful Multisite Plugins
i. Gravity Forms User Registration Add-
On
ii. Member Network Sites Add-On for
Paid Memberships Pro
iii. More Privacy Options
iv. Multisite Global Media
v. Multisite Plugin Manager
vi. Multisite Global Search
vii. Multisite Robots.txt Manager
viii. NS Cloner: Site Copier
ix. WP Multi Network
i. Basic Multisite Functionality

i. $blog_id
ii. is_multisite()
iii. get_current_blog_id()
iv. switch_to_blog( $new_blog )
v. restore_current_blog()
vi. get_blog_details( $fields = null,
$get_all = true )
vii. update_blog_details( $blog_id,
$details = array() )
viii. get_blog_status( $id, $pref )
ix. update_blog_status( $blog_id, $pref,
$value )
x. get_blog_option( $id, $option,
$default = false )
xi. update_blog_option( $id, $option,
$value )
xii. delete_blog_option( $id, $option )
xiii. get_blog_post( $blog_id, $post_id )
xiv. add_user_to_blog( $blog_id,
$user_id, $role )
xv. wpmu_delete_user( $user_id )
xvi. create_empty_blog( $domain, $path,
$weblog_title, $site_id = 1 )
xvii. Functions We Didn’t Mention
15. 13. Localizing WordPress Apps
a. Do You Even Need to Localize Your App?
b. How Localization Is Done in WordPress
c. Defining Your Locale in WordPress
d. Text Domains

i. Setting the Text Domain


e. Prepping Your Strings with Translation
Functions

i. __( $text, $domain = “default” )


ii. _e( $text, $domain = “default” )
iii. _x( $text, $context, $domain =
“default” )
iv. _ex( $title, $context, $domain =
“default” )
v. Escaping and Translating at the Same
Time
f. Creating and Loading Translation Files
i. Our File Structure for Localization
ii. Generating a .pot File
iii. Creating a .po File
iv. Creating a .mo File
g. GlotPress

i. Using GlotPress for Your


WordPress.org Plugins and Themes
ii. Creating Your Own GlotPress Server
16. 14. WordPress Optimization and Scaling
a. Terms
b. Origin Versus Edge
c. Testing
i. What to Test
ii. Chrome Debug Bar
iii. The WordPress Site Health Tool
iv. Apache Bench
v. Siege
d. W3 Total Cache
i. Page Cache Settings
ii. Minify
iii. Database Caching
iv. Object Cache
v. CDNs
vi. GZIP Compression

e. Hosting
i. WordPress-Specific Hosts
ii. Rolling Your Own Server

f. Selective Caching
i. The Transient API
ii. Multisite Transients
g. Using JavaScript to Increase Performance
h. Custom Tables
i. Bypassing WordPress
17. 15. Ecommerce
a. Choosing a Plugin
i. WooCommerce
ii. Paid Memberships Pro
iii. Easy Digital Downloads

b. Payment Gateways
c. Merchant Accounts
d. Setting Up SaaS with Paid Memberships Pro
e. The SaaS Model

i. Step 0: Establishing How You Want to


Charge for Your App
ii. Step 1: Installing and Activating Paid
Memberships Pro
iii. Step 2: Setting Up the Level
iv. Step 3: Setting Up Pages
v. Step 4: Choosing Payment Settings
vi. Step 5: Choosing Email Settings
vii. Step 6: Choosing Advanced Settings
viii. Step 7: Locking Down Pages
ix. Step 8: Customizing Paid Memberships
Pro
18. 16. Mobile Apps Powered by WordPress

a. Mobile App Use Cases


b. Native and Hybrid Mobile Apps

i. What Is a Native Mobile App?


ii. What Is a Hybrid Mobile App?
iii. Why Hybrid over Native?
iv. Cordova
v. Ionic Framework
vi. App Wrapper
vii. AppPresser
19. 17. PHP Libraries, Web Service Integrations, and
Platform Migrations
a. PHP Libraries

i. Image Generation and Manipulation


ii. PDF Generation
iii. Geolocation and Geotargeting
iv. File Compression and Archiving
v. Developer Tools
b. External APIs and Web Services

i. Elasticsearch
ii. ElasticPress by 10up
iii. Google Vision
iv. Google Maps
v. Google Translate
vi. Twilio
vii. Other Popular APIs
c. Migrations
i. Host Migrations
ii. Platform Migrations
iii. Create a Data Mapping Guide
20. 18. The Future
a. Where We’ve Been
b. The REST API

i. WordPress Plugins Will Focus More on


APIs
ii. Headless WordPress
iii. GraphQL
c. Gutenberg

i. The Administrator Interface Will Move


to React/Gutenberg
ii. Gutenberg Will Power a Frontend
Editing Experience for WordPress
iii. Block Templates Will Replace Themes
iv. Blocks Will Replace Plugins
d. WordPress Market Share Will Increase and
Decrease
e. WordPress Will Become a More Popular
Platform for Mobile Development
f. WordPress Will Continue to Be Useful for
Developing Apps of All Kinds
21. Index
Praise for Building Web Apps with WordPress, Second
Edition

“WordPress is more than just software, it’s a movement that


is becoming the de facto operating system of the web. More
than just a blog or a CMS, when you learn how to use
WordPress as an application platform you’ll be at the
forefront of the third wave of its growth.”
—Matt Mullenweg, Cofounder of WordPress

“Brian and Jason have grown side by side with WordPress for
years, and successfully demonstrate how, for the right kind
of app, developers can leverage that engine to build more
secure, more performant applications in half the time.”
—Jake Goldman, President and Founder of 10up

"Building Web Apps with WordPress is a great resource for


developers looking to learn or currently working with the
PHP-oriented approach to creating WordPress web apps.”
—Dave Mackey, Web/Software Developer, Liquid
Church
Building Web Apps with
WordPress
WordPress as an Application Framework

SECOND EDITION

Brian Messenlehner and Jason Coleman


Building Web Apps with WordPress

by Brian Messenlehner and Jason Coleman

Copyright © 2020 Brian Messenlehner and Jason Coleman. All


rights reserved.

Printed in the United States of America.

Published by O’Reilly Media, Inc., 1005 Gravenstein Highway


North, Sebastopol, CA 95472.

O’Reilly books may be purchased for educational, business, or


sales promotional use. Online editions are also available for
most titles (http://oreilly.com). For more information, contact
our corporate/institutional sales department: 800-998-9938 or
corporate@oreilly.com.

Acquisitions Editor: Jennifer Pollock

Development Editor: Alicia Young

Production Editor: Deborah Baker

Copyeditor: Octal Publishing, LLC

Proofreader: Rachel Monaghan

Interior Designer: David Futato


Cover Designer: Karen Montgomery

Illustrator: Rebecca Demarest

April 2014: First Edition


December 2019: Second Edition

Revision History for the Second Edition


2019-12-11: First Release

See http://oreilly.com/catalog/errata.csp?isbn=9781491990087
for release details.

The O’Reilly logo is a registered trademark of O’Reilly Media,


Inc. Building Web Apps with WordPress, the cover image, and
related trade dress are trademarks of O’Reilly Media, Inc.

While the publisher and the authors have used good faith
efforts to ensure that the information and instructions
contained in this work are accurate, the publisher and the
authors disclaim all responsibility for errors or omissions,
including without limitation responsibility for damages resulting
from the use of or reliance on this work. Use of the information
and instructions contained in this work is at your own risk. If
any code samples or other technology this work contains or
describes is subject to open source licenses or the intellectual
property rights of others, it is your responsibility to ensure that
your use thereof complies with such licenses and/or rights.

978-1-491-99008-7
Another random document with
no related content on Scribd:
BRICK HORIZONS

Here the old map a woodland marks,


With rivers winding through the hills;
And prints remain of spacious parks,
And gabled farms and watermills.

But now we see no fields to reap,


No flowers to welcome sun and rain:
The hillside is a cinder heap,
The river is an inky drain.

The modern town of red brick streets,


Row beyond row, and shelf on shelf,
On one side spreads until it meets
A town as dreary as itself;
And on the other side its arms
Of road and tramway are out-thrust,
And mutilate the fields and farms,
And shame the woods with noise and dust.

Here, from the scenes we love remote,


Dwell half the toilers of the land,—
The soul we think of as a vote,
The heart we speak of as a hand.

Dull sons of a mechanic age


Who claim but miss the rights of man,—
They have no dreams beyond their cage,
They know not of the haunts of Pan.

Here, wandering through mills and mines


And dreary streets each like the last,
Enclosed by brick horizon lines,
I found an island of the past.
A few sad fields, a few old trees,
In that new world of grime and smoke
Told me the time was springtime; these
Alone remembered and awoke.

And in the grass were stars and bells,


The immemorial blossomings
That spring to greet us from the wells
Of Beauty at the heart of things.

A lark sang overhead, its note


Had the same joy with which it fills
The morning, when we hear it float
Through crystal air on thymy hills.

We mar the earth, our modern toil


Defaces old and lovely things;
We soil the stream, we cannot soil
The brightness of Life’s fountain springs.

Here where man’s last progressive aim


Has stamped the green earth with the brand
Of want and greed, and put to shame
Her beauty, and we see the land

With mine and factory and street


Deformed, and filled with dreary lives,—
Here, too, Life’s fountain springs are sweet:
Our venture fails, God’s hope survives.

And in the heart of every child


Born in this brick horizon ring
The flowers of wonderland grow wild,
The birds of El Dorado sing.
FIRST PATHWAYS

Where were the pathways that your childhood knew?—


In mountain glens? or by the ocean strands?
Or where, beyond the ripening harvest land,
The distant hills were blue?

Where evening sunlight threw a golden haze


Over a mellow city’s walls and towers?
Or where the fields and lanes were bright with flowers,
In quiet woodland ways?

And whether here or there, or east or west,


That place you dwelt in first was holy ground;
Its shelter was the kindest you have found,
Its pathways were the best.

And even in the city’s smoke and mire


I doubt not that a golden light was shed
On those first paths, and that they also led
To lands of heart’s desire.

And where the children in dark alleys penned,


Heard the caged lark sing of the April hills,
Or where they dammed the muddy gutter rills,
Or made a dog their friend;
Or where they gathered, dancing hand in hand,
About the organ man, for them, too, lay
Beyond the dismal alley’s entrance way,
The gates of wonderland.

For ’tis my faith that Earth’s first words are sweet


To all her children,—never a rebuff;
And that we only saw, where ways were rough,
The flowers about our feet.
HIDDEN PATHS

You see a house of weathered stone,


A pillared gate, a courtyard wide,
And ancient trees that almost hide
The garden wild and overgrown;
You see the sheltering screen of pines
Beyond the farmyard and the fold,
And upland cornfields waving gold
Against the blue horizon lines;
But we of every field and wall
And room are now so much a part,
We seem to touch a living heart
And rather feel than see it all.

You pass the broken arch that spanned


The garden walk,—you note the weeds,
But miss our secret path that leads
To hidden nooks of wonderland;
And, where the faded rooms you mark,
You know not of the ancient spell
That o’er them in the firelight fell
When all the world outside was dark.

Elsewhere is your enchanted ground,


Your secret path, your treasure store;
And those who sojourned here before
Saw marvels we have never found.
For Earth is full of hidden ways
More wondrous than the ways it shows,
And treasures that outnumber those
For which men labour all their days.
THE PATHS OF THE INFINITE

Have we not marked Earth’s limits, followed its long ways round,
Charted our island world, and seen how the measureless deep
Sunders it, holds it remote, that still in our hearts we keep
A faith in a path that links our shores with a shore unfound?

No quest the venturer waits, no world have we to explore;


But still the voices that called us far over the lands and seas
Whisper of stranger countries and lonelier deeps than these,
In the wind on the hill, and the reeds on the lake, and the wave on the shore.

Never beyond our Earth shall the venturer find a guide:


From the golden light of the stars, but not from the stars, a clue
May fall to the Earth; and the rose of eve and the noonday blue
Veil with celestial beauty the fathomless deeps they hide.

They have their bounds those deeps, and the ways that end are long;
But the soul seeks not for an end,—its infinite paths are near;
Over its unknown seas by the light of a dream we steer,
Through its enchanted isles we sail on an ancient song.

Here, where a man and a maid in the dusk of the evening meet,
Here, where a grave is green and the larks are singing above,
The secret of life everlasting is held in a name that we love,
And the paths of the infinite gleam through the flowers that grow at our
feet.
A DESERTED HOME

Here where the fields lie lonely and untended,


Once stood the old house grey among the trees,
Once to the hills rolled the waves of the cornland—
Long waves and golden, softer than the sea’s.

Long, long ago has the ploughshare rusted,


Long has the barn stood roofless and forlorn;
But oh! far away are some who still remember
The songs of the young girls binding up the corn.

Here where the windows shone across the darkness,


Here where the stars once watched above the fold,
Still watch the stars, but the sheepfold is empty;
Falls now the rain where the hearth glowed of old.

Here where the leagues of melancholy loughsedge


Moan in the wind round the grey forsaken shore,
Once waved the corn in the mid-month of autumn,
Once sped the dance when the corn was on the floor.
BEYOND THE FARTHEST HORIZON

We have dreamed dreams beyond our comprehending,


Visions too beautiful to be untrue;
We have seen mysteries that yield no clue,
And sought our goals on ways that have no ending.
We, creatures of the earth,
The lowly born, the mortal, the foredoomed
To spend our fleeting moments on the spot
Wherein to-morrow we shall be entombed,
And hideously rot,—
We have seen loveliness that shall not pass;
We have beheld immortal destinies;
We have seen Heaven and Hell and joined their strife;
Ay, we whose flesh shall perish as the grass
Have flung the passion of the heart that dies
Into the hope of everlasting life.

Oh, miracle of human sight!


That leaps beyond our earthly prison bars
To wander in the pathways of the stars
Across the lone abysses of the night.
Oh, miracle of thought! that still outsweeps
Our vision, and beyond its range surveys
The vistas of interminable ways,
The chasms of unfathomable deeps,
Renewed forevermore, until at last
The endless and the ended alike seem
Impossible, and all becomes a dream;
And from their crazy watch-tower in the vast
Those wild-winged thoughts again to earth descend
To hide from the unfathomed and unknown,
And seek the shelter love has made our own
On homely paths that in a graveyard end.
Oh, miracles of sight and thought and dream!
Y d b t l d t f th t
You do but lead us to a farther gate,
A higher window in the prison wall
That bounds our mortal state:
However far you lift us we must fall.
But lo! remains the miracle supreme,—
That we, whom Death and Change have shown our fate,
We, the chance progeny of Earth and Time,
Should ask for more than Earth and Time create,
And, goalless and without the strength to climb,
Should dare to climb where we were born to grope;
That we the lowly could conceive the great,
Dream in our dust of destinies sublime,
And link our moments to immortal hope.

No lesson of the brain can teach the soul


That ’twas not born to share
A nobler purpose, a sublimer care
Than those which end in paths without a goal;
No disenchantment turn it from the quest
Of something unfulfilled and unpossessed
O’er which no waters of oblivion roll.
But not in flight of thought beyond the stars
Can we escape our mortal prison bars:
There the unfathomable depths remain
Blind alleys of the brain:
The sources of those sudden gleams of light
That merge our finite in the infinite,
We look for there in vain;
For not upon the pathways that are barred
But those left open,—not where the unknown quest
Dismays the soul, but where it offers rest,
Are set those lights that point us heavenward.

So, let us turn to the unfinished task


That earth demands, strive for one hour to keep
A watch with God, nor watching fall asleep,
Before immortal destinies we ask.
Before we seek to share
A larger purpose, a sublimer care,
Let us o’ercome the bondage of our fears,
And fit ourselves to bear
The burden of our few and sinful years.
Ere we would claim a right to comprehend
The meaning of the life that has no end
Let us be faithful to our passing hours,
And read their beauty, and that light pursue
Which gives the dawn its rose, the noon its blue,
And tells its secret to the wayside flowers.

Our eyes that roam the heavens are too dim,


Our faithless hearts too cumbered with our cares
To reach that light; but whoso sees and dares
To follow, we must also follow him.
Our heroes have beheld it and our seers,
Who in the darkest hours foretold the dawn.
It flashes on the sword for freedom drawn:
It makes a rainbow of a people’s tears.
The vast, the infinite, no more appal
Him who on homely ways has seen it fall:
He trusts the far, he dowers the unknown
With all the love that Earth has made our own,
And all the beauty that his dreams recall:
For him the loneliest deeps of night it cheers;
It gathers in its fold the countless spheres,
And makes a constant homelight for them all.
A HALT ON THE WAY

A pause, a halt upon the way!


A time for dreaming and recalling;
We bore the burden of the day,
And now the autumn night is falling.

A halt in life! a little while


In which to be but a beholder,
And think not of the coming mile
And feel not, “I am growing older.”

A stern old man with wrinkled brow,


Urging us on with beckoning finger,
Time seems no longer—rather now
A sweetheart who would make us linger.

Old times are with us,—long ago;


Upon the wall familiar shadows;
We find again the haunts we know,
The pleasant pathways through the meadows.

And as we turn and look ahead,


Seeking beyond for things departed,
And dream of pathways we must tread
In days to come through lands uncharted,

Old faiths still light us on our way,


Old love and laughter, hope and sorrow,—
As evening of the Northern day
Becomes the morning of to-morrow.
OLD LANDMARKS

The log flames, as they leap and fall,


Cast ancient shadows on the wall;
Again I hear the south-west blow
About the house, as long ago
We heard it, when we gathered round
The hearth made homelier by the sound
That in the chimney caverns keened
And told of things the darkness screened.
Dim in their panels round the room
The old unchanging faces loom;
And soft upon the crimson robe,
The hand that rests upon a globe,
The dusky frames, the faded tints,
The flicker of the hearth-light glints.
Out in the yard familiar tones
Of voices reach me; on the stones
A waggon rumbles, and a bark
Welcomes an inmate from the dark.
It might be twenty years ago,
So much of all we used to know
Remains unchanged; and yet I feel
Some want that makes it half unreal.
For we who long ago were part
Of all we knew, the very heart
Of all we loved, let somewhere slip
The bonds of that old comradeship.
The past awakes; but while I muse
Here in the same old scenes, I lose
The paths to which we once had clues.
Along familiar ways we went
All day, at every turn intent
To mark where Time had made a theft,
Or undisturbed our treasure left.
H ld d d h
Here an old tree was down, and there
A roof had fallen, a hearth was bare,
Where once we saw amid the smoke
The glowing turf, the kindly folk.
Here one we had watched beside the plough
Stride with his horses, hobbled now;
And here there strode a full-grown man
Where once a bare-legged urchin ran.
And where was now that girl whose feet
Once made yon mountain path so sweet?
Whose shyness flushed her cheek, the while
The mischief hidden in her smile
Belied it? I behold the spot
Where once she passed but now is not,
The grey rocks, where the mountain breeze
Fluttered the skirts about her knees.
We passed beside the wheelwright’s door
Where, as it used to be, the floor
Was piled with shavings, and a haze
Of dusty motes made dim the rays
Of sunlight, and the air was sweet
With smell of new-sawn wood and peat.
We heard the smithy anvil clink,
And saw the fire grow bright and sink
In answer to the bellows’ wheeze,
While, as of old, between his knees
The smith a horse’s fetlocks drew,
And rasped the hoof and nailed the shoe.
Here, and at every place of call,
The welcome that we had from all,
The pleasant sound of names outgrown
By which in boyhood we were known,
Quick springing to their lips, a look
That backward to old meetings took
Our thoughts, a word that brought to mind
Something for ever left behind,—
All, though they blessed us, touched the springs
Of tears at the deep heart of things.
O tea s at t e deep ea t o t gs.

We saw the mountains far away,


Beyond whose blue horizons lay
The wonderlands of which we dreamed
Of old; and still their barrier seemed
To tell us of the pilgrim quest,
And things remote and unpossessed,—
Not of that world which on our hearts
Had marked its bounds and graved its charts.
They told us of that unknown shore
That none can find; but where, before,
They called us o’er the world to roam,
They now seemed sheltering walls of home.
And those old paths whose ends we sought
Were dearer for themselves than ought
Their ends foretold: no truth could harm
Their beauty or undo their charm;
No disillusions of the far
Could touch their homeliness, or mar
The love that made them what they are.

Here we were children: here in turn


Our children in the same paths learn
The secrets of the woods and flowers,
And dream the dreams that once were ours.
Their vision keen renews our own,
Their certainties our doubts atone,
And, sharing in their joys, we weave
The years we find with those we leave.
A little weary, glad of rest
Ourselves, our hearts are in their quest.
Pilgrims of life, whose steps have slowed,
We love to linger on the road,
Or reach the welcome stage, while they
Are eager for the unknown way.
Some time to come their thoughts will turn
To these wild winter nights, and yearn
For something lost and left behind
For something lost and left behind,
As now I turn.—I hear the wind
Keen in the chimney as of old,
And darkness falls on field and fold;—
I catch the clue, on scenes that were
I look not backward,—I am there!
The men are gone, the gates are barred,
We steal across the empty yard,
The cattle drowse within their stalls,
The shelter of our homestead walls
Is round us, and the ways without
Are filled with mystery and doubt.
Over the hidden forest sweeps
The wind, and all its haunted deeps
Are calling, and we do not dare
Farther beyond our walls to fare
Than o’er one field, the sheds to gain
Where, sheltered from the wind and rain,
The watchful shepherd and his dogs
Still tarry, and a fire of logs,
A lantern’s light, a friendly bark,
Make us an outpost in the dark.
I miss the way! I drop the clues!
Through mists of years again I lose
My childhood, and alone I sit
And watch the shadows leap and flit
Above the hearth. The world that lies
Beyond our homely boundaries
I know, and in the darkness dwell
No hidden foes, no wizard spell.
But still the starry deeps are crossed
By lonelier paths than those we lost;
Still the old wonder and the fear
Of what we know not, makes more dear
The ways we know; and still, no less
Than in my childhood’s days, I bless
The shelter of their homeliness.

A id th b dl d k
Amid the boundless and unknown
Each calls some guarded spot his own;
A shelter from the vast we win
In homely hearths, and make therein
The glow of light, the sound of mirth,
That bind all children of the earth
In brotherhood; and when the rain
Beats loud upon the window-pane,
And shadows of the firelight fall
Across the floor and on the wall,
And all without is wild and lone
On lands and seas and worlds unknown,—
We know that countless hearthlights burn
In darkened places, and discern,
Inwoven with the troubled plan
Of worlds and ways unknown to man,
The shelter at the heart of life,
The refuge beyond doubt and strife,
The rest for every soul outcast,
The homely hidden in the vast;
And doubt not that whatever fate
May lie beyond us, soon or late,
However far afield we roam,
The unknown way will lead us home.

THE END

Printed by R. & R. Clark, Limited, Edinburgh.

By SIDNEY ROYSE LYSAGHT


Crown 8vo. 4s. 6d. net.
POEMS OF THE UNKNOWN WAY
ATHENÆUM.—“The series of poems under the general heading, ‘The
Undiscovered Shore,’ contains some exquisite renderings of the moods and
impressions of one who goes down, literally as well as tropically, into the
great waters. They are full of melody, full of sadness—the harvest of an eye
quick to catch the beauty of external circumstance and of an ear open to the
calling of the highways of the seas and the highways of life.... Mr. Lysaght
puts an exceptional sense of rhythm at the service of sincere thinking and
fine feeling.”
DAILY CHRONICLE.—“Mr. Lysaght has an admirable style and an
almost Swinburnian command of metre.”
LITERARY WORLD.—“Here is stuff with the right ring; with an accent
such as this to guide him, the critic cannot fall into a mistake. We have
enjoyed our tour among Mr. Lysaght’s perplexities in no half-hearted
fashion.”
Crown 8vo. 6s.
HER MAJESTY’S REBELS
MORNING POST.—“A most remarkable book, and no one on the look-
out for the best in contemporary fiction can afford to miss it.”
WORLD.—“Rare and charming novel.... The story is intensely
interesting, and every individual is alive and appealing.”
ACADEMY.—“To find fault with Her Majesty’s Rebels is difficult, and to
praise it worthily is not easy; few Irish books of such good parts have come
into our hands since Carleton’s days.”
STANDARD.—“The story is tremendously absorbing and poignant.”
SPECTATOR.—“A very striking story.”
DAILY CHRONICLE.—“An able book, certainly one of the ablest of the
year.”
MACMILLAN AND CO., Ltd., LONDON.

By SIDNEY ROYSE LYSAGHT


Crown 8vo. 3s. 6d. each.
ONE OF THE GRENVILLES
DAILY TELEGRAPH.—“Bound to be discussed by any one who reads it,
and whatever the verdict of the reader may be, he cannot fail to be
interested and attracted.”
GUARDIAN.—“A really good and absorbing tale.”
ACADEMY.—“There is freshness and distinction about One of the
Grenvilles.... Both for its characters and setting and for its author’s pleasant
wit, this is a novel to read.”
BOOKMAN.—“So high above the average of novels that its readers will
want to urge on the writer a more frequent exercise of his powers.”
THE MARPLOT
SPECTATOR.—“A clever, original, and vigorous work.”
WORLD.—“It is not often the path of the reviewer is brightened by so
admirable a piece of work as Mr. Lysaght’s novel, The Marplot.”
PALL MALL GAZETTE.—“A book which the reader cannot put down
without a glow of honest pleasure.... Of very high excellence.”
SATURDAY REVIEW.—“We do not often come across a better specimen
of modern fiction than The Marplot.”
DAILY TELEGRAPH.—“The whole book teems with good things.”
BOOKMAN.—“There is not a dull page in The Marplot.”
MACMILLAN AND CO., Ltd., LONDON.
*** END OF THE PROJECT GUTENBERG EBOOK HORIZONS
AND LANDMARKS ***

Updated editions will replace the previous one—the old editions


will be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright
in these works, so the Foundation (and you!) can copy and
distribute it in the United States without permission and without
paying copyright royalties. Special rules, set forth in the General
Terms of Use part of this license, apply to copying and
distributing Project Gutenberg™ electronic works to protect the
PROJECT GUTENBERG™ concept and trademark. Project
Gutenberg is a registered trademark, and may not be used if
you charge for an eBook, except by following the terms of the
trademark license, including paying royalties for use of the
Project Gutenberg trademark. If you do not charge anything for
copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such
as creation of derivative works, reports, performances and
research. Project Gutenberg eBooks may be modified and
printed and given away—you may do practically ANYTHING in
the United States with eBooks not protected by U.S. copyright
law. Redistribution is subject to the trademark license, especially
commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the


free distribution of electronic works, by using or distributing this
work (or any other work associated in any way with the phrase
“Project Gutenberg”), you agree to comply with all the terms of
the Full Project Gutenberg™ License available with this file or
online at www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand,
agree to and accept all the terms of this license and intellectual
property (trademark/copyright) agreement. If you do not agree to
abide by all the terms of this agreement, you must cease using
and return or destroy all copies of Project Gutenberg™
electronic works in your possession. If you paid a fee for
obtaining a copy of or access to a Project Gutenberg™
electronic work and you do not agree to be bound by the terms
of this agreement, you may obtain a refund from the person or
entity to whom you paid the fee as set forth in paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only


be used on or associated in any way with an electronic work by
people who agree to be bound by the terms of this agreement.
There are a few things that you can do with most Project
Gutenberg™ electronic works even without complying with the
full terms of this agreement. See paragraph 1.C below. There
are a lot of things you can do with Project Gutenberg™
electronic works if you follow the terms of this agreement and
help preserve free future access to Project Gutenberg™
electronic works. See paragraph 1.E below.

You might also like