Title: WP MyLinks
Author: Walter Pinem
Published: <strong>June 2, 2020</strong>
Last modified: August 19, 2026

---

Search plugins

![](https://ps.w.org/wp-mylinks/assets/banner-772x250.png?rev=3655160)

![](https://ps.w.org/wp-mylinks/assets/icon.svg?rev=3655160)

# WP MyLinks

 By [Walter Pinem](https://profiles.wordpress.org/walterpinem/)

[Download](https://downloads.wordpress.org/plugin/wp-mylinks.1.1.0.zip)

 * [Details](https://test.wordpress.org/plugins/wp-mylinks/#description)
 * [Reviews](https://test.wordpress.org/plugins/wp-mylinks/#reviews)
 *  [Installation](https://test.wordpress.org/plugins/wp-mylinks/#installation)
 * [Development](https://test.wordpress.org/plugins/wp-mylinks/#developers)

 [Support](https://wordpress.org/support/plugin/wp-mylinks/)

## Description

### Build a fully customizable micro landing page for your business and personal brand.

[**WP MyLinks**](https://www.onlinestorekit.com/wp-mylinks/) can help you create
a micro landing page that contains all the links you want to share to your audience
with the tool you’re currently using and the domain name that reflects your own 
brand.

> One link that holds everything you share.

Every social profile gives you a single link in the bio, and fitting more than one
link into it usually means renting a page on someone else’s platform. WP MyLinks
turns that one link into a page you own, holding every link, video, and product 
your audience needs, on your own domain.

#### Stop renting your most-clicked link.

A link-in-bio page is often the busiest URL you have, and on a hosted service that
URL, its analytics, and its search value belong to the platform.

WP MyLinks builds the same page inside your WordPress site, at an address like `
yoursite.com/me`, with your branding and no subscription. Every feature is free.

#### Keep 100% of your traffic.

Put your MyLink URL in every bio and profile, and drive all of that traffic to a
page on your own domain instead of a platform’s. Clicks are counted in your own 
dashboard, and no visitor data ever leaves your site.

### The Awesome Features You’ll Love

 * **[New in 1.1.0]**: **Section headings**. Group your links under headings like“
   Store” or “Upcoming Events”, add a row, set its type to Heading, and drag it 
   into place. Headings adapt to every theme.
 * **[New in 1.1.0]**: **Search / filter bar**. Turn on a search box above the links
   so visitors can filter a long list by typing. Section headings hide automatically
   when their links are filtered out.
 * **[New in 1.1.0]**: **HTML blocks**. Add a row for a newsletter form, a table,
   or any embed, right between your links. Raw scripts and iframes are kept only
   for users allowed to post unfiltered HTML.
 * **[New in 1.1.0]**: **Custom font family**. Name any font already available on
   your site, globally or per page. WP MyLinks never loads fonts from third parties,
   so your visitors’ data stays private.
 * **[New in 1.1.0]**: **Icon-font classes for social links**. Use an icon class
   from an icon font your site already loads (e.g. `fa-brands fa-github`) instead
   of uploading an image.
 * **[New in 1.1.0]**: **Google Tag Manager friendly**. Every link click pushes 
   a `wp_mylinks_click` event to the dataLayer when GTM is present, no custom JavaScript
   needed.
 * **[New in 1.1.0]**: **Per-link click counter**. See how many times each link 
   gets clicked, with a Clicks column right on the MyLinks list, no external analytics
   required, no visitor data collected.
 * **[New in 1.1.0]**: **QR code for every page**. A QR Code box on the editor generates
   a scannable code for your page’s URL, entirely in your browser, with one-click
   PNG download, perfect for business cards, menus, and posters.
 * **[New in 1.1.0]**: **Accent colors**. Override any theme’s page background, 
   button colors, and text color, globally or per page, with simple color pickers.
   Every one of the 16 themes respects them.
 * **[New in 1.1.0]**: **Crisp SVG social icons**. The 8 default social icons are
   now scalable brand-colored SVGs that look sharp on every screen and every theme.
   Your custom uploaded icons keep working unchanged.
 * **[New in 1.1.0]**: **Pick your Link URL sources**. Choose which post types the
   Link URL search pulls from, Posts, Pages, and WooCommerce Products by default,
   and it searches your whole site so any of them is one click away. Link Collections
   are always included.
 * **[New in 1.1.0]**: **Lighter and faster**. The bundled CMB2 framework has been
   replaced by the plugin’s own fields system, the download shrank from 4.3 MB to
   under 1 MB, with zero migration and no data changes.
 * **[New in 1.0.8]**: **Schema.org JSON-LD output**. Pick `Person` or `Organization`
   schema globally or per page so search engines can identify you. Defers to Yoast
   SEO automatically when Yoast is handling schema.
 * **[New in 1.0.8]**: **Open Graph & Twitter Card meta tags**. Share previews on
   Facebook, X (Twitter), LinkedIn, and Discord now look correct. Configure a default
   1200×630 share image globally, or override it per page.
 * **[New in 1.0.8]**: **Additional Social Platforms metabox**. Add Threads, Bluesky,
   GitHub, Mastodon, WhatsApp, Telegram, Signal, or any other platform via a flexible
   repeater, alongside the existing 8 hardcoded platforms.
 * **[New in 1.0.8]**: **WCAG 2.2 accessibility**. Skip-to-content link, ARIA labels
   on every social icon and link button, “opens in new tab” hints for screen readers,
   and graceful avatar alt fallbacks.
 * **[Feature]**: **Enhanced Media Embedding (oEmbed)**. In addition to embedding
   YouTube videos, you can seamlessly embed media from any site supported by WordPress.
 * **[Feature]**: **Organized Link Collections**. Easily save and access important
   links in a dedicated collections page, eliminating the need to repeatedly enter
   the same links manually.
 * **[Feature]**: **Searchable Link Lists**. The Link input field includes a search
   function, allowing you to find previously defined links from your Links Collection,
   existing posts, or pages by default.
 * **[Feature]**: **YouTube video embed**. Easily embed any YouTube video on your
   MyLinks page. [**Demo here**.](https://walterpinem.com/i/)
 * **[Feature]**: **Card layout**. Transform any link into a card layout with the
   image as background. [**Demo here**.](https://walterpinem.com/i/)
 * **One Link for Everything**: Set a MyLink page and show all the important links.
   Get the MyLink page URL and place it anywhere.
 * **Unlimited Landing Pages**: Easily target your audience by building unlimited
   custom landing pages for every channel wherever you want to engage them.
 * **Unlimited Links**: Fill your landing page(s) with links to market your contents,
   products, or anything you want to build your own brands.
 * **Add Thumbnails**: Add a thumbnail to each link that best represents it.
 * **And more awesome features to come!**

> For more info, please refer to [WP MyLinks Introduction](https://walterpinem.me/projects/introducing-wp-mylinks/).
> 
> For Indonesian users, please refer to [WP MyLinks](https://www.seniberpikir.com/wp-mylinks/)
> instead. New to WP MyLinks? Read the full [documentation](https://www.onlinestorekit.com/docs/wml/)
> for setup guides and every feature.

### **Watch the Complete Overview and Tutorial**

It’s really easy to get started. Here’s the complete overview and tutorial:

### Theme Demos

 * [Default](https://walterpinem.me/projects/mylinks/default/)
 * [Merbabu](https://walterpinem.me/projects/mylinks/merbabu/)
 * [Cikuray](https://walterpinem.me/projects/mylinks/cikuray/)
 * [Ciremai](https://walterpinem.me/projects/mylinks/ciremai/)
 * [Slamet](https://walterpinem.me/projects/mylinks/slamet/)
 * [Papandayan](https://walterpinem.me/projects/mylinks/papandayan/)
 * [Sindoro](https://walterpinem.me/projects/mylinks/sindoro/)
 * [Krakatau](https://walterpinem.me/projects/mylinks/krakatau/)
 * [Bromo](https://walterpinem.me/projects/mylinks/bromo/)
 * [Prau](https://walterpinem.me/projects/mylinks/prau/)
 * [Polos](https://walterpinem.me/projects/mylinks/polos/)
 * [Datar](https://walterpinem.me/projects/mylinks/datar/)
 * [Pastel](https://walterpinem.me/projects/mylinks/pastel/)
 * [Kopi Hitam](https://walterpinem.me/projects/mylinks/kopi-hitam/)
 * [Kopi Susu](https://walterpinem.me/projects/mylinks/kopi-susu/)
 * [Klepon Viral](https://walterpinem.me/projects/mylinks/klepon/)

### Further Questions and Feature Requests?

Premium-quality support without having to spend a dime. Just send your inquiry or
feature request on [Online Store Kit Support](https://www.onlinestorekit.com/support/)
and I’ll gladly help you out.

## Screenshots

[⌊A published MyLink page, one URL for all your links, on your own domain⌉⌊A published
MyLink page, one URL for all your links, on your own domain⌉[

A published MyLink page, one URL for all your links, on your own domain

[⌊The MyLink editor: profile, social platforms, and unlimited sortable links⌉⌊The
MyLink editor: profile, social platforms, and unlimited sortable links⌉[

The MyLink editor: profile, social platforms, and unlimited sortable links

[⌊The redesigned settings, General tab with themes, accent colors, meta tags, and
structured data⌉⌊The redesigned settings, General tab with themes, accent colors,
meta tags, and structured data⌉[

The redesigned settings, General tab with themes, accent colors, meta tags, and 
structured data

[⌊The Welcome tab with quick start, tutorial video, and troubleshooting⌉⌊The Welcome
tab with quick start, tutorial video, and troubleshooting⌉[

The Welcome tab with quick start, tutorial video, and troubleshooting

[⌊QR code generation right on the editor, with one-click PNG download⌉⌊QR code generation
right on the editor, with one-click PNG download⌉[

QR code generation right on the editor, with one-click PNG download

## Installation

4 simple steps to get started:

 1. Install and activate this plugin via dashboard or upload `wp-mylinks` folder into
    the `/wp-content/plugins/` directory.
 2. Begin configurating this plugin through `MyLinks` admin menu.
 3. Add links using `Add New` sub-menu.
 4. Complete the configuration and you’re all set!

## FAQ

### Is it free to use?

Definitely free to use for unlimited sites! 🙂

### How to install and use WP MyLinks?

4 simple steps to start:

 1. Install and activate this plugin via dashboard or upload `wp-mylinks` folder into
    the `/wp-content/plugins/` directory.
 2. Begin configurating this plugin through `MyLinks` admin menu.
 3. Add links using `Add New` sub-menu.
 4. Complete the configuration and you’re all set!

### How many micro landing pages can I create?

Unlimited 🙂

### How many links can I put in the page?

Unlimited 🙂

### I entered an icon class but no icon shows. Why?

The Icon Class field on Additional Social Platforms outputs the class you enter,
but WP MyLinks does not load an icon font for you. The icon appears only if that
icon font (Font Awesome, Bootstrap Icons, etc.) is already loaded on your site by
your theme or another plugin. Load the icon font first, or upload an image instead,
an uploaded image always takes priority over a class.

### I set a Font Family but the font didn’t change. Why?

The Font Family field applies a font that is already available on your site; WP 
MyLinks does not fetch fonts from third parties, on purpose, to keep your visitors’
data private. To use a web font, load it through your theme or paste an `@font-face`/`@
import` into the Custom Styles (Custom CSS) field on the Scripts tab, then enter
the font’s family name in the Font Family field.

### What if I get 404 not found?

As of version 1.0.8, the plugin automatically flushes rewrite rules on activation
and after every update, so 404 errors after upgrading should be a thing of the past.
If you do still see a 404:
 1. Go to Settings => Permalinks page. 2. Click the Save
Changes button without having to change anything. 3. Recheck your MyLink page. The
issue will most likely disappear. If the problem persists, please make sure you 
are using pretty permalinks (Post name) under Settings => Permalinks. Be careful
when changing your permalink structure: it affects every URL on your site and can
hurt SEO.

### I have a Page or Post with the same slug as a MyLink. Which one wins?

The Page or Post wins. Starting in 1.0.8, the plugin only routes a slug-only URL(
e.g. /my-page/) to a MyLink when no published page or post already owns that slug.
This prevents the plugin from accidentally taking over URLs that belong to the rest
of your site. Rename the MyLink slug to resolve the conflict.

### Can I change the /mylink/ slug used internally?

Yes. Use the `wp_mylinks_cpt_rewrite_slug` filter to override the slug. Public URLs
are still served at // regardless. Example:
 add_filter( ‘wp_mylinks_cpt_rewrite_slug’,
function() { return ‘bio’; } );

### Does WP MyLinks work with Yoast SEO?

Yes. Yoast remains the source of truth on any page where it has set its own meta
title, description, Open Graph image, or schema. WP MyLinks detects Yoast at runtime
and steps aside automatically, no double tags. If Yoast is installed but you’ve 
disabled its Open Graph or schema features, WP MyLinks will fill the gap.

### Will the new Schema.org and Open Graph features change anything if I don’t enable them?

No. Both features are off by default. Existing 1.0.7 installs upgrade silently and
continue rendering exactly as before. Enable them on Settings  MyLinks  Global only
when you’re ready.

### How does the click counter work? Does it collect visitor data?

No visitor data is collected. When a visitor clicks one of your links, the browser
sends a tiny anonymous ping to your own site that increments a number, no IP addresses,
no cookies, no third parties. Obvious bots and crawlers are filtered out. You’ll
see per-page totals in the Clicks column on the MyLinks list.

### Where does the QR code come from?

It’s generated entirely inside your browser by a bundled open-source library. Your
URL is never sent to any external QR service.

### Do the accent colors replace the themes?

No, they layer on top. Leave a color empty and the theme’s own design is untouched.
Set one (globally on Settings  General, or per page on the editor) and only that
aspect is overridden.

### I’m a developer. Can I extend WP MyLinks?

Yes. The plugin exposes a documented public API, template actions, link-rendering
filters, metabox and settings-tab registration, and analytics data shapes. See the
[developer documentation](https://www.onlinestorekit.com/docs/wml/developers/) for
hooks, filters, and code examples.

### How do I add Threads, Bluesky, GitHub, or other social platforms?

The new “Additional Social Platforms” metabox on the MyLink editor (right under 
the existing Social Media metabox) lets you add any platform with a name, URL, and
optional icon. Each row appears in the same icon row as the hardcoded 8 platforms(
Facebook, Twitter, LinkedIn, Instagram, YouTube, Pinterest, TikTok, Discord). The
hardcoded platforms are preserved exactly, no migration risk.

### Where can I ask another question or feature request?

Please do not hesitate to send your inquiry through the [support form](https://www.onlinestorekit.com/support/).
Just ask!

## Reviews

![](https://secure.gravatar.com/avatar/ed7d18601d3de104e9ca596ceb5cfcd698b8fa0462c9941d56f3de4a5e4e4a5e?
s=60&d=retro&r=g)

### 󠀁[Excelente trabajo, muchas gracias](https://wordpress.org/support/topic/excelente-trabajo-muchas-gracias/)󠁿

 [santymarty](https://profiles.wordpress.org/santymarty/) August 18, 2026 1 reply

First of all, I’d like to express my thanks. The plugin is excellent; I tested it
with CSS code and a footer script, and I had a very good experience with it.

![](https://secure.gravatar.com/avatar/ad2fbb909db1b64d7a1928490f1e862ace829ff5a8788e9e225538293d5aff29?
s=60&d=retro&r=g)

### 󠀁[Solid link hub plugin, but rewrite conflict and JS workarounds hold it back](https://wordpress.org/support/topic/solid-link-hub-plugin-but-rewrite-conflict-and-js-workarounds-hold-it-back/)󠁿

 [Alex De Py](https://profiles.wordpress.org/alexnleo/) June 20, 2025

I’m running WP myLinks on WordPress 6.8.1 and here’s my experience: Pros Styling
flexibility: The plugin lets you inject custom CSS directly in its settings, so 
you can tweak fonts, colors, and layout without editing theme files. Customizable
link hub base URL: You get a dedicated hub page under a base slug of your choice(
e.g. /links/), where all your saved links are listed with thumbnails and descriptions—
no coding required. Cons Font integration is awkward. There’s no built-in field 
for Google Fonts or other webfonts—you have to enqueue them via custom JS, which
feels like overkill for a links plugin. GTM / click tracking hacks. If you want 
to send click events to Google Tag Manager, you need your own JavaScript to detect
button clicks and push data. A native hook or setting here would save a lot of work.
Rewrite-rule conflict. By default WP myLinks registers a very broad regex ([^/]+/([
^/]+)/?$) that hijacks every two-segment URL on the site, causing unexpected 404s
for pages, products, and custom post types. It requires a custom register_post_type_args
filter to scope its CPT slug properly and avoid breaking other URLs. VerdictGreat
styling control and an easy-to-set-up link hub, but the need for “JS magic” around
fonts and tracking and the critical rewrite-rule bug hold it back. Three stars until
these integrations and URL handling are made more robust.

![](https://secure.gravatar.com/avatar/10f27d2f7816485389f797b1f04af93533d750499931bd6f5cc5eb821e219a58?
s=60&d=retro&r=g)

### 󠀁[Problems with Permalinks](https://wordpress.org/support/topic/problems-with-permalinks-19/)󠁿

 [hirma](https://profiles.wordpress.org/hirma/) February 25, 2024

Using this Plugin causes errors in the permalinks. Some pages bring a 404 after 
saving links in this Plugin. You have to deregister it and save the permalinks settings
agein.

![](https://secure.gravatar.com/avatar/3dcea118e94aa0282f59cadf54f5c8cc3d01a116d43fb16f94d0c39cd0d42bb2?
s=60&d=retro&r=g)

### 󠀁[Loving it so far!](https://wordpress.org/support/topic/loving-it-so-far-20/)󠁿

 [earthnutvt](https://profiles.wordpress.org/earthnutvt/) July 20, 2023

So far this is exactly what I was looking for! So grateful someone created it.

![](https://secure.gravatar.com/avatar/27403fc1f4b7d19a53d768e03070b09da5aa7db228ddde1c47034e65f69bc5a2?
s=60&d=retro&r=g)

### 󠀁[V1.0.6 has broken my woocommerce](https://wordpress.org/support/topic/v1-0-6-has-broken-my-woocommerce/)󠁿

 [yepyip](https://profiles.wordpress.org/yepyip/) June 20, 2023

V1.0.5 is working (not perfectly) on my woocommerce but V1.0.6 is totally broken
it : url for cart, products, … are resulting a 404 error. Everything is working 
fine when reversed to V1.0.5. I have deleted the plugin, found an other solution.

![](https://secure.gravatar.com/avatar/fa571d6de13db083e03673ef7b2882628716cb714bad06c464c9f94288aa7fb6?
s=60&d=retro&r=g)

### 󠀁[amazing i love it so much](https://wordpress.org/support/topic/amazing-i-love-it-so-much/)󠁿

 [karadanvers](https://profiles.wordpress.org/karadanvers/) June 11, 2023

oh my god i love this its perfect for what i need thank you.

 [ Read all 14 reviews ](https://wordpress.org/support/plugin/wp-mylinks/reviews/)

## Contributors & Developers

“WP MyLinks” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ Walter Pinem ](https://profiles.wordpress.org/walterpinem/)

“WP MyLinks” has been translated into 2 locales. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/wp-mylinks/contributors)
for their contributions.

[Translate “WP MyLinks” into your language.](https://translate.wordpress.org/projects/wp-plugins/wp-mylinks)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/wp-mylinks/), check
out the [SVN repository](https://plugins.svn.wordpress.org/wp-mylinks/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/wp-mylinks/) by 
[RSS](https://plugins.trac.wordpress.org/log/wp-mylinks/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

The complete, formatted version history is also published at [onlinestorekit.com/changelog/wp-mylinks](https://www.onlinestorekit.com/changelog/wp-mylinks/).

#### 1.1.0 – August 19, 2026

**Headline features**

 * [New] **Section headings**. A link row can now be a heading that groups the links
   below it. Set a row’s type to “Heading” and it renders as a section label instead
   of a button.
 * [New] **Search / filter bar**. An optional per-page search box filters the links
   as the visitor types. Section headings hide when every link under them is filtered
   out, and a “no matches” message shows when nothing is found. Everything runs 
   in the browser, so no data leaves the page.
 * [New] **HTML blocks**. A link row can be an “HTML Block” for a newsletter form,
   a table, or any embed, placed anywhere in the link order. Raw scripts and iframes
   are kept only for users allowed to post unfiltered HTML; everyone else gets a
   safe subset.
 * [New] **Custom font family**. Set a page font globally on Settings, General or
   per page on the editor. WP MyLinks does not fetch fonts from third parties, to
   keep visitor data private, so name a font your site already loads.
 * [New] **Icon-font classes for additional social platforms**. Instead of uploading
   an image, enter an icon class (for example `fa-brands fa-github`) from an icon
   font your site already loads. An uploaded image still takes priority.
 * [New] **Google Tag Manager and GA4 friendly**. Every link click pushes a `wp_mylinks_click`
   event (with the link URL, title, and page ID) to `window.dataLayer` when it exists.
   No effect when the dataLayer is absent.
 * [New] **Choose which post types feed the Link URL picker**. A new Tools setting
   lists your site’s public post types, with Posts, Pages, and Products (when WooCommerce
   is active) checked by default, and adds new ones automatically as plugins or 
   themes register them. Uncheck any you do not want to link to. Link Collections
   are always available.
 * [New] **Per-link click counter**. Every link click is counted via a non-blocking,
   privacy-respecting ping to your own site (no cookies, no IPs, no third parties;
   bots filtered). Totals appear in a new Clicks column on the MyLinks list.
 * [New] **QR code generation**. A QR Code box on the MyLink editor renders a scannable
   code for the page URL, generated entirely in the browser by a bundled open-source
   library, with one-click PNG download.
 * [New] **Accent colors**. Four color controls (page background, button background,
   button text, text) available globally on Settings  General and per page on the
   editor. They layer on top of all 16 themes; empty values leave the theme untouched.
 * [New] **SVG social icons**. The 8 default social icons are now crisp, brand-colored
   SVG chips (0.6 to 2.4 KB each) that stay sharp at any size and remain visible
   on dark themes. Custom uploaded icons keep working unchanged; the legacy PNGs
   remain shipped for anyone referencing them directly.
 * [New] **More Plugins tab**. A settings tab introducing other plugins by the same
   author. It stays inside its own tab, no dashboard widgets, no admin notices, 
   nothing on your pages.
 * [New] **Import & Export (Tools tab)**. Export your plugin settings, all MyLink
   pages (filterable by status, Link Collections included), or a single page as 
   JSON, and import them on any site. Each MyLink editor also gets an Import/Export
   side box to back up or transplant one page’s configuration. Page imports always
   create new pages, so nothing existing is ever overwritten.
 * [Improved] **Scripts tab redesigned**. Script and CSS fields are now proper code
   editors, monospace, tall, inset, with the Header/After Body/Footer fields side
   by side.
 * [Improved] **The Link URL picker searches your whole site**. It queries the post
   types you chose as you type, so every matching post, page, product, or Collection
   is reachable, instead of a short preloaded list.
 * [Improved] **The Links editor shows only the fields a row uses**. Choosing a 
   row’s type (Link, Heading, or HTML Block) hides the unrelated fields, and turning
   on Card Layout hides the video and embed fields it replaces.
 * [Improved] **Editor text areas restyled**. The per-page script, custom styles,
   HTML block, and meta description fields now use the same styled boxes as the 
   Scripts tab, monospace for the code fields.
 * [Improved] The “Delete All Plugin Data on Uninstall” option moved to Tools  Data
   Management, in its own settings group.

**The big one: CMB2 replaced by a native fields system**

 * [Improved] The bundled CMB2 framework (3.6 MB, 340 files, 84% of the plugin) 
   has been replaced by WP MyLinks’ own lightweight fields system. The download 
   shrank from 4.3 MB to under 1 MB.
 * [Improved] **Zero migration**: the new system writes byte-identical post meta,
   verified by an automated storage-contract test suite against CMB2 itself before
   the swap. Existing pages open, edit, save, and render exactly as before.
 * [Improved] No more risk of conflicts with other plugins bundling different CMB2
   versions, and no dependence on a third-party framework’s release cycle.

**Full admin redesign**

 * [Improved] The settings page and the MyLink editor were redesigned: a proper 
   settings header, icon tabs, card layouts, toggle switches, tidy multi-column 
   metabox layouts, collapsible link rows, and side-by-side media buttons.
 * [Improved] Measured accessibility pass on the new admin: contrast ratios computed
   and fixed where they fell short of WCAG (including a footer link that had shipped
   at 1.9:1 since 1.0.8), keyboard focus rings throughout, ARIA on icon-only controls.
 * [Improved] Editing a Collection link now updates every MyLink page that uses 
   it, link rows resolve the Collection’s current URL at render time instead of 
   a stale copy.
 * [Improved] WordPress’s raw Custom Fields box no longer appears on MyLink editors.

**Developer platform**

 * [New] Documented public API (see API.md in the repository): `wp_mylinks_link_data`
   and `wp_mylinks_link_render` filters for the link loop, `wp_mylinks_meta_boxes`
   and `wp_mylinks_field_types` for registering fields, `wp_mylinks_settings_tabs`
   for settings tabs, and the `wp_mylinks_track_link_click` action with documented
   analytics data shapes.

**Bug fixes**

 * [Fixed] The global Default Schema Type could never be saved as `Organization`,
   the sanitizer lowercased the value before comparing it. Per-page overrides were
   unaffected.
 * [Fixed] The page-view counter now increments atomically (concurrent visits no
   longer lose counts) and filters out bots and crawlers.
 * [Fixed] A PHP 8 “Attempt to read property on string” warning fired on every uncached
   oEmbed render.
 * [Fixed] Other plugins’ admin notices no longer render inside the plugin’s settings
   header.
 * [Misc] The plugin’s admin footer now shows the WP MyLinks version on plugin screens,
   the number support will ask you for.
 * [Misc] Codebase fully normalized to the WordPress Coding Standards; PHPCS now
   runs clean as a release gate.

#### 1.0.8 – May 23, 2026

**Headline features**

 * [New] **Schema.org JSON-LD output** for every MyLinks page. Choose `Person` (
   default) or `Organization` either globally on Settings  MyLinks  Global, or per-
   page on the MyLink editor. Output includes name, image, description, page URL,
   and a `sameAs` array populated from all configured social profiles, perfect for
   Google’s Knowledge Graph. Defers automatically to Yoast SEO when Yoast is handling
   schema.
 * [New] **ProfilePage schema wrapper** (optional toggle on Settings  MyLinks  Global).
   When enabled, the JSON-LD output becomes a `@graph` array containing the Person/
   Organization entity, a ProfilePage that references it via `@id`, and a BreadcrumbList.
   This is the pattern used by X (Twitter), GitHub, and LinkedIn profiles. Helps
   search engines and AI tools recognize the URL as a canonical profile page.
 * [New] **BreadcrumbList schema** automatically emitted alongside the Person/Organization
   schema whenever JSON-LD is enabled. Two-step path (Home  page name). Google uses
   this in SERPs in place of the raw URL line.
 * [New] **Open Graph & Twitter Card meta tags**. Share previews on Facebook, X (
   Twitter), LinkedIn, and Discord now display your MyLink page properly. Configure
   globally or per-page; the share image falls back gracefully through per-page  
   global  Yoast  avatar so something always renders. Defers to Yoast when Yoast
   is handling Open Graph.
 * [New] **Default share-image option** (recommended size 1200×630) on Settings  
   MyLinks  Global, with per-page overrides on the MyLink editor.
 * [New] **Twitter / X handle field** on Settings  MyLinks  Global. Used for `twitter:
   site` and `twitter:creator`. The `@` is added automatically if missing.
 * [New] **Additional Social Platforms** metabox on the MyLink editor (placed right
   under the existing Social Media metabox so it’s impossible to miss). Add Threads,
   Bluesky, GitHub, Mastodon, WhatsApp, Telegram, Signal, or any other platform 
   via a CMB2 repeater with sortable rows. Each row accepts a name, profile URL,
   and optional icon. Existing hardcoded 8 platforms (Facebook, Twitter, LinkedIn,
   Instagram, YouTube, Pinterest, TikTok, Discord) are preserved exactly, no migration
   risk.
 * [New] **Accessibility improvements**: skip-to-content link, ARIA labels on every
   social icon and link button, “opens in new tab” hints for screen readers, graceful
   avatar `alt` fallback when the name is empty, decorative images correctly marked
   with empty `alt`. WCAG 2.2 compliant.

**Permalink fixes (the long-standing 404 bug)**

 * [Fixed] Permalink conflicts that caused 404s when MyLink slugs collided with 
   pages, posts, or pagination. The post type now registers with a real `mylink`
   rewrite slug and resolves slug-only URLs through the WordPress `request` filter
   with proper collision detection, no more fragile `pre_get_posts` hacks.
 * [Fixed] Activation hook was registered against the wrong file path, so rewrite
   rules were never flushed on activation. Activation now flushes rules correctly,
   and a one-time auto-flush runs on the first admin page load after every update
   so existing installs heal themselves transparently.
 * [Fixed] Slug-stripping no longer corrupts post permalinks whose slug happens 
   to contain the word “mylink”. The replacement is now anchored to the home URL
   via regex.
 * [Fixed] `pre_get_posts` callback was registered twice and contained a logic bug(`''
   == isset(...)`) that made the post-type override fire on every front-page query.
 * [Fixed] `wp_mylinks_request` filter no longer breaks when other plugins add query
   vars (the brittle `2 != count($query->query)` check has been removed).
 * [Added] Canonical 301 redirect from `/mylink/<slug>/` to `/<slug>/` for SEO consistency.
 * [Added] `wp_mylinks_cpt_rewrite_slug` filter so developers can change the internal
   CPT slug without breaking public URLs.

**Data preservation & uninstall**

 * [Fixed] Deactivation no longer deletes user options. The previous code wiped 
   every plugin setting on deactivation, which destroyed configuration for anyone
   who toggled the plugin off temporarily. A separate `uninstall.php` now handles
   true uninstallation.
 * [New] **“Delete Plugin Data on Uninstall?”** option on Settings  MyLinks  Global.
   Off by default, preserve your settings across uninstall/reinstall cycles. Enable
   it for a clean removal of all plugin options and oEmbed caches.
 * [Added] `WP_MYLINKS_PURGE_POSTS_ON_UNINSTALL` constant for users who want a complete
   data purge (including posts) on plugin deletion.
 * [Added] Proper `uninstall.php` that cleans up options and oEmbed transients (
   when opted in), but preserves MyLink posts by default.

**Security & code quality**

 * [Security] Hardened admin settings page: every option output is now properly 
   escaped, every `register_setting()` has an explicit `sanitize_callback`, and 
   tab parameters use a strict allowlist.
 * [Security] Admin column rendering now escapes URLs with `esc_url()` and `esc_attr()`.
 * [Security] All user-supplied script/style content output through tightly-scoped`
   wp_kses()` allowlists. Admin-only with `manage_options` capability gating remains.
   Custom-script settings now use a dedicated `wp_mylinks_sanitize_raw_script()`
   callback that strips control characters and normalizes line endings while preserving
   raw HTML/JS/CSS content.
 * [Changed] Front-end template refactored to produce clean, predictable HTML output
   with consistent two-space indentation. PHP control structures now sit at column
   0 so their whitespace doesn’t leak into the rendered markup.
 * [Changed] Empty `<div class="user-profile">` and `<div class="description">` 
   wrappers are no longer emitted when those sections have no content (eliminates
   ~60px of phantom vertical space).
 * [Changed] Inline `<style>` blocks consolidated from three separate tags into 
   one `<style id="wp-mylinks-inline-css">` block per page.
 * [Changed] Asset enqueueing moved to `<head>` for stylesheets and just-before-`
   </body>` for scripts (proper WordPress convention).
 * [Changed] Renamed the global `Plugin` class to `Wp_Mylinks_Front_Page_Plugin`
   to avoid namespace collisions with other plugins.
 * [Changed] Renamed misspelled function `wp_mylinks_custom_sidebar_suppport` to`
   wp_mylinks_custom_sidebar_support` (with backward-compat alias).
 * [Misc] Frontend template upgraded `<div class="mylinks">` to `<main class="mylinks"
   >` for better semantic markup.
 * [Misc] Invalid duplicate `id="link_count"` on multiple anchors replaced with 
   a `link_count` class. Obsolete `align="middle"` attribute removed. Image alt 
   text reflects link title.
 * [Misc] `<meta name="generator">` added to identify plugin output for support.

**Internationalization**

 * [New] Eleven new translatable strings on the MyLink CMB2 metaboxes (`Choose Avatar`,`
   Choose Icon` × 8, `Choose Favicon`, `Select a link…`) that were previously hard-
   coded English.
 * [New] Submenu titles for the Collection sidebar (`UTM Campaign Builder`, `Support`)
   and admin sidebar quick links (`Rate This Plugin`, `Buy Me a Coffee`, etc.) are
   now translatable.
 * [Misc] Added `/* translators: */` comments to every `sprintf()` call in admin
   output for translator clarity.
 * [Misc] All `add_submenu_page()`, `add_meta_box()`, and CMB2 field labels now 
   flow through `__()` / `_x()` with the `wp-mylinks` text domain.

**Hooks & filters for extension**

 * [Added] New action hooks for plugin extension: `wp_mylinks_head`, `wp_mylinks_body_open`,`
   wp_mylinks_before_links`, `wp_mylinks_after_links`, `wp_mylinks_footer`.
 * [Added] New filter hooks: `wp_mylinks_schema_data` (mutate JSON-LD before encoding),`
   wp_mylinks_og_meta` (mutate Open Graph meta lines before output).
 * [Added] `wp_mylinks_extract_youtube_id()` helper recognizes regular, short (`
   youtu.be`), embed, mobile, and shorts YouTube URLs. Previously, only the standard`?
   v=` URL format worked.

**Frontend assets**

 * [Misc] Frontend JavaScript modernized: added `'use strict'`, switched to an IIFE,
   validates YouTube IDs before injecting them, lazy-loads thumbnails, supports 
   keyboard activation (Enter/Space), forces HTTPS for thumbnail URLs.
 * [Misc] Frontend CSS rewritten to WordPress CSS Coding Standards: tab indentation,
   alphabetized selectors per section, the `@keyframes slidebg` block consolidated
   from three duplicates to one, removed long-obsolete `-webkit-/-moz-` border-radius
   and gradient prefixes, and the minified file regenerated to match the source.
 * [Added] `.screen-reader-text` helper class with WCAG-compliant focus styling 
   for the new skip-to-content link.
 * [Added] Bundled `globe.svg` fallback icon for Additional Social Platforms with
   no custom icon configured.

**Admin assets**

 * [Misc] Admin assets (CSS and JS) now only enqueue on plugin-relevant screens (
   the settings page and the mylink/mylinks-collection edit screens) instead of 
   every wp-admin page, eliminating the prior risk of leaking styles into other 
   admin areas.
 * [Misc] Admin JavaScript modernized: wrapped in IIFE with `'use strict'`, switched
   to event delegation, no more global `mediaUploader` leak. Reusable media-frame
   helper now drives both the favicon and the new Open Graph share-image pickers
   without conflict.
 * [New] Friendly admin footer text on plugin screens with a 5-star review prompt
   linking to the WordPress.org reviews page. Footer text on every other admin page
   is left untouched.

**WordPress 7.0 compatibility**

 * [Misc] Bumped minimum WordPress version to 6.0 and tested up to WordPress 7.0.
 * [Misc] Audited the codebase for PHP 8.x compatibility.
 * [Misc] View counter switched to atomic `update_post_meta()` and skips admin/cron
   requests for cleaner counts.

#### 1.0.7 – September 26, 2024

 * [Security] Fixed Cross Site Scripting (XSS) vulnerability as discovered and reported
   by SOPROBRO to Patchstack, reported by Darius Sveikauskas (Kudos to SOPROBRO,
   Darius Sveikauskas and Patchstack)
 * [Fixed] Fixed JavaScript issues preventing users to add new links
 * [Fixed] Fixed several unsanitized fields on the MyLinks page output
 * [Fixed] CSS issues making several templates not responsive on smaller screens
 * [New] Added extra options for Transparent avatar style and adding scripts to 
   after the open tag
 * [Misc] Changed and optimized several fields on the MyLinks editor screen
 * [Misc] Updated CMB2 to the latest version 2.11.0
 * [Misc] Updated select2.min.js to the latest version 4.1.0-rc.0
 * [Misc] Optimized a large part of the MyLinks page template
 * [Misc] Compatibility with latest version of WordPress v6.6.2

#### 1.0.6 – April 28, 2023

 * [New] Enhanced Media Embedding: In addition to embedding YouTube videos, you 
   can now seamlessly embed media from any site supported by WordPress.
 * [New] Organized Link Collections: Easily save and access important links in a
   dedicated collections page, eliminating the need to repeatedly enter the same
   links manually.
 * [New] Searchable Link Lists: The Link input field now includes a search function,
   allowing you to find previously defined links from your Links Collection, existing
   posts, or pages by default.
 * [New] Added Discord social media support
 * [Fixed] Flush permalink issue
 * [Misc] Compatibility with latest version of WordPress

#### 1.0.5 – February 25, 2022

 * [New] Youtube Video embed
 * [New] Card-style Link
 * [New] Avatar Styles
 * [New] Social Buttons position
 * [Fixed] Flush permalink issue
 * [Misc] CSS issues
 * [Misc] Compatibility with latest version of WordPress

#### 1.0.4 – August 15, 2020

 * [Fixed] CSS issues
 * [Misc] Compatibility with latest version of WordPress

#### 1.0.3 – July 26, 2020

 * [New] Klepon Viral theme
 * [Fixed] CSS issues
 * [Fixed] Bug on MyLink as front page not redirect to home page
 * [Fixed] 404 permalink issue

#### 1.0.2 – July 18, 2020

 * [New] Social icon for Pinterest
 * [New] Individual custom favicon input on every MyLinks Page
 * [New] Individual custom header script input on every MyLinks Page
 * [New] Individual custom footer script input on every MyLinks Page
 * [New] Individual custom style input on every MyLinks Page
 * [Fixed] Several icons not showing correctly

#### 1.0.1 – June 16, 2020

 * [New] Set MyLinks page as front page
 * [Fixed] Permalink rewrite issue
 * Compatibility with latest version of WordPress

#### 1.0.0

 * Initial release: Hello World!

## Meta

 *  Version **1.1.0**
 *  Last updated **1 day ago**
 *  Active installations **1,000+**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.4**
 *  PHP version ** 7.4 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/wp-mylinks/), [Spanish (Chile)](https://cl.wordpress.org/plugins/wp-mylinks/),
   and [Spanish (Spain)](https://es.wordpress.org/plugins/wp-mylinks/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/wp-mylinks)
 * Tags
 * [landing page](https://test.wordpress.org/plugins/tags/landing-page/)[link in bio](https://test.wordpress.org/plugins/tags/link-in-bio/)
   [Linktree](https://test.wordpress.org/plugins/tags/linktree/)[schema](https://test.wordpress.org/plugins/tags/schema/)
   [social profile](https://test.wordpress.org/plugins/tags/social-profile/)
 *  [Advanced View](https://test.wordpress.org/plugins/wp-mylinks/advanced/)

## Ratings

 4 out of 5 stars.

 *  [  10 5-star reviews     ](https://wordpress.org/support/plugin/wp-mylinks/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/wp-mylinks/reviews/?filter=4)
 *  [  1 3-star review     ](https://wordpress.org/support/plugin/wp-mylinks/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/wp-mylinks/reviews/?filter=2)
 *  [  3 1-star reviews     ](https://wordpress.org/support/plugin/wp-mylinks/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/wp-mylinks/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/wp-mylinks/reviews/)

## Contributors

 *   [ Walter Pinem ](https://profiles.wordpress.org/walterpinem/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/wp-mylinks/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://www.paypal.me/WalterPinem)