Adds a new widget type you can deploy in your sidebar regions (and/or elsewhere) to display section-based navigation, along with the ability to exclude certain pages from showing up.
The title of the widget is the top level page within the current section. The widget then can show all of the page’s published siblings (except on the top level page), all parents and grandparents (and higher), the siblings of all parents and grandparents (up to top level page), and any immediate children of the current page. It can also be called by a function inside template files.
It includes a simple widget configuration panel. From this panel you can:
- Determine whether the widget should appear on the home page
- Override standard behavior and have the widget show all pages in the current section
- Determine whether the widget should appear even if the section only has one page (the top level)
- Provide a list of pages to exclude from the output
- Determine whether the section navigation should still appear when viewing excluded pages
- Use a specific widget title (i.e. In This Section), or just use the top level page title
- Determine whether the section title should be linked
- Determine page sort order (defaults to menu order)
The widget uses standard WordPress navigation classes, in addition to a unique class around the widget, for easy styling. The UL of the page list also has a custom class,
bsn-list, that can be altered via the
Beginning with version 1.5, Better Section Navigation also incorporates the features of the defunct Exclude Pages plugin, giving you the ability to selectively exclude specific pages from appearing in the widget generated by Better Section Navigation. This per-page control is managed via a metabox on the post edit screen. Note: On activation, BSN will automatically import the list of “excluded pages” set via that plugin, so you don’t have to manually re-assign excludes pages before deactivating the old one.
Compatible with WordPress Multisite.
This plugin started life as Simple Section Navigation Widget, but since that plugin hasn’t been updated in a while, we’ve taken up the reins with the goal of keeping it up to date with the latest WordPress conventions (i.e. getting rid of deprecation warnings) and adding a few nice-to-have features while retaining some of the simplicity of the original plugin.
Simple Section Navigation Widget is incompatible with PHP 8.x, so as of October 2022, Better Section Navigation is now a drop-in replacement for Simple Section Navigation Widget. If you’ve been using Simple Section Navigation, you can now use this one instead without changing any settings! NOTE: Deactivate Simple Section Navigation Widget before activating Better Section Navigation.
- Install easily with the WordPress plugin control panel or manually download the plugin and upload the extracted folder to the
- Activate the plugin through the ‘Plugins’ menu in WordPress
- Widget users can add it to the sidebar by going to the “Widgets” menu under “Appearance” and adding the “Better Section Navigation” widget. Open the widget to configure.
- Template authors can call the navigation by using the
better_section_navfunction. The function accepts a single argument in the form of a classic WordPress set of parameters.
- Users who want to display section navigation without adding a widget or editing a template can use the
Can I embed this via a Gutenberg block instead of a widget?
At this time there is no Block nor any plan to create one. Instead, use the shortcode block to embed within a block editor page.
Can I embed this via a shortcode instead of a widget?
Yes, you may use the
[better-section-nav]shortcode. This example will will wrap the widget in LI tags, exclude page ID 2, and will output on home page:
[better-section-nav before_widget="<li>" after_widget="</li>" exclude="2" show_on_home="1"]
Can I hard-code this into a PHP template instead of a widget?
Yes, you may call the
better_section_navfunction, which accepts a single argument in the form of a classic WordPress parameter set like so:
<?php better_section_nav('before_widget=<li>&after_widget=</li>&exclude=2&show_on_home=1'); ?>
What parameters are available for shortcodes/function calls?
Here’s the complete list:
show_all– Always show all pages in current section (default: false)
exclude– Page IDs, seperated by commas, of pages to exclude (default: ”)
hide_on_excluded– No navigation on excluded pages (default: true)
show_on_home– Show top level page list on home page (default: false)
show_empty– Output even if empty section (default: false)
sort_by– Page sort order; can use any WordPress page list sort value
title– Provide a specific widget title; default is the top level page title
a_heading– Show all pages in section (default: false)
before_widget– HTML before widget (default:
after_widget– HTML after widget (default:
before_title– HTML before widget (default:
after_title– HTML after widget (default:
Contributors & Developers
“Better Section Navigation Widget” is open source software. The following people have contributed to this plugin.Contributors
Translate “Better Section Navigation Widget” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
- Add full backward compatibility for Simple Section Navigation. Better Section Navigation is now a drop-in replacement.
- Eliminating warning-level error regarding undefined nonces in the admin.
- Correcting bad link in admin; bumping tested-up-to WP version.
- Fix a bug that prevented the [better-section-nav] shortcode from displaying.
- Fix a potential fatal error caused by calling the wp_kses() function with an incorrect number of arguments.
- Attempt to fix fatal error where is_plugin_active() is called before it’s defined.
- Introduced a CSS class specific to the UL in the widget, filterable with
- Rolled the functionality of the dormant Exclude Pages plugin so individual pages can be suppressed from appearing in widgets.
- Fixed a bug that caused a fatal “Can’t use function return value in write context” error under PHP < 5.5.
- Fixed a bug that caused the “Show all pages in section” checkbox in the
widget settings to do the opposite of what it was supposed to do.
- Forked from Simple Section Navigation Widget.
See that plugin’s changelog for earlier changes.
- Cleaned up deprecated function calls.
- Added a shortcode to allow users to display the section nav widget without
editing any template files.