Polylang Security & Risk Analysis

wordpress.org/plugins/polylang

Go multilingual in a simple and efficient way. Keep writing posts and taxonomy terms as usual while defining their languages all at once.

800K active installs v3.7.8 PHP 7.2+ WP 6.2+ Updated Feb 23, 2026
languagelocalizationmultilingualtranslatetranslation
93
A · Safe
CVEs total3
Unpatched0
Last CVEOct 28, 2025
Safety Verdict

Is Polylang Safe to Use in 2026?

Generally Safe

Score 93/100

Polylang has a strong security track record. Known vulnerabilities have been patched promptly.

3 known CVEsLast CVE: Oct 28, 2025Updated 1mo ago
Risk Assessment

Polylang v3.7.8 exhibits a generally strong security posture based on the static analysis. The plugin demonstrates good practices by implementing nonce and capability checks on a significant portion of its entry points, with no unprotected AJAX handlers or REST API routes identified. The majority of SQL queries are prepared, and a high percentage of output is properly escaped, indicating a focus on preventing common web vulnerabilities. Taint analysis also reveals no high-severity issues like unsanitized paths or critical flows.

However, the plugin's vulnerability history presents a notable concern. With three previously discovered high-severity vulnerabilities, including deserialization, CSRF, and XSS, the plugin has a track record of exploitable flaws. While there are currently no unpatched vulnerabilities, the recurrence of these common attack types suggests potential for future issues if not diligently addressed in development. The last vulnerability being relatively recent also warrants attention. The strengths in current code analysis are somewhat offset by this historical pattern, suggesting continued vigilance and thorough code review are crucial for this plugin.

In conclusion, Polylang v3.7.8 shows positive signs in its current code implementation with robust checks and sanitization. The absence of critical static analysis findings is commendable. Nevertheless, the past disclosure of high-severity vulnerabilities necessitates a cautious approach. Users and developers should be aware of this history and prioritize staying updated with the latest versions, as the plugin has previously contained exploitable flaws. Continued attention to security best practices in future development cycles will be key to maintaining a secure plugin.

Key Concerns

  • Previously known high-severity CVEs exist
  • Previous vulnerability type: Deserialization
  • Previous vulnerability type: CSRF
  • Previous vulnerability type: XSS
Vulnerabilities
3

Polylang Security Vulnerabilities

CVEs by Year

1 CVE in 2014
2014
1 CVE in 2019
2019
1 CVE in 2025
2025
Patched Has unpatched

Severity Breakdown

High
3

3 total CVEs

CVE-2025-64353high · 7.5Deserialization of Untrusted Data

Polylang <= 3.7.3 - Authenticated (Contributor+) PHP Object Injection

Oct 28, 2025 Patched in 3.7.4 (8d)
WF-d056eeea-6ed2-4139-ba32-727a95f29aaf-polylanghigh · 8.8Cross-Site Request Forgery (CSRF)

Polylang <= 2.5 - Cross-Site Request Forgery

Jan 16, 2019 Patched in 2.5.1 (1833d)
CVE-2014-4855high · 7.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Polylang <= 1.5.1 - Cross-Site Scripting

Aug 1, 2014 Patched in 1.5.2 (3462d)
Code Analysis
Analyzed Mar 16, 2026

Polylang Code Analysis

Dangerous Functions
0
Raw SQL Queries
8
70 prepared
Unescaped Output
39
365 escaped
Nonce Checks
41
Capability Checks
36
File Operations
4
External Requests
5
Bundled Libraries
0

SQL Query Safety

90% prepared78 total queries

Output Escaping

90% escaped404 total outputs
Data Flows
All sanitized

Data Flow Analysis

7 flows
ajax_posts_not_translated (admin\admin-classic-editor.php:277)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface

Polylang Attack Surface

Entry Points10
Unprotected0

AJAX Handlers 10

authwp_ajax_post_lang_choiceadmin\admin-classic-editor.php:55
authwp_ajax_pll_posts_not_translatedadmin\admin-classic-editor.php:56
authwp_ajax_pll_update_post_rowsadmin\admin-filters-columns.php:64
authwp_ajax_pll_update_term_rowsadmin\admin-filters-columns.php:65
authwp_ajax_inline-saveadmin\admin-filters-post.php:38
authwp_ajax_term_lang_choiceadmin\admin-filters-term.php:84
authwp_ajax_pll_terms_not_translatedadmin\admin-filters-term.php:85
authwp_ajax_pll_deactivate_licensemodules\wizard\wizard.php:378
authwp_ajax_pll_deactivate_licensesettings\settings-licenses.php:47
authwp_ajax_pll_save_optionssettings\settings-module.php:174
WordPress Hooks 391
actionadmin_menuadmin\admin-base.php:69
actionadmin_menuadmin\admin-base.php:71
actionadmin_enqueue_scriptsadmin\admin-base.php:74
actioncustomize_controls_enqueue_scriptsadmin\admin-base.php:76
actionsetup_themeadmin\admin-base.php:106
filterrequestadmin\admin-base.php:107
actionadmin_bar_menuadmin\admin-base.php:110
filterblock_editor_rest_api_preload_pathsadmin\admin-block-editor.php:33
actionadmin_enqueue_scriptsadmin\admin-block-editor.php:34
actionadd_meta_boxesadmin\admin-classic-editor.php:52
filterpage_attributes_dropdown_pages_argsadmin\admin-classic-editor.php:59
actionedit_form_topadmin\admin-classic-editor.php:62
filterpll_first_language_term_columnadmin\admin-default-term.php:27
filterhidden_columnsadmin\admin-filters-columns.php:43
filterquick_edit_custom_boxadmin\admin-filters-columns.php:54
filterbulk_edit_custom_boxadmin\admin-filters-columns.php:55
filterattachment_fields_to_editadmin\admin-filters-media.php:31
filterattachment_fields_to_saveadmin\admin-filters-media.php:34
actionadmin_initadmin\admin-filters-media.php:37
actionadmin_enqueue_scriptsadmin\admin-filters-post.php:30
actionparse_queryadmin\admin-filters-post.php:33
actionload-post.phpadmin\admin-filters-post.php:36
actionload-edit.phpadmin\admin-filters-post.php:37
filtertiny_mce_before_initadmin\admin-filters-post.php:41
filterwp_dropdown_catsadmin\admin-filters-term.php:76
actioncreate_termadmin\admin-filters-term.php:77
actionedit_termadmin\admin-filters-term.php:78
actionpre_post_updateadmin\admin-filters-term.php:79
filterpll_inserted_term_languageadmin\admin-filters-term.php:80
filterpll_inserted_term_parentadmin\admin-filters-term.php:81
actionsplit_shared_termadmin\admin-filters-term.php:88
actionpersonal_options_updateadmin\admin-filters.php:24
actionedit_user_profile_updateadmin\admin-filters.php:25
actionpersonal_optionsadmin\admin-filters.php:26
filterthemes_update_check_localesadmin\admin-filters.php:29
filterplugins_update_check_localesadmin\admin-filters.php:30
filteradmin_body_classadmin\admin-filters.php:32
filterdisplay_post_statesadmin\admin-filters.php:35
filtertheme_mod_nav_menu_locationsadmin\admin-nav-menu.php:25
actionadmin_initadmin\admin-nav-menu.php:28
actionload-nav-menus.phpadmin\admin-nav-menu.php:29
actionadmin_enqueue_scriptsadmin\admin-nav-menu.php:40
actionwp_update_nav_menu_itemadmin\admin-nav-menu.php:41
actiondelete_nav_menuadmin\admin-nav-menu.php:45
actionadmin_initadmin\admin-notices.php:40
actionadmin_noticesadmin\admin-notices.php:41
filterdisplay_post_statesadmin\admin-static-pages.php:30
actionpll_save_postadmin\admin-static-pages.php:33
filterpre_update_option_show_on_frontadmin\admin-static-pages.php:36
actionadmin_noticesadmin\admin-static-pages.php:38
filterpll_sanitize_string_translationadmin\admin-strings.php:40
actionwp_loadedadmin\admin.php:91
actionwpfrontend\choose-lang-content.php:26
filterpll_get_current_languagefrontend\choose-lang-content.php:29
filterrequestfrontend\choose-lang-url.php:37
actionsetup_themefrontend\choose-lang-url.php:59
actionpre_comment_on_postfrontend\choose-lang.php:67
actionparse_queryfrontend\choose-lang.php:68
actionwpfrontend\choose-lang.php:69
filteroption_show_on_frontfrontend\choose-lang.php:322
actionparse_queryfrontend\frontend-auto-translate.php:36
filterget_terms_argsfrontend\frontend-auto-translate.php:37
actionwp_headfrontend\frontend-filters-links.php:60
filterhome_urlfrontend\frontend-filters-links.php:64
filterget_pagenum_linkfrontend\frontend-filters-links.php:69
filterget_shortlinkfrontend\frontend-filters-links.php:71
filteradmin_urlfrontend\frontend-filters-links.php:74
filteroembed_endpoint_urlfrontend\frontend-filters-links.php:77
filterget_search_formfrontend\frontend-filters-search.php:39
filterrender_block_core/searchfrontend\frontend-filters-search.php:42
actionadd_admin_bar_menusfrontend\frontend-filters-search.php:45
actionwp_footerfrontend\frontend-filters-search.php:51
actionadmin_bar_menufrontend\frontend-filters-search.php:105
filtersidebars_widgetsfrontend\frontend-filters-widgets.php:37
filterlocalefrontend\frontend-filters.php:23
filteroption_sticky_postsfrontend\frontend-filters.php:26
filtergetarchives_joinfrontend\frontend-filters.php:29
filtergetarchives_wherefrontend\frontend-filters.php:30
filterwidget_display_callbackfrontend\frontend-filters.php:33
filterwidget_media_image_instancefrontend\frontend-filters.php:36
filterget_user_metadatafrontend\frontend-filters.php:45
filterload_textdomain_mofilefrontend\frontend-filters.php:48
filterwp_get_nav_menu_itemsfrontend\frontend-nav-menu.php:32
filterwp_nav_menu_objectsfrontend\frontend-nav-menu.php:33
filternav_menu_link_attributesfrontend\frontend-nav-menu.php:34
filtertheme_mod_nav_menu_locationsfrontend\frontend-nav-menu.php:37
filterwp_nav_menu_argsfrontend\frontend-nav-menu.php:38
filterwp_nav_menu_argsfrontend\frontend-nav-menu.php:42
filterwp_nav_menu_argsfrontend\frontend-nav-menu.php:43
actionpll_home_requestedfrontend\frontend-static-pages.php:45
filterredirect_canonicalfrontend\frontend-static-pages.php:48
filterpll_pre_translation_urlfrontend\frontend-static-pages.php:50
filterpll_check_canonical_urlfrontend\frontend-static-pages.php:51
filterpll_set_language_from_queryfrontend\frontend-static-pages.php:53
filterpll_set_language_from_queryfrontend\frontend-static-pages.php:54
actioncustomize_registerfrontend\frontend-static-pages.php:57
filterpre_option_page_on_frontfrontend\frontend-static-pages.php:280
filterpre_option_page_for_postfrontend\frontend-static-pages.php:281
filterpll_pre_translation_urlfrontend\frontend-static-pages.php:283
actionpll_language_definedfrontend\frontend.php:86
actionparse_tax_queryfrontend\frontend.php:89
actionparse_queryfrontend\frontend.php:92
actiontemplate_redirectfrontend\frontend.php:96
actionadmin_bar_menufrontend\frontend.php:99
actiontemplate_redirectfrontend\frontend.php:157
actionwidgets_initinclude\base.php:60
actionpll_language_definedinclude\base.php:63
actionchange_localeinclude\base.php:64
actionpersonal_options_updateinclude\base.php:65
actionlostpassword_postinclude\base.php:66
actionswitch_bloginclude\base.php:68
actionswitch_bloginclude\cache.php:37
actionplugins_loadedinclude\class-polylang.php:52
actionpll_init_options_for_bloginclude\class-polylang.php:173
actionsave_postinclude\crud-posts.php:52
actionset_object_termsinclude\crud-posts.php:53
filterwp_insert_post_parentinclude\crud-posts.php:54
actionbefore_delete_postinclude\crud-posts.php:55
actionpost_updatedinclude\crud-posts.php:56
actionadd_attachmentinclude\crud-posts.php:60
actiondelete_attachmentinclude\crud-posts.php:61
filterwp_delete_fileinclude\crud-posts.php:62
filterpll_inserted_term_languageinclude\crud-posts.php:395
filterpll_inserted_term_parentinclude\crud-posts.php:396
actioncreate_terminclude\crud-terms.php:82
actionedit_terminclude\crud-terms.php:83
filterpre_term_nameinclude\crud-terms.php:84
filterpre_term_sluginclude\crud-terms.php:85
filterpre_term_term_idinclude\crud-terms.php:86
filterget_terms_argsinclude\crud-terms.php:89
filterterms_clausesinclude\crud-terms.php:92
actionpre_get_postsinclude\crud-terms.php:93
actionposts_selectioninclude\crud-terms.php:94
actionpre_delete_terminclude\crud-terms.php:97
actionpll_add_languageinclude\default-term.php:62
actionpll_update_default_langinclude\default-term.php:65
filtermap_meta_capinclude\default-term.php:68
filterpost_linkinclude\filters-links.php:59
filter_get_page_linkinclude\filters-links.php:60
filterpost_type_linkinclude\filters-links.php:63
filterterm_linkinclude\filters-links.php:64
filterattachment_linkinclude\filters-links.php:67
filterpreview_post_linkinclude\filters-links.php:72
filterpost_type_archive_linkinclude\filters-links.php:76
filtersanitize_titleinclude\filters-sanitization.php:34
filtersanitize_userinclude\filters-sanitization.php:35
filterlocaleinclude\filters-sanitization.php:72
filterlocaleinclude\filters-sanitization.php:99
actionin_widget_forminclude\filters-widgets-options.php:31
filterwidget_update_callbackinclude\filters-widgets-options.php:32
actionupdate_option_sticky_postsinclude\filters.php:54
actionadd_option_sticky_postsinclude\filters.php:55
actiondelete_option_sticky_postsinclude\filters.php:56
actionparse_comment_queryinclude\filters.php:59
filtercomments_clausesinclude\filters.php:60
filterget_pagesinclude\filters.php:65
filterget_pages_query_argsinclude\filters.php:67
filterget_previous_post_joininclude\filters.php:70
filterget_next_post_joininclude\filters.php:71
filterget_previous_post_whereinclude\filters.php:72
filterget_next_post_whereinclude\filters.php:73
filterlanguage_attributesinclude\filters.php:76
filterpassword_change_emailinclude\filters.php:79
filteremail_change_emailinclude\filters.php:80
filteroption_wp_page_for_privacy_policyinclude\filters.php:83
filtermap_meta_capinclude\filters.php:84
filterwp_privacy_personal_data_exportersinclude\filters.php:87
filterterm_exists_default_query_argsinclude\filters.php:90
filterpll_settings_licensesinclude\license.php:106
actionpolylang_check_licensesinclude\license.php:113
filtercontent_urlinclude\links-abstract-domain.php:24
filtertheme_root_uriinclude\links-abstract-domain.php:25
filterplugins_urlinclude\links-abstract-domain.php:26
filterrest_urlinclude\links-abstract-domain.php:27
filterupload_dirinclude\links-abstract-domain.php:28
filterpll_language_flag_urlinclude\links-abstract-domain.php:31
actionpll_prepare_rewrite_rulesinclude\links-directory.php:41
filtersite_urlinclude\links-domain.php:34
filterpll_additional_language_datainclude\links-model.php:59
filterallowed_redirect_hostsinclude\links-model.php:62
filterpll_language_home_urlinclude\links-model.php:65
filterpll_language_search_urlinclude\links-model.php:66
actionpll_initinclude\links-model.php:71
actionwp_loadedinclude\links-permalinks.php:78
filterget_terms_orderbyinclude\Model\Languages.php:1141
actionedited_term_taxonomyinclude\model.php:115
actionupdate_option_permalink_structureinclude\model.php:116
actionupdate_option_siteurlinclude\model.php:117
actionupdate_option_homeinclude\model.php:118
filterget_terms_argsinclude\model.php:120
filterlanguage_descriptioninclude\model.php:123
filterwp_setup_nav_menu_iteminclude\nav-menu.php:54
actioncustomize_registerinclude\nav-menu.php:57
actiontransition_post_statusinclude\nav-menu.php:60
filteroption_nav_menu_optionsinclude\nav-menu.php:176
filterpre_update_option_active_pluginsinclude\olt-manager.php:30
filterpre_update_option_active_sitewide_pluginsinclude\olt-manager.php:31
filterload_textdomain_mofileinclude\olt-manager.php:39
actionpll_language_definedinclude\olt-manager.php:42
actionpll_no_language_definedinclude\olt-manager.php:43
filterpre_update_option_polylanginclude\Options\Options.php:83
actionswitch_bloginclude\Options\Options.php:84
actionshutdowninclude\Options\Options.php:85
filterrest_pre_dispatchinclude\rest-request.php:89
filterpll_additional_language_datainclude\static-pages.php:51
actionupdate_option_show_on_frontinclude\static-pages.php:54
actionupdate_option_page_on_frontinclude\static-pages.php:55
actionupdate_option_page_for_postsinclude\static-pages.php:56
actionupdate_option_page_on_frontinclude\static-pages.php:59
actionpll_language_definedinclude\static-pages.php:62
filterpage_linkinclude\static-pages.php:65
filteroembed_request_post_idinclude\static-pages.php:68
filteroption_page_on_frontinclude\static-pages.php:162
filteroption_page_for_postsinclude\static-pages.php:163
filterpll_sanitize_string_translationinclude\translate-option.php:104
actionsetup_themeinclude\translated-post.php:94
actionregistered_post_typeinclude\translated-post.php:118
actionpre_get_postsinclude\translated-post.php:121
filterpll_enable_duplicate_mediainclude\translated-post.php:343
filterget_termsinclude\translated-term.php:89
actionclean_term_cacheinclude\translated-term.php:90
filterpll_inserted_term_languageinclude\translated-term.php:483
filterpll_inserted_term_parentinclude\translated-term.php:484
actionwp_initialize_siteinstall\install-base.php:34
actionadmin_noticesinstall\install.php:27
actionadmin_noticesinstall\install.php:32
actionpll_init_options_for_bloginstall\install.php:93
filterpre_set_site_transient_update_pluginsinstall\plugin-updater.php:78
filterplugins_apiinstall\plugin-updater.php:79
actionafter_plugin_rowinstall\plugin-updater.php:80
actionadmin_initinstall\plugin-updater.php:81
actioninitinstall\t15s.php:61
filtertranslations_apiinstall\t15s.php:62
filtersite_transient_update_pluginsinstall\t15s.php:63
actionset_site_transient_update_pluginsinstall\t15s.php:140
actiondelete_site_transient_update_pluginsinstall\t15s.php:141
actionall_admin_noticesinstall\upgrade.php:56
actionadmin_initinstall\upgrade.php:61
filterpll_home_url_black_listintegrations\aqua-resizer\aqua-resizer.php:18
actionwp_enqueue_scriptsintegrations\cache\cache-compat.php:20
actionwpintegrations\cache\cache-compat.php:25
actionclean_post_cacheintegrations\cache\cache-compat.php:28
filterpost_type_archive_linkintegrations\cache\cache-compat.php:105
actionplugins_loadedintegrations\cache\load.php:12
actionpll_initintegrations\cache\load.php:16
actionadd_meta_boxesintegrations\custom-field-template\cft.php:18
actionplugins_loadedintegrations\custom-field-template\load.php:12
actiontemplate_redirectintegrations\domain-mapping\domain-mapping.php:28
filteroption_duplicate_post_taxonomies_blacklistintegrations\duplicate-post\duplicate-post.php:18
actionplugins_loadedintegrations\duplicate-post\load.php:12
filtertransient_featured_content_idsintegrations\jetpack\featured-content.php:18
filteroption_featured-contentintegrations\jetpack\featured-content.php:19
actioninitintegrations\jetpack\jetpack.php:18
actionjetpack_widget_get_top_postsintegrations\jetpack\jetpack.php:19
filtergrunion_contact_form_field_htmlintegrations\jetpack\jetpack.php:20
filterjetpack_open_graph_tagsintegrations\jetpack\jetpack.php:21
filterjetpack_relatedposts_filter_filtersintegrations\jetpack\jetpack.php:22
filterpll_is_ajax_on_frontintegrations\jetpack\jetpack.php:26
filterinfinite_scroll_ajax_urlintegrations\jetpack\jetpack.php:42
filterinfinite_scroll_js_settingsintegrations\jetpack\jetpack.php:43
actionpll_initintegrations\jetpack\load.php:14
filterget_terms_argsintegrations\no-category-base\no-category-base.php:19
actioninitintegrations\twenty-seventeen\load.php:12
actioninitintegrations\wp-importer\wordpress-importer.php:19
filterwp_import_termsintegrations\wp-importer\wordpress-importer.php:20
actionadmin_initintegrations\wp-importer\wordpress-importer.php:31
filterpll_copy_post_metasintegrations\wp-offload-media\as3cf.php:26
actiondelete_attachmentintegrations\wp-offload-media\as3cf.php:27
actiondelete_attachmentintegrations\wp-offload-media\as3cf.php:28
actionplugins_loadedintegrations\wp-offload-media\load.php:12
actionpll_initintegrations\wp-offload-media\load.php:16
actionplugins_loadedintegrations\wp-sweep\load.php:12
filterwp_sweep_excluded_taxonomiesintegrations\wp-sweep\wp-sweep.php:18
filterwp_sweep_excluded_termidsintegrations\wp-sweep\wp-sweep.php:19
actionplugins_loadedintegrations\wpseo\load.php:12
actionpll_initintegrations\wpseo\load.php:16
actionwp_loadedintegrations\wpseo\wpseo.php:19
filterwpseo_dynamic_permalinks_enabledintegrations\wpseo\wpseo.php:20
filterwpseo_posts_joinintegrations\wpseo\wpseo.php:26
filterwpseo_posts_whereintegrations\wpseo\wpseo.php:27
filterwpseo_typecount_joinintegrations\wpseo\wpseo.php:28
filterwpseo_typecount_whereintegrations\wpseo\wpseo.php:29
filterwpseo_enable_xml_sitemap_transient_cachingintegrations\wpseo\wpseo.php:32
filterhome_urlintegrations\wpseo\wpseo.php:33
actionsetup_themeintegrations\wpseo\wpseo.php:34
filterget_terms_argsintegrations\wpseo\wpseo.php:37
actionpre_get_postsintegrations\wpseo\wpseo.php:38
filterpll_home_url_white_listintegrations\wpseo\wpseo.php:41
filterwpseo_frontend_presentersintegrations\wpseo\wpseo.php:42
filterwpseo_canonicalintegrations\wpseo\wpseo.php:43
filterwpseo_frontend_presentationintegrations\wpseo\wpseo.php:44
filterwpseo_breadcrumb_indexablesintegrations\wpseo\wpseo.php:45
filterpll_copy_post_metasintegrations\wpseo\wpseo.php:47
filterpll_translate_post_metaintegrations\wpseo\wpseo.php:48
filterpll_post_metas_to_exportintegrations\wpseo\wpseo.php:49
actionplugins_loadedintegrations\yarpp\load.php:12
actioninitintegrations\yarpp\load.php:16
filterpll_settings_modulesmodules\machine-translation\load.php:11
actionpll_initmodules\REST\load.php:10
actionrest_api_initmodules\REST\load.php:14
filterpll_settings_modulesmodules\share-slug\load.php:13
filterdebug_informationmodules\site-health\admin-site-health.php:44
filterdebug_informationmodules\site-health\admin-site-health.php:45
filterdebug_informationmodules\site-health\admin-site-health.php:46
filtersite_status_testsmodules\site-health\admin-site-health.php:49
filtersite_status_test_php_modulesmodules\site-health\admin-site-health.php:50
filterpll_home_url_white_listmodules\sitemaps\abstract-sitemaps.php:22
filterwp_sitemaps_posts_query_argsmodules\sitemaps\multilingual-sitemaps-provider.php:141
filterwp_sitemaps_taxonomies_query_argsmodules\sitemaps\multilingual-sitemaps-provider.php:142
filterwp_sitemaps_index_entrymodules\sitemaps\sitemaps-domain.php:38
filterwp_sitemaps_stylesheet_urlmodules\sitemaps\sitemaps-domain.php:39
filterwp_sitemaps_stylesheet_index_urlmodules\sitemaps\sitemaps-domain.php:40
filterhome_urlmodules\sitemaps\sitemaps-domain.php:41
filterpll_set_language_from_querymodules\sitemaps\sitemaps.php:52
filterrewrite_rules_arraymodules\sitemaps\sitemaps.php:53
filterwp_sitemaps_add_providermodules\sitemaps\sitemaps.php:54
filterwp_insert_post_parentmodules\sync\admin-sync.php:29
filterwp_insert_post_datamodules\sync\admin-sync.php:30
filteruse_block_editor_for_postmodules\sync\admin-sync.php:31
filterpll_settings_modulesmodules\sync\load.php:19
filterpll_translate_post_metamodules\sync\sync-post-metas.php:33
actionset_object_termsmodules\sync\sync-tax.php:36
actionpll_save_termmodules\sync\sync-tax.php:37
actionpre_delete_termmodules\sync\sync-tax.php:38
actiondelete_termmodules\sync\sync-tax.php:39
actionset_object_termsmodules\sync\sync-tax.php:233
actionset_object_termsmodules\sync\sync-tax.php:308
filterwp_insert_post_parentmodules\sync\sync.php:54
filterwp_insert_post_datamodules\sync\sync.php:55
actionpll_save_postmodules\sync\sync.php:57
actioncreated_termmodules\sync\sync.php:58
actionedited_termmodules\sync\sync.php:59
actionpll_duplicate_termmodules\sync\sync.php:61
actionpll_translate_mediamodules\sync\sync.php:64
actionpll_translate_mediamodules\sync\sync.php:65
actionedit_attachmentmodules\sync\sync.php:66
filterpre_update_option_sticky_postsmodules\sync\sync.php:69
filterpll_settings_modulesmodules\translate-slugs\load.php:13
actionadmin_initmodules\wizard\wizard.php:73
filterpll_settings_tabsmodules\wizard\wizard.php:75
filterpll_can_display_noticemodules\wizard\wizard.php:77
filterpll_wizard_stepsmodules\wizard\wizard.php:80
filterpll_wizard_stepsmodules\wizard\wizard.php:81
filterpll_wizard_stepsmodules\wizard\wizard.php:82
filterpll_wizard_stepsmodules\wizard\wizard.php:83
filterpll_wizard_stepsmodules\wizard\wizard.php:84
filterpll_wizard_stepsmodules\wizard\wizard.php:85
actionadmin_enqueue_scriptsmodules\wizard\wizard.php:207
filterwpml_active_languagesmodules\wpml\wpml-api.php:31
filterwpml_display_language_namesmodules\wpml\wpml-api.php:32
filterwpml_current_languagemodules\wpml\wpml-api.php:34
filterwpml_default_languagemodules\wpml\wpml-api.php:35
actionwpml_add_language_form_fieldmodules\wpml\wpml-api.php:38
filterwpml_language_is_activemodules\wpml\wpml-api.php:39
filterwpml_is_rtlmodules\wpml\wpml-api.php:40
filterwpml_element_tridmodules\wpml\wpml-api.php:43
filterwpml_get_element_translationsmodules\wpml\wpml-api.php:44
filterwpml_post_language_detailsmodules\wpml\wpml-api.php:55
actionwpml_switch_languagemodules\wpml\wpml-api.php:56
filterwpml_element_language_codemodules\wpml\wpml-api.php:57
filterwpml_home_urlmodules\wpml\wpml-api.php:63
filterwpml_element_linkmodules\wpml\wpml-api.php:64
filterwpml_object_idmodules\wpml\wpml-api.php:65
filterwpml_translate_single_stringmodules\wpml\wpml-api.php:66
filterwpml_permalinkmodules\wpml\wpml-api.php:69
filterwpml_get_translated_slugmodules\wpml\wpml-api.php:71
filterwpml_element_has_translationsmodules\wpml\wpml-api.php:77
actionwpml_register_single_stringmodules\wpml\wpml-api.php:86
filterwpml_is_translated_post_typemodules\wpml\wpml-api.php:128
filterwpml_is_translated_taxonomymodules\wpml\wpml-api.php:129
filterpll_get_stringsmodules\wpml\wpml-compat.php:47
actionpll_language_definedmodules\wpml\wpml-compat.php:50
actionpll_no_language_definedmodules\wpml\wpml-compat.php:51
filterpll_copy_post_metasmodules\wpml\wpml-config.php:129
filterpll_copy_term_metasmodules\wpml\wpml-config.php:130
filterpll_get_post_typesmodules\wpml\wpml-config.php:131
filterpll_get_taxonomiesmodules\wpml\wpml-config.php:132
filterpll_post_metas_to_exportmodules\wpml\wpml-config.php:135
filterpll_term_metas_to_exportmodules\wpml\wpml-config.php:136
filterpll_post_meta_encodingsmodules\wpml\wpml-config.php:137
filterpll_term_meta_encodingsmodules\wpml\wpml-config.php:138
filterpll_blocks_xpath_rulesmodules\wpml\wpml-config.php:139
filterpll_blocks_rules_for_attributesmodules\wpml\wpml-config.php:140
actionadmin_print_footer_scriptssettings\settings-browser.php:41
actionadmin_initsettings\settings.php:50
actionload-toplevel_page_mlangsettings\settings.php:53
actionload-languages_page_mlang_stringssettings\settings.php:54
filterset_screen_option_pll_lang_per_pagesettings\settings.php:57
filterset_screen_option_pll_strings_per_pagesettings\settings.php:58
actionadmin_noticessettings\settings.php:135
actionmlang_action_string-translationsettings\table-string.php:73

Scheduled Events 1

polylang_check_licenses
Maintenance & Trust

Polylang Maintenance & Trust

Maintenance Signals

WordPress version tested6.9.4
Last updatedFeb 23, 2026
PHP min version7.2
Downloads25.8M

Community Trust

Rating94/100
Number of ratings2,921
Active installs800K
Developer Profile

Polylang Developer Profile

Chouby

3 plugins · 808K total installs

76
trust score
Avg Security Score
95/100
Avg Patch Time
1768 days
View full developer profile
Detection Fingerprints

How We Detect Polylang

Patterns used to identify this plugin on WordPress sites during automated security audits and web crawling.

Asset Fingerprints

Asset Paths
/wp-content/plugins/polylang/css/build/admin.css/wp-content/plugins/polylang/css/build/admin.min.css/wp-content/plugins/polylang/js/build/admin.js/wp-content/plugins/polylang/js/build/admin.min.js/wp-content/plugins/polylang/js/frontend.js/wp-content/plugins/polylang/js/frontend.min.js/wp-content/plugins/polylang/js/skip-link-focus-fix.js/wp-content/plugins/polylang/js/skip-link-focus-fix.min.js
Script Paths
/wp-content/plugins/polylang/js/build/admin.js/wp-content/plugins/polylang/js/build/admin.min.js/wp-content/plugins/polylang/js/frontend.js/wp-content/plugins/polylang/js/frontend.min.js/wp-content/plugins/polylang/js/skip-link-focus-fix.js/wp-content/plugins/polylang/js/skip-link-focus-fix.min.js
Version Parameters
polylang.min.css?ver=admin.min.js?ver=admin.js?ver=frontend.min.js?ver=frontend.js?ver=skip-link-focus-fix.min.js?ver=skip-link-focus-fix.js?ver=

HTML / DOM Fingerprints

CSS Classes
pll-translation-editpll-flagspll-flag-pll-menu-item-languageswp-admin-bar-languagescurrent-language-flagpll-lang-selector-dropdownpll-dropdown-lang-selector+4 more
HTML Comments
<!-- BEGIN POLYLANG --><!-- END POLYLANG --><!-- POLYLANG SKIP LINK FOCUS FIX --><!-- POLYLANG: Language switcher -->+1 more
Data Attributes
data-pll-iddata-languagedata-langdata-slugdata-namedata-code+5 more
JS Globals
pll_adminpll_frontendpolylang_ajaxurlpolylang_confirm_message
REST Endpoints
/wp-json/polylang/v2/languages/wp-json/polylang/v2/settings/wp-json/polylang/v2/sync
Shortcode Output
[language-switcher][lang_selector][polylang_language_selector][polylang_switch_language]
FAQ

Frequently Asked Questions about Polylang