{"id":4305,"date":"2024-03-27T17:08:40","date_gmt":"2024-03-27T23:08:40","guid":{"rendered":"https:\/\/cocoalopez.com\/blog\/?p=4305"},"modified":"2024-04-23T13:44:40","modified_gmt":"2024-04-23T19:44:40","slug":"mute-unwanted-headlines-and-images-from-websites","status":"publish","type":"post","link":"https:\/\/cocoalopez.com\/blog\/?p=4305","title":{"rendered":"Mute unwanted Headlines and Images from websites"},"content":{"rendered":"\n<p>Well it&#8217;s been a while, elections are coming and I don&#8217;t want to be reading bullshit about people I don&#8217;t care for, so made this quick TAMPERMONKEY script that will filter anything containing the words on the list and clear the website up for you.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1090\" style=\"aspect-ratio: 1102 \/ 1090;\" width=\"1102\" controls src=\"http:\/\/cocoalopez.com\/blog\/wp-content\/uploads\/2024\/03\/POP_VID_082_WORD_BLOCKER_03.mp4\"><\/video><\/figure>\n\n\n\n<p>With a little blur:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/ ==UserScript==<br>\/\/ @name         Word Blocker<br>\/\/ @namespace    http:\/\/tampermonkey.net\/<br>\/\/ @version      0.3<br>\/\/ @description  Block specific words on webpages<br>\/\/ @match        *:\/\/*\/*<br>\/\/ @grant        none<br>\/\/ @author       Edu Altamirano<br>\/\/ @website      https:\/\/www.cocoalopez.com\/blog<br>\/\/ @license MIT<br>\/\/ ==\/UserScript==<br><br>(function() {<br>    'use strict';<br><br>    \/\/ List of words to block<br>        var blockedWords = ['boluarte', 'milei', 'salinas', 'xochitl', 'netanyahu', 'israel', 'boluarte', 'ecuador', 'noboa', 'piqu\u00e9', 'sunak' ];<br><br>    \/\/ List of websites to filter<br>    var websitesToFilter = ['example.com', 'another-example.com'];<br><br>    \/\/ List of websites to exclude from filtering<br>    var excludedWebsites = ['excluded-example.com', 'another-excluded-example.com'];<br><br>    \/\/ User choice: 'all', 'list', or 'none'<br>    var userChoice = 'all'; \/\/ Change this to your preference<br><br>    \/\/ Function to check if an element contains a blocked word<br>    function containsBlockedWord(element) {<br>        var text = element.textContent.normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g, \"\").toLowerCase();<br>        for (var i = 0; i &lt; blockedWords.length; i++) {<br>            var blockedWord = blockedWords[i].normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g, \"\");<br>            if (text.includes(blockedWord)) {<br>                return true;<br>            }<br>        }<br>        return false;<br>    }<br><br><br>    \/\/ Function to hide elements containing blocked words<br>    function hideBlockedElements() {<br>        var elements = document.querySelectorAll('p, h1, h2, h3, h4, h5, h6, a, span');<br>        elements.forEach(function(element) {<br>            if (containsBlockedWord(element)) {<br>                \/\/ Cross out and color red the blocked words<br>                element.innerHTML = element.innerHTML.replace(new RegExp(blockedWords.join(\"|\"), \"gi\"), function(matched){<br>                    return '&lt;span style=\"color: red; text-decoration: line-through;\">' + matched + '&lt;\/span>';<br>                });<br><br>                \/\/ Wait a second, then add a blur effect before hiding the element<br>                setTimeout(function() {<br>                    element.style.transition = 'all 0.5s';<br>                    element.style.filter = 'blur(10px)';<br>                    setTimeout(function() {<br>                        element.style.display = 'none';<br>                    }, 500);<br>                }, 1000);<br><br>                \/\/ Also hide the closest parent div<br>                var parent = element.parentElement;<br>                while (parent) {<br>                    if (parent.tagName.toLowerCase() === 'div') {<br>                        (function(parent) {<br>                            setTimeout(function() {<br>                                parent.style.transition = 'all 0.5s';<br>                                parent.style.filter = 'blur(10px)';<br>                                setTimeout(function() {<br>                                    parent.style.display = 'none';<br>                                }, 500);<br>                            }, 1000);<br>                        })(parent);<br>                        break;<br>                    }<br>                    parent = parent.parentElement;<br>                }<br><br>                \/\/ Also hide any preceding img elements within the same parent element<br>                var sibling = element.previousElementSibling;<br>                while (sibling) {<br>                    if (sibling.tagName.toLowerCase() === 'img') {<br>                        (function(sibling) {<br>                            setTimeout(function() {<br>                                sibling.style.transition = 'all 0.5s';<br>                                sibling.style.filter = 'blur(10px)';<br>                                setTimeout(function() {<br>                                    sibling.style.display = 'none';<br>                                }, 500);<br>                            }, 1000);<br>                        })(sibling);<br>                    }<br>                    sibling = sibling.previousElementSibling;<br>                }<br>            }<br>        });<br><br>        \/\/ Hide img elements with alt text or sibling a element text containing blocked words<br>        var images = document.querySelectorAll('img');<br>        images.forEach(function(img) {<br>            var altText = img.alt.toLowerCase();<br>            for (var i = 0; i &lt; blockedWords.length; i++) {<br>                if (altText.includes(blockedWords[i])) {<br>                    setTimeout(function() {<br>                        img.style.transition = 'all 0.5s';<br>                        img.style.filter = 'blur(10px)';<br>                        setTimeout(function() {<br>                            img.style.display = 'none';<br>                        }, 500);<br>                    }, 1000);<br>                    break;<br>                }<br>            }<br><br>            var sibling = img.nextElementSibling;<br>            while (sibling) {<br>                if (sibling.tagName.toLowerCase() === 'a' &amp;&amp; containsBlockedWord(sibling)) {<br>                    (function(sibling) {<br>                        setTimeout(function() {<br>                            img.style.transition = 'all 0.5s';<br>                            img.style.filter = 'blur(10px)';<br>                            setTimeout(function() {<br>                                img.style.display = 'none';<br>                            }, 500);<br>                        }, 1000);<br>                    })(sibling);<br>                    break;<br>                }<br>                sibling = sibling.nextElementSibling;<br>            }<br>        });<br>    }<br><br>    \/\/ Check if the current website should be filtered<br>    function shouldFilterWebsite() {<br>        var currentWebsite = window.location.hostname;<br>        if (excludedWebsites.includes(currentWebsite)) {<br>            return false;<br>        } else if (userChoice === 'all' || (userChoice === 'list' &amp;&amp; websitesToFilter.includes(currentWebsite))) {<br>            return true;<br>        } else {<br>            return false;<br>        }<br>    }<br><br>    \/\/ Run the script after the DOM is fully loaded<br>    window.addEventListener('load', function() {<br>        if (shouldFilterWebsite()) {<br>            hideBlockedElements();<br>        }<br>    }, false);<br>})();<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">And if you want a second to see the muted words v0.2<\/h2>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"914\" style=\"aspect-ratio: 856 \/ 914;\" width=\"856\" controls src=\"https:\/\/cocoalopez.com\/blog\/wp-content\/uploads\/2024\/03\/POP_VID_082_WORD_BLOCKER_04.mp4\"><\/video><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/ ==UserScript==\n\/\/ @name         Word Blocker\n\/\/ @namespace    http:\/\/tampermonkey.net\/\n\/\/ @version      0.2\n\/\/ @description  Block specific words on webpages\n\/\/ @match        *:\/\/*\/*\n\/\/ @grant        none\n\/\/ @author       Edu Altamirano\n\/\/ @website      https:\/\/www.cocoalopez.com\/blog\n\/\/ @license MIT\n\/\/ ==\/UserScript==\n\n(function() {\n    'use strict';\n\n    \/\/ List of words to block\n        var blockedWords = ['boluarte', 'milei', 'salinas', 'Xochitl', 'X\u00f3chitl', 'Israel', 'Netanyahu', 'israel', 'X\u00f3chitl', 'xochitl', 'Milei', 'Boluarte', 'Israeli', 'Macron', 'macron', 'futbol', 'f\u00fatbol', 'Argentina', 'argentina'];\n\n    \/\/ List of websites to filter\n    var websitesToFilter = ['example.com', 'another-example.com'];\n\n    \/\/ List of websites to exclude from filtering\n    var excludedWebsites = ['excluded-example.com', 'another-excluded-example.com'];\n\n    \/\/ User choice: 'all', 'list', or 'none'\n    var userChoice = 'all'; \/\/ Change this to your preference\n\n    \/\/ Function to check if an element contains a blocked word\n    function containsBlockedWord(element) {\n        var text = element.textContent.toLowerCase();\n        for (var i = 0; i &lt; blockedWords.length; i++) {\n            if (text.includes(blockedWords[i])) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    \/\/ Function to hide elements containing blocked words\n    function hideBlockedElements() {\n        var elements = document.querySelectorAll('p, h1, h2, h3, h4, h5, h6, a, span');\n        elements.forEach(function(element) {\n            if (containsBlockedWord(element)) {\n                \/\/ Cross out and color red the blocked words\n                element.innerHTML = element.innerHTML.replace(new RegExp(blockedWords.join(\"|\"), \"gi\"), function(matched){\n                    return '&lt;span style=\"color: red; text-decoration: line-through;\"&gt;' + matched + '&lt;\/span&gt;';\n                });\n\n                \/\/ Wait a second, then add a blur effect before hiding the element\n                setTimeout(function() {\n                    element.style.transition = 'all 0.5s';\n                    element.style.filter = 'blur(10px)';\n                    setTimeout(function() {\n                        element.style.display = 'none';\n                    }, 500);\n                }, 1000);\n\n                \/\/ Also hide the closest parent div\n                var parent = element.parentElement;\n                while (parent) {\n                    if (parent.tagName.toLowerCase() === 'div') {\n                        (function(parent) {\n                            setTimeout(function() {\n                                parent.style.transition = 'all 0.5s';\n                                parent.style.filter = 'blur(10px)';\n                                setTimeout(function() {\n                                    parent.style.display = 'none';\n                                }, 500);\n                            }, 1000);\n                        })(parent);\n                        break;\n                    }\n                    parent = parent.parentElement;\n                }\n\n                \/\/ Also hide any preceding img elements within the same parent element\n                var sibling = element.previousElementSibling;\n                while (sibling) {\n                    if (sibling.tagName.toLowerCase() === 'img') {\n                        (function(sibling) {\n                            setTimeout(function() {\n                                sibling.style.transition = 'all 0.5s';\n                                sibling.style.filter = 'blur(10px)';\n                                setTimeout(function() {\n                                    sibling.style.display = 'none';\n                                }, 500);\n                            }, 1000);\n                        })(sibling);\n                    }\n                    sibling = sibling.previousElementSibling;\n                }\n            }\n        });\n\n        \/\/ Hide img elements with alt text or sibling a element text containing blocked words\n        var images = document.querySelectorAll('img');\n        images.forEach(function(img) {\n            var altText = img.alt.toLowerCase();\n            for (var i = 0; i &lt; blockedWords.length; i++) {\n                if (altText.includes(blockedWords[i])) {\n                    setTimeout(function() {\n                        img.style.transition = 'all 0.5s';\n                        img.style.filter = 'blur(10px)';\n                        setTimeout(function() {\n                            img.style.display = 'none';\n                        }, 500);\n                    }, 1000);\n                    break;\n                }\n            }\n\n            var sibling = img.nextElementSibling;\n            while (sibling) {\n                if (sibling.tagName.toLowerCase() === 'a' &amp;&amp; containsBlockedWord(sibling)) {\n                    (function(sibling) {\n                        setTimeout(function() {\n                            img.style.transition = 'all 0.5s';\n                            img.style.filter = 'blur(10px)';\n                            setTimeout(function() {\n                                img.style.display = 'none';\n                            }, 500);\n                        }, 1000);\n                    })(sibling);\n                    break;\n                }\n                sibling = sibling.nextElementSibling;\n            }\n        });\n    }\n\n    \/\/ Check if the current website should be filtered\n    function shouldFilterWebsite() {\n        var currentWebsite = window.location.hostname;\n        if (excludedWebsites.includes(currentWebsite)) {\n            return false;\n        } else if (userChoice === 'all' || (userChoice === 'list' &amp;&amp; websitesToFilter.includes(currentWebsite))) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    \/\/ Run the script after the DOM is fully loaded\n    window.addEventListener('load', function() {\n        if (shouldFilterWebsite()) {\n            hideBlockedElements();\n        }\n    }, false);\n})();\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Well it&#8217;s been a while, elections are coming and I don&#8217;t want to be reading bullshit about people I don&#8217;t care for, so made this quick TAMPERMONKEY script that will filter anything containing the words on the list and clear the website up for you. With a little blur: And if you want a second [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4308,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1002,31],"tags":[52,53,93,1159,1161,611,1160,1156,825,1157,1158],"class_list":["post-4305","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-featured","category-tips-y-tutoriales","tag-2d","tag-3d","tag-animacion","tag-colosio","tag-israel","tag-mexico","tag-netanyahu","tag-salinas","tag-scripts","tag-sheinbaum","tag-xochitl"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2024\/03\/image-4.png?fit=1036%2C949&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9XJix-17r","jetpack-related-posts":[{"id":4224,"url":"https:\/\/cocoalopez.com\/blog\/?p=4224","url_meta":{"origin":4305,"position":0},"title":"How to block twitter sidebar + trending topics","author":"cgmodeler","date":"November 25, 2023","format":false,"excerpt":"Updated 6 June 2023 Twitter can be a great source of connections, industry news and light-hearted fun (if you follow the right people!). Unfortunately, the \u201cWhat\u2019s happening\u201d trending topics sidebar can be a constant source of misery that by now can be simply too much to bear. If you\u2019d rather\u2026","rel":"","context":"In &quot;Tips y Tutoriales&quot;","block_context":{"text":"Tips y Tutoriales","link":"https:\/\/cocoalopez.com\/blog\/?cat=31"},"img":{"alt_text":"Twitter on Samsung tablet screen","src":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2023\/11\/czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvbHIvcHgxMDI4NTEzLWltYWdlLWt6MmR6dXN6LmpwZw.jpg?fit=1200%2C801&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2023\/11\/czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvbHIvcHgxMDI4NTEzLWltYWdlLWt6MmR6dXN6LmpwZw.jpg?fit=1200%2C801&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2023\/11\/czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvbHIvcHgxMDI4NTEzLWltYWdlLWt6MmR6dXN6LmpwZw.jpg?fit=1200%2C801&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2023\/11\/czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvbHIvcHgxMDI4NTEzLWltYWdlLWt6MmR6dXN6LmpwZw.jpg?fit=1200%2C801&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2023\/11\/czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvbHIvcHgxMDI4NTEzLWltYWdlLWt6MmR6dXN6LmpwZw.jpg?fit=1200%2C801&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4271,"url":"https:\/\/cocoalopez.com\/blog\/?p=4271","url_meta":{"origin":4305,"position":1},"title":"ADBLOCK anything that uses wildcards or random numbers","author":"cgmodeler","date":"January 24, 2024","format":false,"excerpt":"So recently I wanted to block the comments section on a website however the element blocking was not working as they used random strings at the end of the div ID. In this case the element appeared as: ###comment_iframe_65b14c04e9ff711034703604 Which when blocking will only block that page's iframe and leave\u2026","rel":"","context":"In &quot;Tips y Tutoriales&quot;","block_context":{"text":"Tips y Tutoriales","link":"https:\/\/cocoalopez.com\/blog\/?cat=31"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2024\/01\/image-1.png?fit=774%2C380&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2024\/01\/image-1.png?fit=774%2C380&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2024\/01\/image-1.png?fit=774%2C380&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2024\/01\/image-1.png?fit=774%2C380&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":2864,"url":"https:\/\/cocoalopez.com\/blog\/?p=2864","url_meta":{"origin":4305,"position":2},"title":"WP How to fix &#8220;Error establishing a database connection&#8221;","author":"cgmodeler","date":"July 19, 2019","format":false,"excerpt":"If you get the following error \"Error establishing a database connection\" Modify your wp-config.php and add the following line:define('WP_ALLOW_REPAIR', true);Reload your website, usually under \"wp-admin\/maint\/repair.php?\"If the repairs didn't go through and still get this message \" Some database problems could not be repaired. Please copy-and-paste the following list of errors\u2026","rel":"","context":"In &quot;Tips y Tutoriales&quot;","block_context":{"text":"Tips y Tutoriales","link":"https:\/\/cocoalopez.com\/blog\/?cat=31"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2019\/07\/wp-how-to-fix-error-establishing-a-database-connection.png?fit=829%2C474&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2019\/07\/wp-how-to-fix-error-establishing-a-database-connection.png?fit=829%2C474&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2019\/07\/wp-how-to-fix-error-establishing-a-database-connection.png?fit=829%2C474&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2019\/07\/wp-how-to-fix-error-establishing-a-database-connection.png?fit=829%2C474&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":1600,"url":"https:\/\/cocoalopez.com\/blog\/?p=1600","url_meta":{"origin":4305,"position":3},"title":"Gradint programa para aprender lenguajes extranjeros.","author":"cgmodeler","date":"January 9, 2013","format":false,"excerpt":"Gradint is a program that can be used to make your own self-study audio tapes for learning foreign-language vocabulary.\u2002You can use it to help with a course, to prepare for speaking assignments, or just to keep track of the vocabulary you come across. The method: Gradint uses a variant of\u2026","rel":"","context":"In &quot;Featured&quot;","block_context":{"text":"Featured","link":"https:\/\/cocoalopez.com\/blog\/?cat=1002"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2013\/01\/0v1esetKqD.png?fit=553%2C355&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2013\/01\/0v1esetKqD.png?fit=553%2C355&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2013\/01\/0v1esetKqD.png?fit=553%2C355&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3446,"url":"https:\/\/cocoalopez.com\/blog\/?p=3446","url_meta":{"origin":4305,"position":4},"title":"Forget about Youtube, Napster for video is here (LBRY)","author":"cgmodeler","date":"March 12, 2022","format":false,"excerpt":"So after all this round of censorship, found this amazing protocol\/app that works for a P2P based video streaming. Pretty much like if Youtube and Napster had a baby and it's called LBRY. With normal client and web browser Basically the protocol which is based on the blockchain (torrent, bitcoin)\u2026","rel":"","context":"In &quot;Featured&quot;","block_context":{"text":"Featured","link":"https:\/\/cocoalopez.com\/blog\/?cat=1002"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2022\/03\/imagen-2.png?fit=855%2C925&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2022\/03\/imagen-2.png?fit=855%2C925&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2022\/03\/imagen-2.png?fit=855%2C925&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2022\/03\/imagen-2.png?fit=855%2C925&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":4595,"url":"https:\/\/cocoalopez.com\/blog\/?p=4595","url_meta":{"origin":4305,"position":5},"title":"Tampermonkey Block BOTS from twitter","author":"cgmodeler","date":"July 3, 2025","format":false,"excerpt":"This tampermonkey script will block any bot from appearing on your timeline. Use tampermonkey for it to work. https:\/\/greasyfork.org\/en\/scripts\/541560-twitter-x-bot-and-flag-post-hider","rel":"","context":"In &quot;Featured&quot;","block_context":{"text":"Featured","link":"https:\/\/cocoalopez.com\/blog\/?cat=1002"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2025\/07\/image.png?fit=947%2C665&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2025\/07\/image.png?fit=947%2C665&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2025\/07\/image.png?fit=947%2C665&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/cocoalopez.com\/blog\/wp-content\/uploads\/2025\/07\/image.png?fit=947%2C665&ssl=1&resize=700%2C400 2x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4305"}],"version-history":[{"count":7,"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4305\/revisions"}],"predecessor-version":[{"id":4330,"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4305\/revisions\/4330"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=\/wp\/v2\/media\/4308"}],"wp:attachment":[{"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cocoalopez.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}