diff --git src/wp-admin/css/forms.css src/wp-admin/css/forms.css
index 1472dd9..644adb0 100644
--- src/wp-admin/css/forms.css
+++ src/wp-admin/css/forms.css
@@ -940,6 +940,22 @@ table.form-table td .updated p {
 	vertical-align: middle;
 }
 
+.form-table.permalink-structure .available-shortcode-tags li {
+	float: left;
+	margin-right: 5px;
+}
+
+.form-table.permalink-structure .available-shortcode-tags button {
+	background: none;
+	border: none;
+	padding: 0;
+}
+
+.form-table.permalink-structure .available-shortcode-tags code {
+	margin: 0;
+	cursor: pointer;
+}
+
 /*------------------------------------------------------------------------------
   21.0 - Network Admin
 ------------------------------------------------------------------------------*/
diff --git src/wp-admin/js/common.js src/wp-admin/js/common.js
index 200d3e4..272e467 100644
--- src/wp-admin/js/common.js
+++ src/wp-admin/js/common.js
@@ -175,6 +175,23 @@ $('.contextual-help-tabs').delegate('a', 'click', function(e) {
 	panel.addClass('active').show();
 });
 
+/**
+ * Custom permalink structures.
+ */
+$( '.form-table.permalink-structure .available-shortcode-tags button' ).on( 'click', function( e ) {
+	var $permalinkStructure = $( '#permalink_structure' ),
+	    textToAppend        = $( this ).find( 'code' ).text() + '/';
+
+	e.preventDefault();
+
+	$( '#custom_selection' ).prop( 'checked', true );
+
+	if ( '/' !== $permalinkStructure.val().substr( -1 ) ) {
+		textToAppend = '/' + textToAppend;
+	}
+	$permalinkStructure.val( $( '#permalink_structure' ).val() + textToAppend );
+} )
+
 $document.ready( function() {
 	var checks, first, last, checked, sliced, mobileEvent, transitionTimeout, focusedRowActions,
 		lastClicked = false,
diff --git src/wp-admin/options-permalink.php src/wp-admin/options-permalink.php
index b6c52c5..c2e3641 100644
--- src/wp-admin/options-permalink.php
+++ src/wp-admin/options-permalink.php
@@ -206,6 +206,38 @@ $structures = array(
 		<td>
 			<code><?php echo get_option('home') . $blog_prefix; ?></code>
 			<input name="permalink_structure" id="permalink_structure" type="text" value="<?php echo esc_attr($permalink_structure); ?>" class="regular-text code" />
+			<p>
+				<?php
+				$available_tags = array(
+					'%year%'     => __( 'The year of the post, four digits, for example 2004' ),
+					'%monthnum%' => __( 'Month of the year, for example 05' ),
+					'%day%'      => __( 'Day of the month, for example 28' ),
+					'%hour%'     => __( 'Hour of the day, for example 15' ),
+					'%minute%'   => __( 'Minute of the hour, for example 43' ),
+					'%second%'   => __( 'Second of the minute, for example 33' ),
+					'%post_id%'  => __( 'The unique ID of the post, for example 423' ),
+					'%postname%' => __( 'The sanitized post title (slug)' ),
+					'%category%' => __( 'Category slug. Nested sub-categories appear as nested directories in the URI.' ),
+					'%author%'   => __( 'A sanitized version of the author name.' ),
+				);
+
+				/**
+				 * Filters the list of available permalink structure tags on the Permalinks settings page.
+				 *
+				 * @since 4.7.0
+				 *
+				 * @param array $available_tags A key => value pair of available permalink structure tags.
+				 */
+				$available_tags = apply_filters( 'available_permalink_structure_tags', $available_tags );
+
+				_e( 'Available tags:' );
+				echo '<ul class="available-shortcode-tags">';
+				foreach ( $available_tags as $tag => $explanation ) {
+					printf( '<li><button><code>%1$s</code><span class="screen-reader-text">%2$s</span></button></li>', $tag, $explanation );
+				}
+				echo '</ul>';
+				?>
+			</p>
 		</td>
 	</tr>
 </table>
