Page Scroll To Id WordPress Tutorial

web design

Page scroll to id for WordPress

Page scroll to id
is a fully featured WordPress plugin for creating links that scroll the page smoothly to any id within the document. The plugin replaces browser’s “jumping” behavior with a smooth scrolling animation, when links with href value containing
are clicked.
It provides all the basic tools and advanced functionality for single-page websites, in-page navigation, back-to-top links etc. with features like: adjustable scrolling animation duration and easing, link and target highlighting via ready-to-use CSS classes, vertical and/or horizontal scrolling, scrolling from/to different pages etc.

Get started

The plugin works by “connecting” links with href/URL in the form of
to sections/elements within the document with an equivalent id attribute value (e.g.
<div id="my-id">...</div>). Clicking such links will scroll the page smoothly to their incaran id position.

Get started by creating or setting-up your links. The plugin is enabled by default on WordPress Menu links (created in Appearance → Menus), so you can berangkat adding custom links and set their URL to the id/incaran you want to scroll to (e.g.
You can use id values that already exist in your theme or you can create your own id targets using plugin’s “Insert Page scroll to id target” button in wp post visual editor or the
shortcode (e.g.
[ps2id id='my-id'/]).

To create links within your content, use plugin’s “Insert/edit Page scroll to id link” button and/or shortcode (e.g.
[ps2id url='#my-id']link text[/ps2id]) in wp post optis/text editor.
To enable the plugin on existing links, add the
class or the
rel attribute to them, making sure the link’s href/URL value contains a hash (#) with the id of the section you want to scroll-to. In addition, you can simply add your links CSS selector (e.g.
.menu-item a,
etc.) in “Selector(s)” field in plugin settings.

To highlight your links (or targets), use the classes provided by the plugin in your theme’s stylesheet or custom CSS. The default highlight class is
but you can set your own in the “Classes & highlight options”. For example, to style the highlighted link (the link whose incaran element is considered to be within the viewport), you could add in your CSS:

a.mPS2id-highlight{      background: #ff0;  }


.menu-item a.mPS2id-highlight{      background: #ff0;  }

for highlighting custom menus links only.

If you have a fixed-positioned/sticky menu which overlaps your target’s content when page scrolling is completed, insert your menu CSS selector or a fixed pixel value in the “Offset” field. For example, inserting
will offset the scroll-to position according to the height/width/position of the element with id
navigation-menu. In the same manner, setting the “Offset” value to
will offset page scrolling by 100 pixels.

Plugin settings


Use the
field when you need to instruct the plugin to handle specific links. The value(s) should be anchor tags (a, i.e. links) in the form of strings that represent ways of choosing elements in the DOM (i.e. CSS selectors).
Each selector is separated by comma, so multiple selectors can be defined as:
selector1, selector2, selector3

The default selector value is
a[href*='#']:not([href='#']), meaning the plugin handles all links that have a bonafide hash value (e.g.
#id) in their URL.
The default selector value prior to version 1.6.3 of “Page scroll to id” is
a[rel='m_PageScroll2id'], meaning the plugin handles by default all anchor elements (a) with
rel attribute value.

Other selector examples could be:
(links that contain
in their href/URL attribute),
(links with href attribute value:
(links with class:

To enable the plugin on
link that has a hash (#) in its URL, insert
as a single selector.

Other default selectors which the plugin is applied automatically include the class
(actual selectors:
.ps2id > a[href*='#']
a.ps2id[href*='#']). This means that any link with a hash in its URL/href (e.g.
#my-id) which has the class or is contained (direct children) within an element with the class
will be handled by the plugin automatically.

To exclude specific links from being handled by the plugin (e.g. special tabs, accordions, toggles etc.), use the
selectors are excluded
field by adding the element selector(s) you want (separated by comma). The default excluded selectors value is set to:
a[href^='#tab-'], a[href^='#tabs-'], a[data-toggle]:not([data-toggle='tooltip']), a[data-slide], a[data-vc-tabs], a[data-vc-accordion], a.screen-reader-text.skip-link
which excludes most links that are used for toggling elements, tabs, accordions etc.

You can add your owns electors to exclude by separating each one with comma (,), for example:
a[href^='#tab-'], a[data-toggle], a.some-class, .tabs a

The option (enabled by default) enables the plugin automatically on custom links created in WordPress Menus.

Scroll duration

Scroll animation duration (i.e. scrolling speed) in milliseconds (1000 milliseconds equal 1 second). Lower values equal faster scrolling.

“Auto-adjust scrolling duration”
option (enabled by default) lets the plugin fine-tune scrolling duration/speed according to korban and page scroll position. This normalizes the animation duration in order to avoid short-distance scrolling taking too long (e.g. a page scroll of just 100 pixels will last shorter than the value specified in “Scroll duration”).

Scroll type/easing

Scroll animation easing type (i.e. the way the animation progresses at different points within its duration).
You can set different easing types according to page scrolling state: one that is applied when the page is idle (no scrolling currently running) and another that applies while page is scrolling (when a link is clicked while the page is animated/scrolling).
“Force scroll type/easing”
option when there’s conflict with outdated easing libraries added by themes or other plugins.

Scroll duration and easing demo

Scroll behavior

Always scroll smoothly when reaching the end of the page/document
option adjusts scroll-to position so it does not exceed document length. For example, when scrolling to a target element that is at the bottom of the page, the scrolling animation stops smoothly at bottom of the page instead of “breaking” at an earlier point.
Stop page scrolling on mouse-wheel or touch-swipe
option if you want to stop page scrolling when the user tries to scroll the page manually (e.g. via mouse-wheel or touch-swipe).
Verify sasaran position and readjust scrolling (if necessary), after scrolling animation is complete
option, will auto-correct scrolling if the mangsa’s position was changed while the page was scrolling. This event will fire one time only after scrolling animation is complete. This option is useful when document’s length changes according to scroll (for example when a menu becomes sticky after scrolling down the page and its previous state space gets zero).
“Extend sasaran position verification and scrolling adjustment for lazy-load scripts (images, iframes etc.) and changes in document’s length”
when dealing with lazy-loaded images and iframes, changes in document’s length etc.

Page layout

Set page scrolling direction (i.e. restrict scrolling) to top-bottom (vertical) or left-right (horizontal) accordingly. For both vertical and horizontal scrolling select auto.
This option does
transform your theme’s templates layout (i.e. it won’kaki langit change your theme/page design from vertical to horizontal).


Offset scroll-to position by x amount of pixels or by selector. The offset value can a be a positive or negative number (indicating pixels), or a matching set of elements in your html (selector). For example, setting the value to
will stop page scrolling 50 pixels before reaching the target.
If you need to offset scrolling according to the height (or width) of some element (e.g. according to a responsive/sticky navigation menu), insert the element’s selector in the Offset field. For example, if you have a top fixed/sticky menu with id
navigation-menu, set the offset value to
in bestelan to stop page scrolling below it and avoid the menu overlapping your content.

To set different vertical and horizontal offsets (e.g. when Layout is set to auto), add comma separated values in Offset field, e.g.
(vertical offset 100 pixels, horizontal offset 50 pixels).

The plugin offers selector expressions in order to define more advanced offset values. Examples:

  • :fixed and :sticky expressions
    – Offset by element with id “some-id” and CSS position fixed or sticky:

    Assuming vertical layout, the value above will offset scrolling according to the height of
    element (i.e. the element that has id
    some-id), but
    when this element CSS position is fixed or sticky (i.e. when element is sticks to the viewport when scrolling the page). This is useful when for example you have a navigation menu that is sticky/fixed only above a specific viewport size (e.g. only on desktop).
  • :height() expression
    – Offset by element with class “some-class” and height equal to 100 pixels:

    The value above will offset scrolling according to the height (on vertical layout) of
    element (i.e. the element that has class
    some-class), but
    when this element height is exactly 100 pixels.
  • :width() expression
    – Offset by element with id “some-id” and width greater than 800 pixels:

    The value above will offset scrolling according to the height of
    element, but
    when this element width is greater than 800 pixels. This is useful when having responsive navigation menus. For instance, you might have a responsive top sticky menu that switches to a “hamburger” menu when viewport is 800 pixels wide or less. Assuming the menu is as wide as the page/viewport, you’d only want to apply its height as offset when its width is greater than 800 pixels (i.e. when it’s titinada “hamburger” menu). Adding:
    as the offset value will do exactly that.
  • Multiple expressions
    – Offset by element with id “some-id”, CSS position fixed and height between 50 and 100 pixels:

    The value above will offset scrolling according to the height of
    element, but
    when this element CSS position is fixed and its height is anywhere between 51 and 99 pixels.

The plugin can generate automatically a hidden element that can be used as the offset selector. If you enable
Auto-generate #ps2id-dummy-offset element
option, you can use the
as the “Offset” option value and then in your CSS by giving it a height equal to the amount of offset you want.

For example, say you want to have an offset of 100 pixels on desktop and 50 pixels on smaller screens (i.e. mobile). You should enable the
Auto-generate #ps2id-dummy-offset element
option, set the value
in the “Offset” option field and add the following to your CSS:

#ps2id-dummy-offset{   height: 50px; } @alat angkut only screen and (min-width: 768px){   #ps2id-dummy-offset{     height: 100px;   } }

Highlight selector(s)

The matching set of elements (i.e. selectors) handled by the plugin, that will be eligible for highlighting. The value(s) should be anchor tags (a, i.e. links).

The plugin highlights by default all the links it handles. Using this field, you can specify which links should be highlighted and exclude the rest.
For example, assuming you have various links that scroll the page (e.g. menu links, back-to-top etc.) and you want only the menu links to get highlighted, you could insert:
.menu-item a[href*='#']

Classes & highlight options

The plugin adds special classes to the links and the target elements it handles when the following happen:

  • When a link is clicked, it gets the

    You can change this class name to your own and you can use it in your CSS to style the clicked link. For instance:

    .mPS2id-clicked{      background: #ff0;  }
  • When a link’s target element is within the viewport (i.e. visible on the screen), the link gets the
    class and the objek element gets the

    You can change these class names to your own and you can use them in your CSS to style the highlighted link and target. For instance:

    .mPS2id-target{      background: #ff0;  }
    .mPS2id-highlight{      background: #ff0;  }

In addition, the plugin will add the above highlight classes with the
suffix (e.g.
mPS2id-highlight-last) in order to differentiate multiple highlighted elements. This is useful when you need to style only the first or last of the highlighted links or targets in your CSS.
For example, if multiple links are highlighted at the same time, instead of using
in your stylesheet, you could do:

.mPS2id-highlight-first{      background: #ff0;  }

An alternative way of restricting highlight to a single link/target and prevent multiple elements from being highlighted at the same time, is to enable
Allow only one highlighted element at a time.

There are times when you need to keep at least one element (e.g. a menu link) always highlighted. Enable
Keep the current element highlighted until the next one comes into view
option if you need such functionality/behavior and your template/page is laid out in a way that at certain scrolling points there are no target sections visible on the screen (no links highlighted).

Highlight by next objek
option when your objek elements have nihil height/width to improve highlighting behavior. This option is useful when you add id targets in your content via plugin’s buttons or the
[ps2id id='some-id'/]
shortcode, as it extends the scrolling range at which an element stays highlighted.

Disable plugin below

Set the viewport/screen-size in pixels, below which the plugin will be disabled. The value can be
For example, insert
to disable plugin’s functionality when the viewport/window width is 1024 pixels or less. Insert
to disable plugin when viewport width is 1024 pixels or less
viewport height is 600 pixels or less.
Please note that the values entered will match CSS sarana queries.

Leaving the field value empty or
(default) disables the option.


Display widgets id attribute
in bestelan to show the id attribute of each widget in Appearance → Widgets. This is a convenient way of finding existing id values in kiriman to use them as links targets.
You can also create your own id targets in widgets via the “Page scroll to id incaran” widget.

Enable insert link/korban buttons in post visual penyunting
activates plugin’s buttons in WordPress visual editor toolbar. You can use these buttons to insert links and id targets in your content.

Advanced options

If another plugin or a theme script handles page scrolling and conflicts with “Page scroll to id”, try enabling
Prevent other scripts from handling plugin’s links
option. This option attempts to remove (on-the-fly) javascript click events by other scripts from the links. Please note that this might not work on some themes or plugins, as it depends on the way those scripts are attaching the link events.
You may set a specific selector for the option above using the
Prevent other scripts from handling plugin’s links selector(s)
field (it’s recommended to set a specific selector when using the “Prevent other scripts from handling plugin’s links” option).

Normalize anchor-point targets
to normalize/reset the CSS properties (height, line-height, border etc.) of anchor-point targets.

Encode unicode characters on links URL
when having links with encoded unicode characters (e.g. on internationalized domain names) in their href/URL (for proper highlighting of links).

wp-config options

define('PS2ID_MINIFIED_JS', false);

Use the
constant (permanent global variable) in wp-config.php to select which script files will be loaded on the front-end by the plugin. Adding the above in wp-config.php instructs the plugin to load the non-minified/development version of its scripts.

Divi WordPress Theme
Monarch Social Sharing Plugin

Plugin shortcodes

shortcode can be inserted directly in WordPress post editor (as with any WordPress shortcode) in order to create links and id targets in your content.

[ps2id url='#some-id']link text[/ps2id]


  • url
    (required) – Link URL


    [ps2id url='#some-id']link text[/ps2id] [ps2id url='']link text[/ps2id] [ps2id url='/page/#some-id']link text[/ps2id]
  • offset
    (optional) – Link-specific offset (bypasses the general offset value in plugin settings)


    Offset scrolling by 100 pixels

    [ps2id url='#some-id' offset='100']link text[/ps2id]

    Offset scrolling by the height (or width for horizontal layout) of the element with id

    [ps2id url='#some-id' offset='#navigation-menu']link text[/ps2id]

    Offset vertical scrolling by 100 pixels and horizontal scrolling by 50 pixels

    [ps2id url='#some-id' offset='{"y":"100","x":"50"}']link text[/ps2id]
  • class
    (optional) – Link custom class(es)

    You can give the link one or more custom classes (separate multiple classes with space).


    [ps2id url='#some-id' class='class-a']link text[/ps2id] [ps2id url='#some-id' class='class-a class-b']link text[/ps2id]

    You can change the scroll duration/speed of the link (bypass the general scroll duration value in plugin settings) by adding a special class in the form of
    ps2id-speed-600) with
    indicating the scroll duration in milliseconds (lower duration equals faster scrolling).


    [ps2id url='#some-id' class='ps2id-speed-400']link text[/ps2id] [ps2id url='#some-id' class='ps2id-speed-1300 class-a class-b']link text[/ps2id]

Target id shortcode

There are 2 target shortcodes:

1. Anchor-point objek

[ps2id id='some-id'/]

2. Wrapper target

[ps2id_wrap id='some-id'] your content... [/ps2id_wrap]

You can use the wrapper mangsa ([ps2id_wrap]) when you need to wrap content in a target id (same as adding an id attribute to some content). Doing this gives you better control over the highlighting of associated links.
In addition, wrapper incaran allows you to include other shortcodes within its content, e.g.

[ps2id_wrap id='some-id'] content... [ps2id url='#another-id']link text[/ps2id]  more content... [ps2id id='another-id'/] content...  [/ps2id_wrap]


  • id
    (required) – Target id


    [ps2id id='some-id'/] [ps2id_wrap id='some-id'] your content... [/ps2id_wrap]
  • target
    (optional) – The element that’ll be considered as the actual target for highlighting

    This can be useful when you need better highlighting for korban elements that have hampa dimensions.

    The associated link will scroll to
    element but will be highlighted as if its target is the next adjacent div (the div immediately following

    [ps2id id='some-id' target='#some-id + div'/]

    The associated link will scroll to
    element but will be highlighted according to

    [ps2id id='some-id' alamat='#another-id'/]

Previous versions

  • 1.7.4
  • 1.7.3
  • 1.7.2
  • 1.7.1
  • 1.7.0
  • 1.6.9
  • 1.6.8
  • 1.6.7
  • 1.6.6
  • 1.6.5
  • 1.6.4
  • 1.6.3
  • 1.6.2
  • 1.6.1
  • 1.6.0
  • 1.5.9
  • 1.5.8
  • 1.5.7
  • 1.5.6
  • 1.5.5
  • 1.5.4
  • 1.5.3
  • 1.5.2
  • 1.5.1
  • 1.5.0
  • 1.2

Development version: