WP MyLinks
9 releases · latest v1.0.8 · May 23, 2026
v1.0.8
Current release
Headline features
-
New
Schema.org JSON-LD output for every MyLinks page. Choose
Person(default) orOrganizationeither globally on Settings → MyLinks → Global, or per-page on the MyLink editor. Output includes name, image, description, page URL, and asameAsarray 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
@grapharray 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:siteandtwitter: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
altfallback when the name is empty, decorative images correctly marked with emptyalt. 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
mylinkrewrite slug and resolves slug-only URLs through the WordPressrequestfilter with proper collision detection — no more fragilepre_get_postshacks. - 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_postscallback was registered twice and contained a logic bug ('' == isset(...)) that made the post-type override fire on every front-page query. -
Fixed
wp_mylinks_requestfilter no longer breaks when other plugins add query vars (the brittle2 != count($query->query)check has been removed). -
Added
Canonical 301 redirect from
/mylink//to//for SEO consistency. -
Added
wp_mylinks_cpt_rewrite_slugfilter 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.phpnow 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_UNINSTALLconstant for users who want a complete data purge (including posts) on plugin deletion. -
Added
Proper
uninstall.phpthat 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 explicitsanitize_callback, and tab parameters use a strict allowlist. -
Security
Admin column rendering now escapes URLs with
esc_url()andesc_attr(). -
Security
All user-supplied script/style content output through tightly-scoped
wp_kses()allowlists. Admin-only withmanage_optionscapability gating remains. Custom-script settings now use a dedicatedwp_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 `
and` wrappers are no longer emitted when those sections have no content (eliminates ~60px of phantom vertical space). -
Changed
Inline `
blocks consolidated from three separate tags into one` block per page. -
Changed
Asset enqueueing moved to `
for stylesheets and just-before-` for scripts (proper WordPress convention). -
Changed
Renamed the global
Pluginclass toWp_Mylinks_Front_Page_Pluginto avoid namespace collisions with other plugins. -
Changed
Renamed misspelled function
wp_mylinks_custom_sidebar_suppporttowp_mylinks_custom_sidebar_support(with backward-compat alias). -
Misc
Frontend template upgraded `
to` for better semantic markup. -
Misc
Invalid duplicate
id="link_count"on multiple anchors replaced with alink_countclass. Obsoletealign="middle"attribute removed. Image alt text reflects link title. - Misc `` 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 everysprintf()call in admin output for translator clarity. -
Misc
All
add_submenu_page(),add_meta_box(), and CMB2 field labels now flow through__()/_x()with thewp-mylinkstext 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 slidebgblock 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-texthelper class with WCAG-compliant focus styling for the new skip-to-content link. -
Added
Bundled
globe.svgfallback 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 globalmediaUploaderleak. 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.
v1.0.7
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 several unsanitized fields on the MyLinks page output
- 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
- Updated CMB2 to the latest version 2.11.0
- Updated select2.min.js to the latest version 4.1.0-rc.0
- Optimized a large part of the MyLinks page template
- Compatibility with latest version of WordPress v6.6.2
v1.0.6
New
- Enhanced Media Embedding: In addition to embedding YouTube videos, you can now seamlessly embed media from any site supported by WordPress.
- Organized Link Collections: Easily save and access important links in a dedicated collections page, eliminating the need to repeatedly enter the same links manually.
- 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.
- Added Discord social media support
Fixed
- Flush permalink issue
Misc
- Compatibility with latest version of WordPress
Show 6 earlier releases
v1.0.5
New
- Youtube Video embed
- Card-style Link
- Avatar Styles
- Social Buttons position
Fixed
- Flush permalink issue
Misc
- CSS issues
- Compatibility with latest version of WordPress
v1.0.4
Fixed
- CSS issues
Misc
- Compatibility with latest version of WordPress
v1.0.3
New
- Klepon Viral theme
Fixed
- CSS issues
- Bug on MyLink as front page not redirect to home page
- 404 permalink issue
v1.0.2
New
- Social icon for Pinterest
- Individual custom favicon input on every MyLinks Page
- Individual custom header script input on every MyLinks Page
- Individual custom footer script input on every MyLinks Page
- Individual custom style input on every MyLinks Page
Fixed
- Several icons not showing correctly
v1.0.1
New
- Set MyLinks page as front page
Fixed
- Permalink rewrite issue
Changes
- Compatibility with latest version of WordPress
v1.0.0
---
Changes
- Initial release: Hello World!