{"id":297581,"date":"2026-05-12T18:18:33","date_gmt":"2026-05-12T18:18:33","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/constructive-news\/"},"modified":"2026-05-12T18:23:45","modified_gmt":"2026-05-12T18:23:45","slug":"constructive-news","status":"publish","type":"plugin","link":"https:\/\/cy.wordpress.org\/plugins\/constructive-news\/","author":23468232,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Constructive News","header_author":"Jonathan Widder","header_description":"The plugins display constructive \/ solutions-focused news stories from a variety of trustworthy sources in Gutenberg blocks using the Squirrel News content service.","assets_banners_color":"","last_updated":"2026-05-12 18:23:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"http:\/\/constructive-news.org\/","header_author_uri":"https:\/\/squirrel-news.net\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":33,"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":"squirrelnews","date":"2026-05-12 18:23:45"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"pnp\/list-block":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pnp\/list-block","title":"Constructive News List","category":"constructive-news","icon":"list-view","example":{"attributes":{"limit":3,"imageWidth":60,"imageHeight":60,"titleFontSize":14,"titleTransform":"uppercase"}},"description":"A compact constructive news list with images on the left.","textdomain":"constructive-news","attributes":{"isEditor":{"type":"boolean","default":false},"limit":{"type":"number","default":3},"language":{"type":"string"},"maxWidth":{"type":"number","default":800},"elementGap":{"type":"number","default":20},"showImage":{"type":"boolean","default":true},"imageWidth":{"type":"number","default":80},"imageHeight":{"type":"number","default":80},"imageTextGap":{"type":"number","default":15},"primaryColor":{"type":"string","default":"#1a1a1a"},"titleFontSize":{"type":"number","default":14},"titleFontWeight":{"type":"boolean","default":true},"titleTransform":{"type":"string","default":"uppercase"},"titleColor":{"type":"string","default":"#1a1a1a"},"titleAlignment":{"type":"string","default":"left"},"titleItalic":{"type":"boolean","default":false},"showTeaser":{"type":"boolean","default":false},"teaserFontSize":{"type":"number","default":13},"teaserColor":{"type":"string","default":"#555555"},"teaserBold":{"type":"boolean","default":false},"teaserItalic":{"type":"boolean","default":false},"teaserAlignment":{"type":"string","default":"left"},"teaserCharacterCount":{"type":"number","default":100},"showSource":{"type":"boolean","default":true},"sourcePosition":{"type":"string","default":"above"},"sourceFontSize":{"type":"number","default":11},"sourceColor":{"type":"string","default":"#888888"},"sourceBold":{"type":"boolean","default":true},"sourceItalic":{"type":"boolean","default":false},"sourceAlignment":{"type":"string","default":"left"},"autoRotate":{"type":"boolean","default":false},"rotateDuration":{"type":"number","default":5},"brandingAlignment":{"type":"string","default":"left"},"brandingEnableLink":{"type":"boolean","default":true},"showDonate":{"type":"boolean","default":true},"showBlockTitle":{"type":"boolean","default":true},"blockTitle":{"type":"string"},"blockTitleFontSize":{"type":"number","default":24},"blockTitleColor":{"type":"string","default":"#1a1a1a"},"blockTitleBold":{"type":"boolean","default":true},"blockTitleItalic":{"type":"boolean","default":false},"blockTitleAlignment":{"type":"string","default":"left"}},"editorScript":"file:.\/index.js","style":"file:.\/index.css","viewScript":"file:.\/view.js"},"pnp\/card-block":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pnp\/card-block","title":"Constructive News Card","category":"constructive-news","icon":"cover-image","example":{"attributes":{"limit":1,"imageWidth":300,"imageHeight":200,"cardBgColor":"#f3eee4"}},"description":"Magazine-style cards for constructive news with images on top and equal-height text boxes.","textdomain":"constructive-news","attributes":{"isEditor":{"type":"boolean","default":false},"limit":{"type":"number","default":3},"language":{"type":"string"},"maxWidth":{"type":"number","default":1200},"elementGap":{"type":"number","default":20},"showImage":{"type":"boolean","default":true},"imageWidth":{"type":"number","default":300},"imageHeight":{"type":"number","default":200},"imageTextGap":{"type":"number","default":0},"cardBgColor":{"type":"string","default":"#f3eee4"},"primaryColor":{"type":"string","default":"#22c55e"},"titleColor":{"type":"string","default":"#1a1a1a"},"titleFontSize":{"type":"number","default":18},"titleFontWeight":{"type":"boolean","default":true},"titleItalic":{"type":"boolean","default":false},"titleTransform":{"type":"string","default":"none"},"titleAlignment":{"type":"string","default":"left"},"showTeaser":{"type":"boolean","default":false},"teaserFontSize":{"type":"number","default":14},"teaserCharacterCount":{"type":"number","default":100},"teaserColor":{"type":"string","default":"#555555"},"teaserBold":{"type":"boolean","default":false},"teaserItalic":{"type":"boolean","default":false},"teaserAlignment":{"type":"string","default":"left"},"showSource":{"type":"boolean","default":true},"sourcePosition":{"type":"string","default":"above"},"sourceFontSize":{"type":"number","default":11},"sourceColor":{"type":"string","default":"#888888"},"sourceBold":{"type":"boolean","default":true},"sourceItalic":{"type":"boolean","default":false},"sourceAlignment":{"type":"string","default":"left"},"autoRotate":{"type":"boolean","default":false},"rotateDuration":{"type":"number","default":5},"brandingAlignment":{"type":"string","default":"center"},"brandingEnableLink":{"type":"boolean","default":true},"showDonate":{"type":"boolean","default":true},"showBlockTitle":{"type":"boolean","default":true},"blockTitle":{"type":"string"},"blockTitleAlignment":{"type":"string","default":"center"},"blockTitleFontSize":{"type":"number","default":32},"blockTitleColor":{"type":"string","default":"#1a1a1a"},"blockTitleBold":{"type":"boolean","default":true},"blockTitleItalic":{"type":"boolean","default":false}},"editorScript":"file:.\/index.js","style":"file:.\/index.css","viewScript":"file:.\/view.js"},"pnp\/grid-block":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pnp\/grid-block","title":"Constructive News Grid","description":"Magazine-style grid cards for constructive news stories.","category":"constructive-news","icon":"grid-view","example":{"attributes":{"columns":2,"limit":4,"imagePercent":80}},"attributes":{"isEditor":{"type":"boolean","default":false},"limit":{"type":"number","default":6},"language":{"type":"string"},"columns":{"type":"number","default":3},"maxWidth":{"type":"number","default":700},"elementGap":{"type":"number","default":30},"showImage":{"type":"boolean","default":true},"imagePercent":{"type":"number","default":60},"imageTextGap":{"type":"number","default":15},"cardBgColor":{"type":"string","default":"#f3eee4"},"primaryColor":{"type":"string","default":"#22c55e"},"titleFontSize":{"type":"number","default":16},"titleFontWeight":{"type":"boolean","default":true},"titleTransform":{"type":"string","default":"none"},"titleColor":{"type":"string","default":"#1a1a1a"},"titleItalic":{"type":"boolean","default":false},"titleAlignment":{"type":"string","default":"center"},"showTeaser":{"type":"boolean","default":false},"teaserFontSize":{"type":"number","default":14},"teaserCharacterCount":{"type":"number","default":100},"teaserColor":{"type":"string","default":"#555555"},"teaserBold":{"type":"boolean","default":false},"teaserItalic":{"type":"boolean","default":false},"teaserAlignment":{"type":"string","default":"center"},"showSource":{"type":"boolean","default":true},"sourcePosition":{"type":"string","default":"above"},"sourceFontSize":{"type":"number","default":11},"sourceColor":{"type":"string","default":"#888888"},"sourceBold":{"type":"boolean","default":true},"sourceItalic":{"type":"boolean","default":false},"sourceAlignment":{"type":"string","default":"center"},"autoRotate":{"type":"boolean","default":false},"rotateDuration":{"type":"number","default":5},"brandingAlignment":{"type":"string","default":"center"},"brandingEnableLink":{"type":"boolean","default":true},"showDonate":{"type":"boolean","default":true},"showBlockTitle":{"type":"boolean","default":true},"blockTitle":{"type":"string"},"blockTitleAlignment":{"type":"string","default":"center"},"blockTitleFontSize":{"type":"number","default":32},"blockTitleColor":{"type":"string","default":"#1a1a1a"},"blockTitleBold":{"type":"boolean","default":true},"blockTitleItalic":{"type":"boolean","default":false}},"editorScript":"file:.\/index.js","style":"file:.\/index.css","viewScript":"file:.\/view.js"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[4121,529,148076,1248,1751],"plugin_category":[],"plugin_contributors":[262720],"plugin_business_model":[],"class_list":["post-297581","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-content","plugin_tags-gutenberg","plugin_tags-news","plugin_tags-positive","plugin_contributors-squirrelnews","plugin_committers-squirrelnews"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/constructive-news.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Constructive News provides three different Gutenberg blocks showing teasers of constructive \/ solutions-focused news stories from a variety of different media sources, including links to the original articles on the websites of the corresponding media. The idea is not help website owners get (positive) content (news teasers) on their blogs and websites.<\/p>\n\n<p>For this purpose they can choose among three Gutenberg blocks:<\/p>\n\n<ul>\n<li>Constructive News Card<\/li>\n<li>Constructive News Grid<\/li>\n<li>Constructive News List<\/li>\n<\/ul>\n\n<p>All articles are thoroughly handpicked by the editorial team of Squirrel News. Squirrel News is run by the German nonprofit Constructive News e.V.<\/p>\n\n<p>This plugin is published by Jonathan Widder for Squirrel News \/ Constructive News e.V. and developed by Anouar Ben Hamza.<\/p>\n\n<h3>Getting started<\/h3>\n\n<p>To get started, activate the plugin, choose the language on the <strong>Constructive News<\/strong> settings page, then insert one of the Constructive News blocks into a post or page.<\/p>\n\n<p><strong>Language note:<\/strong> English and German content are fetched from completely different source pools and countries, so switching the language will change the geographic focus and sources of the articles.<\/p>\n\n<h3>Use of external service<\/h3>\n\n<p>This plugin is a <strong>service-based plugin<\/strong>.\nIt connects to an external content service to fetch article data:<\/p>\n\n<ul>\n<li>Endpoint: <code>https:\/\/getarticlesforlastissues-mdlzfg63qq-uc.a.run.app<\/code><\/li>\n<li>Query parameters sent by the plugin: <code>lang<\/code> and <code>limit<\/code><\/li>\n<\/ul>\n\n<p>Without the external service response, the plugin cannot fetch fresh article content and does not work.<\/p>\n\n<h3>Service and Privacy Disclosure<\/h3>\n\n<p>This plugin performs outbound requests to the Squirrel News content service to retrieve article data.<\/p>\n\n<p>The service is operated by Squirrel News for Constructive News e.V. and is used to deliver the curated article data shown by the plugin blocks.<\/p>\n\n<p>The plugin sends requests to the external service whenever a Constructive News block is rendered and needs article data, including in the block editor preview and on the frontend.<\/p>\n\n<p>Data sent to the service:<\/p>\n\n<ul>\n<li>The selected content language (<code>en<\/code> or <code>de<\/code>)<\/li>\n<li>The requested article limit<\/li>\n<li>Technical request data sent by normal HTTP requests, such as the visitor IP address, user agent, and request timing<\/li>\n<\/ul>\n\n<p>Why this data is sent:<\/p>\n\n<ul>\n<li>To request the correct article feed<\/li>\n<li>To return the requested number of curated articles<\/li>\n<li>To allow the remote service to respond and operate securely<\/li>\n<\/ul>\n\n<p>Service links:<\/p>\n\n<ul>\n<li>Privacy Policy: <code>https:\/\/squirrel-news.net\/privacy-policy\/<\/code><\/li>\n<li>Legal notice \/ service terms information: <code>https:\/\/squirrel-news.net\/imprint\/<\/code><\/li>\n<\/ul>\n\n<p>Plugin settings data stored locally in WordPress:<\/p>\n\n<ul>\n<li>Selected language (<code>en<\/code> or <code>de<\/code>)<\/li>\n<li>Cached API payloads for performance\/fallback<\/li>\n<\/ul>\n\n<p>External links rendered on the frontend can point to:<\/p>\n\n<ul>\n<li>Squirrel News website<\/li>\n<li>Squirrel News support page<\/li>\n<li>Third-party publisher article URLs<\/li>\n<\/ul>\n\n<p>Site owners should review and publish their own privacy disclosures as needed for their jurisdiction and site policy.<\/p>\n\n<h3>Development<\/h3>\n\n<p>The distributed plugin includes the original, human-readable source files used to build the JavaScript and CSS assets.<\/p>\n\n<p>Included source and build files:<\/p>\n\n<ul>\n<li><code>src\/<\/code> contains the original block editor and frontend source code<\/li>\n<li><code>build\/<\/code> contains the compiled production assets used by WordPress<\/li>\n<li><code>package.json<\/code> contains the build commands and dependencies<\/li>\n<\/ul>\n\n<p>Build tools:<\/p>\n\n<ul>\n<li><code>npm<\/code><\/li>\n<li><code>@wordpress\/scripts<\/code><\/li>\n<\/ul>\n\n<p>To rebuild the generated assets:<\/p>\n\n<ol>\n<li>Run <code>npm install<\/code><\/li>\n<li>Run <code>npm run build<\/code><\/li>\n<\/ol>\n\n<h3>Developer Hooks<\/h3>\n\n<p>The plugin includes filters for customization without editing core files.<\/p>\n\n<p>API filters:\n* <code>constructnews_api_lang<\/code>\n* <code>constructnews_api_limit<\/code>\n* <code>constructnews_api_payload<\/code>\n* <code>constructnews_api_base_url<\/code>\n* <code>constructnews_api_request_args<\/code>\n* <code>constructnews_api_articles<\/code><\/p>\n\n<p>Card block filters:\n* <code>constructnews_card_block_lang<\/code>\n* <code>constructnews_card_labels<\/code>\n* <code>constructnews_card_behavior_flags<\/code>\n* <code>constructnews_card_styles<\/code>\n* <code>constructnews_card_articles_prepared<\/code>\n* <code>constructnews_card_display_articles<\/code>\n* <code>constructnews_card_plan<\/code><\/p>\n\n<p>Grid block filters:\n* <code>constructnews_grid_block_lang<\/code>\n* <code>constructnews_grid_labels<\/code>\n* <code>constructnews_grid_behavior_flags<\/code>\n* <code>constructnews_grid_styles<\/code>\n* <code>constructnews_grid_articles_prepared<\/code>\n* <code>constructnews_grid_display_articles<\/code>\n* <code>constructnews_grid_plan<\/code><\/p>\n\n<p>List block filters:\n* <code>constructnews_list_block_lang<\/code>\n* <code>constructnews_list_labels<\/code>\n* <code>constructnews_list_behavior_flags<\/code>\n* <code>constructnews_list_styles<\/code>\n* <code>constructnews_list_articles_prepared<\/code>\n* <code>constructnews_list_display_articles<\/code>\n* <code>constructnews_list_plan<\/code><\/p>\n\n<p>Example:<\/p>\n\n<pre><code>add_filter( 'constructnews_api_limit', function( $limit ) { return 10; } );\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via the WordPress admin.<\/li>\n<li>Activate <strong>Constructive News<\/strong>.<\/li>\n<li>Go to <strong>Constructive News<\/strong> in wp-admin and select language.<\/li>\n<li>Insert one of the Constructive News blocks in the block editor.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20an%20external%20service%3F\"><h3>Does this plugin require an external service?<\/h3><\/dt>\n<dd><p>Yes. Fresh content is fetched from the Squirrel News content API service every 2-3 days.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20without%20api%20keys%3F\"><h3>Does the plugin work without API keys?<\/h3><\/dt>\n<dd><p>Yes. No API key is required in the current version.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20the%20service%3F\"><h3>What data is sent to the service?<\/h3><\/dt>\n<dd><p>The plugin sends language and limit values as query parameters. Standard HTTP request metadata is also transmitted by normal web requests.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Display constructive news in Gutenberg blocks using the Squirrel News content service.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/297581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=297581"}],"author":[{"embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/squirrelnews"}],"wp:attachment":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=297581"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=297581"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=297581"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=297581"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=297581"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=297581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}