{"id":356713,"date":"2026-08-26T12:27:19","date_gmt":"2026-08-26T12:27:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bildirim-web-push-notifications\/"},"modified":"2026-08-26T12:26:56","modified_gmt":"2026-08-26T12:26:56","slug":"bildirim","status":"publish","type":"plugin","link":"https:\/\/es-mx.wordpress.org\/plugins\/bildirim\/","author":23552488,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.3","stable_tag":"1.3.3","tested":"7.1","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"Bildirim \u2014 Web Push Notifications","header_author":"Bildirim","header_description":"Adds Bildirim web push to your WordPress site: injects the SDK, serves the required service worker, and (optionally) a PWA manifest for iOS. Can also announce new posts to your subscribers (web, iOS, Android).","assets_banners_color":"141c36","last_updated":"2026-08-26 12:26:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/bildirim.io\/dokumanlar\/web#wordpress","header_author_uri":"https:\/\/bildirim.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.3":{"tag":"1.3.3","author":"bildirim","date":"2026-08-26 12:26:56"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3666986,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3666986,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3666986,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3666986,"resolution":"1","location":"assets","locale":"","width":2760,"height":1760},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3666986,"resolution":"2","location":"assets","locale":"","width":1640,"height":470}},"screenshots":{"1":"Settings \u2192 Bildirim. Paste the public key and, if you need iPhone\/iPad\nsupport, switch the manifest on. The key is checked against the Bildirim API\nbefore it is saved, so a mistyped key cannot leave a silently dead install.","2":"The status panel. Whether the service worker is a real file or a rewrite\nrule, whether the URL actually answers, and whether the manifest is being\nserved. Every line is measured on the spot, not assumed."}},"plugin_section":[],"plugin_tags":[307,4906,1155,77057,37677],"plugin_category":[],"plugin_contributors":[277618],"plugin_business_model":[],"class_list":["post-356713","plugin","type-plugin","status-publish","hentry","plugin_tags-engagement","plugin_tags-notifications","plugin_tags-push-notifications","plugin_tags-pwa","plugin_tags-web-push","plugin_contributors-bildirim","plugin_committers-bildirim"],"banners":{"banner":"https:\/\/ps.w.org\/bildirim\/assets\/banner-772x250.png?rev=3666986","banner_2x":"https:\/\/ps.w.org\/bildirim\/assets\/banner-1544x500.png?rev=3666986","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bildirim\/assets\/icon-256x256.png?rev=3666986","icon_2x":"https:\/\/ps.w.org\/bildirim\/assets\/icon-256x256.png?rev=3666986","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bildirim\/assets\/screenshot-1.png?rev=3666986","caption":"Settings \u2192 Bildirim. Paste the public key and, if you need iPhone\/iPad\nsupport, switch the manifest on. The key is checked against the Bildirim API\nbefore it is saved, so a mistyped key cannot leave a silently dead install."},{"src":"https:\/\/ps.w.org\/bildirim\/assets\/screenshot-2.png?rev=3666986","caption":"The status panel. Whether the service worker is a real file or a rewrite\nrule, whether the URL actually answers, and whether the manifest is being\nserved. Every line is measured on the spot, not assumed."}],"raw_content":"<!--section=description-->\n<p><strong>This is the official plugin for <a href=\"https:\/\/bildirim.io\">Bildirim<\/a>, built and\nmaintained by the Bildirim team.<\/strong> \"Bildirim\" is our own service and brand \u2014 we\noperate bildirim.io; this plugin is not a third-party integration.<\/p>\n\n<p>Bildirim is a web push notification platform. Installing it by hand takes three\nsteps: a <code>&lt;head&gt;<\/code> snippet, a service worker file uploaded to <code>\/bildirim\/<\/code> over\nFTP, and (for iPhone\/iPad) a manifest. This plugin does all three.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Injects the Bildirim SDK into <code>&lt;head&gt;<\/code> with the right attributes.<\/li>\n<li>Serves the required service worker at <code>\/bildirim\/BildirimSDK-sw.js<\/code> from your\nown domain \u2014 browsers refuse to load a service worker from another origin, so\nit cannot come from a CDN.<\/li>\n<li>Optionally serves a <code>manifest.json<\/code> so iOS 16.4+ users can add your site to\nthe Home Screen and receive notifications.<\/li>\n<li>Verifies your public key against the Bildirim API before saving it, so a\nmistyped key cannot leave you with a silently dead install.<\/li>\n<li><p>Registers exclusion rules for LiteSpeed Cache, WP Rocket and Autoptimize so\nthe SDK is not merged into a combined file (which would stop updates).<\/p><\/li>\n<li><p>Announces new posts: a <strong>Bildirim<\/strong> box in the editor with a \"send when\npublished\" switch and per-channel checkboxes (Web \/ iOS \/ Android). A post is\nannounced at most once \u2014 editing a published post never sends again.<\/p><\/li>\n<\/ul>\n\n<p><strong>What it does not do<\/strong><\/p>\n\n<p>Segments, automations, A\/B tests and scheduling live in the Bildirim dashboard.\nFrom WordPress you can announce a post to everyone (optionally per channel);\nanything more targeted is a campaign in the dashboard.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to Bildirim (bildirim.io), the notification service this\nplugin is built for and which the plugin author operates. An account on that\nservice is required for the plugin to function. The requests it makes, and the\ndata each one carries, are listed below.<\/p>\n\n<ul>\n<li><code>https:\/\/api.bildirim.io\/v1\/public\/vapid<\/code> \u2014 called once from your server when\nyou save a public key, to confirm the key is valid. Only the key is sent.<\/li>\n<li><code>https:\/\/api.bildirim.io\/v1\/push<\/code> \u2014 called from your server when a post is\nannounced. The post title, summary, link and (optionally) the featured image\nURL are sent. Only happens if you configured a secret key and ticked the box.<\/li>\n<li><code>https:\/\/cdn.bildirim.io\/sdk.js<\/code> and <code>https:\/\/cdn.bildirim.io\/bildirim-sw.js<\/code>\n\u2014 loaded by your visitors' browsers. The SDK talks to\n  https:\/\/api.bildirim.io to register subscriptions.<\/li>\n<\/ul>\n\n<p>Visitor data handled by Bildirim (push endpoint, browser, operating system,\ntime zone) is described in the\n<a href=\"https:\/\/bildirim.io\/gizlilik\">privacy policy<\/a> and the\n<a href=\"https:\/\/bildirim.io\/kosullar\">terms of service<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Settings \u2192 Bildirim<\/strong>.<\/li>\n<li>Paste the public key (<code>pk_\u2026<\/code>) from the Setup screen of your Bildirim\ndashboard and save. The key is verified immediately.<\/li>\n<li>Open the Setup screen in the dashboard and run \"Check installation\".<\/li>\n<\/ol>\n\n<p>If your filesystem is not writable, the plugin serves the service worker\nthrough a WordPress rewrite rule instead of a file. That path needs pretty\npermalinks; the settings page tells you which strategy is active and whether\nthe file is actually reachable.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20the%20manifest%20option%3F\"><h3>Do I need the manifest option?<\/h3><\/dt>\n<dd><p>Only for iPhone and iPad. iOS delivers push exclusively to sites the user added\nto their Home Screen, and that requires an installable manifest. Chrome,\nFirefox and Edge do not need it. Leave the option off if your site already has\nits own <code>manifest.json<\/code> \u2014 the plugin will not overwrite it.<\/p><\/dd>\n<dt id=\"why%20is%20the%20service%20worker%20written%20to%20the%20site%20root%20instead%20of%20uploads%3F\"><h3>Why is the service worker written to the site root instead of uploads?<\/h3><\/dt>\n<dd><p>Because a service worker can only control the paths below its own URL, and\nbrowsers refuse to load one from another origin. Bildirim's SDK registers\n    \/bildirim\/BildirimSDK-sw.js, and the server-side installation check requires\nexactly that path on your own domain, so the plugin cannot invent a location\nunder <code>wp-content\/uploads<\/code>.<\/p>\n\n<p>It is one 236-byte file in a single <code>bildirim\/<\/code> folder. The plugin uses the\n    WP_Filesystem API (never direct file functions), and if the filesystem is not\nwritable it does not fail: it falls back to serving the same bytes dynamically\nthrough a rewrite rule, so <strong>no write is required for the plugin to work<\/strong>. On\ndeactivation it removes that file and only that file, after checking the\ncontent for a Bildirim marker.<\/p><\/dd>\n<dt id=\"will%20deactivating%20the%20plugin%20delete%20my%20files%3F\"><h3>Will deactivating the plugin delete my files?<\/h3><\/dt>\n<dd><p>It removes the service worker file it created, and only that file: the content\nis checked for a Bildirim marker first, so a worker you replaced by hand stays\nwhere it is. Settings are removed on uninstall, and only if you left that\noption enabled.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20caching%20plugins%3F\"><h3>Does it work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes. The script tag carries exclusion attributes for the common optimisers and\nthe plugin registers their filters. If an optimiser still merges the tag, push\nkeeps working but SDK updates stop arriving \u2014 exclude it manually then.<\/p><\/dd>\n<dt id=\"how%20do%20i%20announce%20new%20posts%3F\"><h3>How do I announce new posts?<\/h3><\/dt>\n<dd><p>Go to <strong>Settings \u2192 Bildirim<\/strong> and press <strong>Enable sending from WordPress<\/strong>.\nBildirim verifies that this site really is yours (it asks your site for a\none-time code) and hands the plugin a send-only key \u2014 no dashboard visit, no\ncopying credentials by hand. A \"Bildirim\" box then appears on the post editor\nwith a send switch and channel checkboxes (Web \/ iOS \/ Android). Publish the\npost and it goes out; there is also a \"Send now\" button for posts that are\nalready published.<\/p><\/dd>\n<dt id=\"what%20can%20the%20key%20from%20%22enable%20sending%22%20do%3F\"><h3>What can the key from \"Enable sending\" do?<\/h3><\/dt>\n<dd><p>Only send notifications for this project. It cannot read your subscriber list,\nchange settings or create other keys. It is listed in the dashboard under\nSettings \u2192 Keys and can be revoked there at any time; the project owner also\ngets an email when it is issued.<\/p><\/dd>\n<dt id=\"will%20editing%20a%20post%20send%20a%20second%20notification%3F\"><h3>Will editing a post send a second notification?<\/h3><\/dt>\n<dd><p>No. A post is announced once; the box shows when it was sent. Use \"Send again\"\nif you really want a second notification.<\/p><\/dd>\n<dt id=\"why%20does%20my%20notification%20not%20go%20out%3F\"><h3>Why does my notification not go out?<\/h3><\/dt>\n<dd><p>The plugin shows the API's own message on the post screen. The most common one\nis the send gate: a project cannot broadcast until its domain is verified and\none test notification was delivered. Both are done from the dashboard's Setup\nscreen.<\/p><\/dd>\n<dt id=\"is%20the%20secret%20key%20safe%20in%20wordpress%3F\"><h3>Is the secret key safe in WordPress?<\/h3><\/dt>\n<dd><p>It is stored in your site's options table and shown masked. Treat it as a\ncredential: anyone who can administer this site can send notifications to your\nsubscribers with it. If the site is compromised, revoke the key from the\ndashboard \u2014 sending stops immediately.<\/p><\/dd>\n<dt id=\"is%20it%20multisite%20compatible%3F\"><h3>Is it multisite compatible?<\/h3><\/dt>\n<dd><p>Yes, with per-site settings: each site in the network uses its own public key,\nbecause a Bildirim project maps to one site.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Tested with WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Clarified in the readme that this is the official plugin of the Bildirim\nservice, operated by the plugin author.<\/li>\n<li>Documented why the service worker must live at <code>\/bildirim\/<\/code> on your own\ndomain, and that no filesystem write is required for the plugin to work.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fixed (critical): saving a post in the block editor failed with \"Sorry, you\nare not allowed to edit the _bildirim_sent_at custom field\" as soon as the\nBildirim panel was touched. The sent-at stamp was exposed as protected REST\nmeta; the editor sends the whole meta object back on save, and one unwritable\nkey rejects the entire request. The stamp is now a read-only REST field, so\nit can still be read but is never part of a write.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Fixed: in the block editor (Gutenberg) the send options were rendered as a\nclassic meta box far below the content and were easy to miss. They now appear\nas a \"Bildirim\" panel in the document sidebar, next to Publish.<\/li>\n<li>The box is shown even before sending is enabled, with a direct link to enable\nit - previously it was hidden entirely, so the feature was invisible.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: one-click \"Enable sending from WordPress\". The site proves it owns the\ndomain and receives a send-only key automatically \u2014 no more copying a secret\nkey from the dashboard.<\/li>\n<li>The editor's send box is ticked by default once sending is enabled (it stays\nvisible on every post, so you can still decide per post).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: announce posts from the editor. \"Send when published\" switch, per-channel\ncheckboxes (Web \/ iOS \/ Android), title\/text templates with placeholders, and\nthe featured image as the notification image.<\/li>\n<li>New: \"Send now\" button for already published posts.<\/li>\n<li>A post is announced at most once; the send request carries an idempotency key\nderived from the post, so a double publish hook cannot produce two\nnotifications.<\/li>\n<li>Failures are never silent: the API's own message is stored on the post and\nshown in the editor.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: SDK injection, service worker delivery (file with rewrite\nfallback), optional iOS manifest, key verification, installation self-test.<\/li>\n<\/ul>","raw_excerpt":"Add Bildirim web push to your WordPress site, and announce new posts to your subscribers without leaving the editor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356713"}],"author":[{"embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bildirim"}],"wp:attachment":[{"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356713"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356713"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356713"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356713"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356713"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}