public
Last active

Debug WordPress 404 issues (permalinks, rewrite rules, etc.)

  • Download Gist
gistfile1.aw
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
/* Produces a dump on the state of WordPress when a not found error occurs */
/* useful when debugging permalink issues, rewrite rule trouble, place inside functions.php */
 
ini_set( 'error_reporting', -1 );
ini_set( 'display_errors', 'On' );
 
echo '<pre>';
 
add_action( 'parse_request', 'debug_404_rewrite_dump' );
function debug_404_rewrite_dump( &$wp ) {
global $wp_rewrite;
 
echo '<h2>rewrite rules</h2>';
echo var_export( $wp_rewrite->wp_rewrite_rules(), true );
 
echo '<h2>permalink structure</h2>';
echo var_export( $wp_rewrite->permalink_structure, true );
 
echo '<h2>page permastruct</h2>';
echo var_export( $wp_rewrite->get_page_permastruct(), true );
 
echo '<h2>matched rule and query</h2>';
echo var_export( $wp->matched_rule, true );
 
echo '<h2>matched query</h2>';
echo var_export( $wp->matched_query, true );
 
echo '<h2>request</h2>';
echo var_export( $wp->request, true );
 
global $wp_the_query;
echo '<h2>the query</h2>';
echo var_export( $wp_the_query, true );
}
add_action( 'template_redirect', 'debug_404_template_redirect', 99999 );
function debug_404_template_redirect() {
global $wp_filter;
echo '<h2>template redirect filters</h2>';
echo var_export( $wp_filter[current_filter()], true );
}
add_filter ( 'template_include', 'debug_404_template_dump' );
function debug_404_template_dump( $template ) {
echo '<h2>template file selected</h2>';
echo var_export( $template, true );
echo '</pre>';
exit();
}

There is a single quote missing in line 19.

@marlonlamancio, fixed, thanks! :)

Very useful, thanks!

Was also getting 404 error I found this little nugget in the Centos 6 httpd.conf under the section. Just hit page down like 2 or three times and you will find this. I made a quick article here with more details.

http://www.mobiledataup.com/fix-wordpress-permalink-404-error-with-centos-6/

#AllowOverride controls what directives may be placed in .htaccess files.

It can be “All”, “None”, or any combination of the keywords:

Options FileInfo AuthConfig Limit

#
AllowOverride none

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.