{"id":393775,"date":"2026-11-01T19:56:02","date_gmt":"2026-11-01T19:56:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/negah-contact-hub\/"},"modified":"2026-11-01T20:41:54","modified_gmt":"2026-11-01T20:41:54","slug":"negah-contact-hub","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/negah-contact-hub\/","author":23594244,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.4","requires":"6.0","requires_php":"7.2","requires_plugins":null,"header_name":"Negah Contact Hub","header_author":"Hamid Jafari","header_description":"Floating contact button with a desktop panel and a full-width sticky mobile bar. Built for Persian and RTL sites: Bale messenger, Iranian phone-number normalisation, and native app hand-off for WhatsApp and Telegram.","assets_banners_color":"6b6c6e","last_updated":"2026-11-01 20:41:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/negah.agency\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":79,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"hamidjafari31","date":"2026-11-01 20:32:55","revision":3778537},"1.0.1":{"tag":"1.0.1","author":"hamidjafari31","date":"2026-11-01 20:41:54","revision":3778539}},"upgrade_notice":{"1.0.1":"<p>Fixes WhatsApp links copied from WhatsApp Web opening the browser instead of the app.<\/p>","1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3778503,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3778503,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3778503,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3778503,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3778537,"resolution":"1","location":"assets","locale":"","width":662,"height":321},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3778537,"resolution":"2","location":"assets","locale":"","width":397,"height":598},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3778537,"resolution":"3","location":"assets","locale":"","width":558,"height":748},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3778537,"resolution":"4","location":"assets","locale":"","width":562,"height":744},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3778537,"resolution":"5","location":"assets","locale":"","width":954,"height":814}},"screenshots":{"1":"The round floating button and its label on a desktop page.","2":"The desktop panel open, showing every channel the site owner enabled.","3":"The full-width sticky bar pinned to the bottom of a page on a phone.","4":"The sheet slid up from that bar, with each channel ready to tap.","5":"The settings screen, where each channel gets a title, an optional line under it, and a value."}},"plugin_section":[],"plugin_tags":[273281,2734,5811,15526,3160],"plugin_category":[],"plugin_contributors":[290124],"plugin_business_model":[],"class_list":["post-393775","plugin","type-plugin","status-publish","hentry","plugin_tags-bale","plugin_tags-contact-button","plugin_tags-rtl","plugin_tags-sticky-bar","plugin_tags-whatsapp","plugin_contributors-hamidjafari31","plugin_committers-hamidjafari31"],"banners":{"banner":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/banner-772x250.png?rev=3778503","banner_2x":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/banner-1544x500.png?rev=3778503","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/icon-128x128.png?rev=3778503","icon_2x":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/icon-256x256.png?rev=3778503","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/screenshot-1.png?rev=3778537","caption":"The round floating button and its label on a desktop page."},{"src":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/screenshot-2.png?rev=3778537","caption":"The desktop panel open, showing every channel the site owner enabled."},{"src":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/screenshot-3.png?rev=3778537","caption":"The full-width sticky bar pinned to the bottom of a page on a phone."},{"src":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/screenshot-4.png?rev=3778537","caption":"The sheet slid up from that bar, with each channel ready to tap."},{"src":"https:\/\/ps.w.org\/negah-contact-hub\/assets\/screenshot-5.png?rev=3778537","caption":"The settings screen, where each channel gets a title, an optional line under it, and a value."}],"raw_content":"<!--section=description-->\n<p>Negah Contact Hub puts your contact channels one tap away. On desktop it is a round floating button that opens a small panel. On phones it can instead be a full-width bar pinned to the bottom of the screen that slides a sheet up when tapped, which is far easier to notice and reach than a corner button.<\/p>\n\n<p>It was written for Persian and other right-to-left sites, and that shapes what it does differently from a generic contact-button plugin:<\/p>\n\n<ul>\n<li><strong>Bale messenger is a first-class channel.<\/strong> Bale is widely used in Iran and is rarely supported elsewhere. Enter a username, a <code>join\/XXXX<\/code> invite, or a full link and the plugin builds the correct <code>https:\/\/ble.ir\/<\/code> address.<\/li>\n<li><strong>Iranian phone numbers are normalised.<\/strong> Type <code>09121234567<\/code> in the WhatsApp field and the plugin converts it to the international form WhatsApp expects. Persian and Arabic-Indic digits are accepted everywhere a number is asked for.<\/li>\n<li><strong>Taps open the app, not the web client.<\/strong> On Android the plugin uses an <code>intent:\/\/<\/code> URL carrying a browser fallback, so a visitor without the app is returned to the web link by the operating system instead of hitting an error page. On iOS it switches to the native scheme and falls back to the web link on a timer. This is what stops WhatsApp links from landing on the <code>web.whatsapp.com<\/code> QR screen.<\/li>\n<li><strong>Right-to-left by default.<\/strong> Layout direction, flex order and the number direction inside each line follow the site's own direction, and the widget inherits the theme's font rather than loading one.<\/li>\n<\/ul>\n\n<h4>Built to stay out of the way<\/h4>\n\n<ul>\n<li>No jQuery, no external CSS or JavaScript files, no web fonts, no outside requests of any kind.<\/li>\n<li>Styles and script are added inline through the standard enqueue API, and only on pages where the widget is actually shown.<\/li>\n<li>Icons are inline SVG, so there is no icon font to download.<\/li>\n<li>The optional attention effects animate only <code>transform<\/code> and <code>opacity<\/code>, so they run on the compositor and never force a layout recalculation. They pause while the panel is open and switch off automatically for visitors who have asked their device for reduced motion.<\/li>\n<li>Nothing is tracked, logged or sent anywhere. The plugin stores one option row and nothing else.<\/li>\n<\/ul>\n\n<h4>Channels<\/h4>\n\n<p>Two phone numbers, WhatsApp, Telegram, Bale and a map location. Each one has its own title, an optional short line underneath, a value or link, and a sort order. Any channel left empty is simply not rendered.<\/p>\n\n<h4>Accessibility<\/h4>\n\n<p>The panel is a labelled dialog, the triggers report their expanded state, every control is reachable by keyboard, Escape closes the panel, and focus outlines are preserved.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not contact any external service. It makes no HTTP requests of\nits own, bundles no remote scripts, stylesheets or fonts, and sends no data\nanywhere. Nothing about your site or your visitors is transmitted by the plugin,\nand no analytics or tracking of any kind is performed.<\/p>\n\n<p>What the plugin does is build ordinary outbound links from the contact details\nyou enter in its settings, and render them as a button or bar. A link is\nfollowed only when a visitor deliberately taps or clicks it, and the visitor's\nbrowser or app then connects to that service directly, exactly as it would for\nany link you placed in a post. No data is sent before that point, and the plugin\nsends nothing itself at any point.<\/p>\n\n<p>The destinations below are the ones the plugin can build links to. Which of them\nappear on your site, if any, is entirely up to the details you fill in; a\nchannel you leave empty is never rendered and never linked to.<\/p>\n\n<ul>\n<li><p>WhatsApp - if you fill in the WhatsApp field, the plugin builds a wa.me link\nfrom the number you entered. A visitor who taps it is taken to WhatsApp to\nstart a chat with that number, carrying the number and nothing else.\nTerms of service: https:\/\/www.whatsapp.com\/legal\/terms-of-service\nPrivacy policy: https:\/\/www.whatsapp.com\/legal\/privacy-policy<\/p><\/li>\n<li><p>Telegram - if you fill in the Telegram field, the plugin builds a t.me link\nfrom the username or invite link you entered. A visitor who taps it is taken\nto Telegram to open that chat, channel or group.\nTerms of service: https:\/\/telegram.org\/tos\nPrivacy policy: https:\/\/telegram.org\/privacy<\/p><\/li>\n<li><p>Bale - if you fill in the Bale field, the plugin builds a ble.ir link from the\nusername or invite path you entered. Bale is a messaging platform used mainly\nin Iran. A visitor who taps it is taken to Bale to open that chat, channel or\ngroup.\nTerms of service: https:\/\/bale.ai\/terms\nPrivacy policy: https:\/\/bale.ai\/terms - Bale publishes a single legal\ndocument and its privacy terms are sections of that page, so the two links\nare the same.<\/p><\/li>\n<li><p>A map of your choice - the location field takes a complete map link that you\nsupply yourself, for whichever map provider you prefer. The plugin stores and\nrenders that link as given and does not add anything to it. A visitor who taps\nit is taken to that provider, whose own terms and privacy policy then apply.<\/p><\/li>\n<\/ul>\n\n<p>Phone numbers are not an external service: they become a tel: link that hands\nthe number to the visitor's own dialler.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin go to Plugins \u2192 Add New \u2192 Upload Plugin and choose the zip file, or search for \"Negah Contact Hub\" in the plugin directory.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to Settings \u2192 Contact Hub, fill in the channels you use, and save.<\/li>\n<\/ol>\n\n<p>Nothing is displayed on the front end until at least one channel has a value.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"tapping%20whatsapp%20opens%20the%20web%20version%20and%20asks%20me%20to%20scan%20a%20qr%20code.%20why%3F\"><h3>Tapping WhatsApp opens the web version and asks me to scan a QR code. Why?<\/h3><\/dt>\n<dd><p>That happens when the link is opened in a new tab, which prevents the operating system from handing it to the app, or when the page is being viewed inside another app's in-app browser such as Instagram's. This plugin removes the new-tab behaviour on phones and switches to the native app link, which fixes the first case. The in-app browser case cannot be fixed from a website; for traffic coming from Instagram, put the WhatsApp link in your bio instead.<\/p><\/dd>\n<dt id=\"what%20do%20i%20enter%20in%20the%20bale%20field%3F\"><h3>What do I enter in the Bale field?<\/h3><\/dt>\n<dd><p>A username without the @, an invite path such as <code>join\/XXXXXXXX<\/code> for a group or channel, or a complete <code>https:\/\/ble.ir\/...<\/code> link. Bale does not publish a custom URL scheme, so the plugin uses the standard https link, which the Bale app registers on both Android and iOS.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20on%20a%20left-to-right%20site%3F\"><h3>Can I use it on a left-to-right site?<\/h3><\/dt>\n<dd><p>Yes. The widget follows whatever direction the site is set to. The Persian-specific conveniences, such as converting a leading zero to a country code, only apply when you type a local number; an international number entered with a <code>+<\/code> is left alone.<\/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 markup is identical for every visitor and the device-specific behaviour is decided in the browser, so a cached page behaves the same as an uncached one.<\/p><\/dd>\n<dt id=\"how%20do%20i%20change%20the%20mobile%20layout%20back%20to%20a%20round%20button%3F\"><h3>How do I change the mobile layout back to a round button?<\/h3><\/dt>\n<dd><p>Settings \u2192 Contact Hub \u2192 Mobile \u2192 Mobile layout, and pick the round floating button.<\/p><\/dd>\n<dt id=\"will%20the%20sticky%20bar%20cover%20my%20footer%3F\"><h3>Will the sticky bar cover my footer?<\/h3><\/dt>\n<dd><p>There is a setting that adds matching space to the end of the page so it does not. If your theme already reserves space at the bottom, turn that setting off.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>A WhatsApp number pasted as a web.whatsapp.com or api.whatsapp.com address is now rewritten to the wa.me form, so a tap on a phone opens the app instead of the web client. Any prefilled message in the link is kept.<\/li>\n<li>Telegram links written against the older telegram.me host are normalised to t.me, which is the host the app registers.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Floating contact button and sticky mobile bar for Persian and RTL sites, with Bale, WhatsApp, Telegram, phone and map links.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/393775","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=393775"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hamidjafari31"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=393775"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=393775"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=393775"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=393775"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=393775"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=393775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}