{"id":370567,"date":"2026-09-24T11:52:18","date_gmt":"2026-09-24T11:52:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mediagraph\/"},"modified":"2026-09-24T11:52:00","modified_gmt":"2026-09-24T11:52:00","slug":"mediagraph","status":"publish","type":"plugin","link":"https:\/\/hsb.wordpress.org\/plugins\/mediagraph\/","author":23567980,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.1","stable_tag":"2.1.1","tested":"7.1.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Mediagraph","header_author":"Mediagraph","header_description":"Browse, search, and insert assets from your Mediagraph library directly inside the WordPress editor. Mediagraph assets become ordinary WordPress attachments, so every native block control keeps working.","assets_banners_color":"42566b","last_updated":"2026-09-24 11:52:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.mediagraph.io\/wordpress-plugin","header_author_uri":"https:\/\/www.mediagraph.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":56,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.1.1":{"tag":"2.1.1","author":"damsoftware","date":"2026-09-24 11:52:00","revision":3711214}},"upgrade_notice":{"2.1.0":"<p>Housekeeping and interface fixes. The package now ships the JavaScript sources\nand build tooling, and the readme documents exactly what the plugin sends to\nMediagraph. Sites that do not want post body text leaving WordPress can now set\nthe mediagraph_article_text_limit filter to 0.<\/p>","2.0.0":"<p>Major rewrite. Existing posts are unaffected and existing connections are kept.\nNewly inserted assets now become native WordPress blocks, so all standard image\ncontrols work. Legacy Mediagraph blocks keep rendering and can be converted\nin-place from the editor toolbar.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3711239,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3711239,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3711239,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3711239,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3711239,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"mediagraph\/asset-picker":{"name":"mediagraph\/asset-picker","title":"Mediagraph asset (legacy)"}},"tagged_versions":["2.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[14169,14168,210,163,84],"plugin_category":[50],"plugin_contributors":[282492],"plugin_business_model":[],"class_list":["post-370567","plugin","type-plugin","status-publish","hentry","plugin_tags-dam","plugin_tags-digital-asset-management","plugin_tags-gallery","plugin_tags-images","plugin_tags-media","plugin_category-media","plugin_contributors-damsoftware","plugin_committers-damsoftware"],"banners":{"banner":"https:\/\/ps.w.org\/mediagraph\/assets\/banner-772x250.png?rev=3711239","banner_2x":"https:\/\/ps.w.org\/mediagraph\/assets\/banner-1544x500.png?rev=3711239","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/mediagraph\/assets\/icon.svg?rev=3711239","icon":"https:\/\/ps.w.org\/mediagraph\/assets\/icon.svg?rev=3711239","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This plugin connects your WordPress site to your Mediagraph digital asset\nlibrary. Editors browse collections, storage folders, and lightboxes from inside\nthe editor and insert assets in a couple of clicks.<\/p>\n\n<p>This plugin is a client for Mediagraph, a paid third-party digital asset\nmanagement service. It does nothing on its own: a Mediagraph account is required,\nand the plugin is only useful to organizations that already have a library there.<\/p>\n\n<p>Assets you choose are copied into the WordPress media library and inserted as\nstandard WordPress blocks. That is the important part: a Mediagraph image is an\nordinary attachment, so cropping, rotation, alignment, image sizes, captions,\nalt text, <code>srcset<\/code>, and the Replace button all behave exactly as they do for a\nfile you uploaded yourself.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Secure OAuth 2.0 with PKCE \u2014 no client secret stored on your site<\/li>\n<li>Browse collections, storage folders, and lightboxes with lazy-loaded trees<\/li>\n<li>Full-text search plus filters for file type, rights status, creator, capture\ndate, and custom metadata<\/li>\n<li>A Mediagraph option beside Upload and Media Library in every media block<\/li>\n<li>Multi-select for galleries and the classic editor<\/li>\n<li>Automatic file-type narrowing \u2014 a Video block only offers videos<\/li>\n<li>A Mediagraph tab in the standard WordPress media modal<\/li>\n<li>Usage reporting back to Mediagraph when a post is published<\/li>\n<li>Assets are never downloaded twice; re-inserting reuses the existing file<\/li>\n<\/ul>\n\n<p><strong>Supported blocks<\/strong><\/p>\n\n<p>Image, Gallery, Audio, Video, Cover, File, Media &amp; Text, Site Logo, and any\nthird-party block built on the standard WordPress media placeholder.<\/p>\n\n<h3>External Service<\/h3>\n\n<p>This plugin relies on Mediagraph, a third-party digital asset management\nservice operated by Mediagraph (https:\/\/www.mediagraph.io). The plugin is a\nclient for that service and cannot function without an account on it.<\/p>\n\n<p>Nothing is sent anywhere until an administrator explicitly connects the site\nunder Settings \u2192 Mediagraph. Connecting starts an OAuth 2.0 authorization at\nmediagraph.io; you sign in there and approve access, and the site stores the\nresulting access and refresh tokens. No password ever reaches WordPress, and no\nclient secret is stored on your site.<\/p>\n\n<p>Once connected, the plugin contacts <code>https:\/\/mediagraph.io<\/code> in these cases:<\/p>\n\n<ul>\n<li>When an editor opens the picker, to list collections, storage folders and\nlightboxes, and to load the filter options for your library.<\/li>\n<li>When an editor searches or filters, sending the search text and the chosen\nfilters so the service can return matching assets.<\/li>\n<li>When an editor inserts an asset, to fetch that asset's metadata and download\nthe file into your WordPress media library. Mediagraph records this as a\ndownload against your account.<\/li>\n<li><p>When a post containing Mediagraph assets is published or updated, so the\nlibrary can record where an asset has been used. This report is the most\nsubstantial thing the plugin sends, and it includes: which assets appear and\nhow they are used, your site name, the post's title, permalink, publication\ndate, excerpt and author display name, and the post's body as plain text.<\/p>\n\n<p>The body is included so newsrooms can find the story an asset ran in from\ninside Mediagraph. It is capped at 100,000 characters, and you can shorten or\ndisable it with the <code>mediagraph_article_text_limit<\/code> filter \u2014 setting it to 0\nsends no body text. Posts with no Mediagraph assets are never reported.<\/p><\/li>\n<li>Periodically, to exchange an expired access token for a fresh one.<\/li>\n<\/ul>\n\n<p>The site's own admin URL is sent as part of the OAuth redirect so the service\ncan return the browser to your site after authorization.<\/p>\n\n<p>Nothing is sent about visitors to your site, no analytics or telemetry are\ncollected, and the plugin adds no markup, links or credits to your public pages.<\/p>\n\n<p>Mediagraph's terms and privacy policy govern the data handled by the service:<\/p>\n\n<ul>\n<li>Terms of Service: https:\/\/www.mediagraph.io\/terms-of-service<\/li>\n<li>Privacy Policy: https:\/\/www.mediagraph.io\/privacy-policy<\/li>\n<\/ul>\n\n<h3>Building From Source<\/h3>\n\n<p>Development happens in the open at\nhttps:\/\/github.com\/mediagraph-io\/mediagraph-wordpress \u2014 that repository is the\ncanonical source, and it is also where to report a bug or send a patch.<\/p>\n\n<p>You do not need it to verify this plugin, though. The JavaScript in\n    admin\/js\/dist\/ is compiled, so this package ships the unminified sources it is\nbuilt from, along with the tooling needed to reproduce them. Nothing is\nobfuscated and no build step is hidden.<\/p>\n\n<ul>\n<li>Sources: <code>admin\/js\/src\/<\/code> (the picker and the block editor integration)<\/li>\n<li>Tooling: <code>webpack.config.js<\/code>, <code>babel.config.js<\/code>, <code>package.json<\/code>,\n  package-lock.json<\/li>\n<li>Tests: <code>admin\/js\/__tests__\/<\/code><\/li>\n<\/ul>\n\n<p>From the plugin directory, with Node.js 18 or newer:<\/p>\n\n<pre><code>npm ci\nnpm run build\n<\/code><\/pre>\n\n<p>That regenerates <code>admin\/js\/dist\/mediagraph-picker.bundle.js<\/code> and\n    admin\/js\/dist\/mediagraph-blocks.bundle.js. <code>npm run lint<\/code> and <code>npm test<\/code> also\nrun against the shipped sources. React and the WordPress packages are treated as\nexternals and are not bundled \u2014 the plugin uses the copies WordPress provides.<\/p>\n\n<h3>Support<\/h3>\n\n<p>https:\/\/docs.mediagraph.io or support@mediagraph.io<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP via Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate it.<\/li>\n<li>Go to Settings \u2192 Mediagraph.<\/li>\n<li>Click \"Connect to Mediagraph\" and authorize the connection.<\/li>\n<li>Edit any post and look for Mediagraph in the media blocks.<\/li>\n<\/ol>\n\n<p>Requires a Mediagraph account. See https:\/\/www.mediagraph.io<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20the%20files%20live%3F\"><h3>Where do the files live?<\/h3><\/dt>\n<dd><p>In your WordPress media library. Mediagraph is the source of record; WordPress\nholds a copy so the site can serve it quickly and so every standard editing\ncontrol works.<\/p><\/dd>\n<dt id=\"does%20choosing%20the%20same%20asset%20twice%20create%20duplicates%3F\"><h3>Does choosing the same asset twice create duplicates?<\/h3><\/dt>\n<dd><p>No. Imports are deduplicated per asset and download quality.<\/p><\/dd>\n<dt id=\"who%20can%20use%20the%20picker%3F\"><h3>Who can use the picker?<\/h3><\/dt>\n<dd><p>Any user who can edit posts sees it; importing files additionally requires the\nupload_files capability. Only administrators can connect or disconnect the site.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20connection%20expires%3F\"><h3>What happens when the connection expires?<\/h3><\/dt>\n<dd><p>The plugin refreshes the access token automatically. If the refresh token has\nalso expired, an admin notice appears with a link to reconnect, and the picker\nexplains the situation instead of failing silently.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>The \"connection expired\" notice now appears only on the post editor, the\nmedia library, and the plugins screen, rather than on every admin page.<\/li>\n<li>Corrected the Contributors entry in this readme.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>The picker now has a single Insert button, in the footer. The details panel\nno longer offers a second one that acted only on the asset being previewed.<\/li>\n<li>Added Mediagraph to the Replace menu on a block that already holds media,\nbeside Open Media Library, Upload, and Reset.<\/li>\n<li>Fixed: title, caption, alt text, and credit shown in the details panel are\nnow applied to the attachment when inserting straight from the footer.\nPreviously they only travelled if the field had been typed in by hand.<\/li>\n<li>Removed the Mediagraph option from the Icon block. That block stores the name\nof a built-in SVG icon rather than an uploaded file, so it had nowhere to put\nan attachment.<\/li>\n<li>The chosen download quality now applies to the whole insert and is kept while\nmoving between assets.<\/li>\n<li>The package now includes the unminified JavaScript sources, the webpack and\nbabel configuration, and the lockfile, so the shipped bundles can be rebuilt\nfrom the plugin itself.<\/li>\n<li>Added the GPL-2.0 licence text, and documented the Mediagraph service, the\ndata sent to it, and its terms and privacy policy in the readme.<\/li>\n<li>The sitewide \"connection expired\" admin notice is now dismissible.<\/li>\n<li>Changed: mediagraph_article_text_limit set to 0 now omits the post body from\nthe publish report entirely. It previously meant \"no limit\", which was the\nopposite of what the name suggests.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Rewrite. Assets now insert as native WordPress blocks backed by real media\nlibrary attachments, so cropping, sizes, alignment, replace, and every other\ncore control work normally.<\/li>\n<li>Added a Mediagraph option beside Upload and Media Library in every media\nblock placeholder, covering Image, Gallery, Audio, Video, Cover, File,\nMedia &amp; Text, and Site Logo.<\/li>\n<li>Added multi-select, so several assets can be inserted into a gallery at once.<\/li>\n<li>The grid now narrows to the file types the calling block accepts.<\/li>\n<li>Added filtering by file type, rights status, creator, capture date, and\ncustom metadata fields.<\/li>\n<li>Asset details, including caption and credit, are shown while choosing an\nasset and remain editable from the block sidebar after it is placed.<\/li>\n<li>Large multi-asset imports are now split across requests so they cannot hit\nPHP's execution limit part-way through.<\/li>\n<li>Fixed: access tokens are now refreshed. Previously the refresh code existed\nbut was never called, so every site silently broke when its token expired.<\/li>\n<li>Fixed: the connection status is now accurate, and an expired connection is\nreported instead of showing \"Connected\" over a picker that cannot load.<\/li>\n<li>Fixed: the sidebar Reload button now really reloads. Cache invalidation wrote\none key and deleted another, so nothing was ever cleared.<\/li>\n<li>Fixed: usage reporting is derived from the saved post content instead of a\nbrowser global racing the save, so it no longer misses the first publish,\nand removing an asset from a post now removes it from the report.<\/li>\n<li>Fixed: the featured image is correctly reported as the lead photo.<\/li>\n<li>Fixed: video and audio usage is now reported rather than silently dropped.<\/li>\n<li>Fixed: assets skipped by the API are surfaced instead of reported as success.<\/li>\n<li>Fixed: re-inserting an asset no longer fills the media library with copies.<\/li>\n<li>Fixed: \"Full size\" now downloads the real full-size rendition. It previously\nresolved to the same 1200px preview as \"Large\".<\/li>\n<li>Fixed: the picker now loads on the site editor, widgets screen, and media\nlibrary, where it previously failed to initialize.<\/li>\n<li>Fixed: usage reporting now covers custom post types.<\/li>\n<li>Fixed: dimensions display in the details panel.<\/li>\n<li>Removed the \"Extended Description\" field, which had no destination in\nWordPress and was always a copy of the description.<\/li>\n<li>Added capability checks to every AJAX endpoint.<\/li>\n<li>Debug output is now behind WP_DEBUG and redacts credentials.<\/li>\n<li>Full keyboard and screen-reader support in the picker.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fixed WordPress picker alignment and size controls.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added a Mediagraph tab to the WordPress media modal.<\/li>\n<li>Added Mediagraph buttons to Image, Gallery, Cover, and Media &amp; Text toolbars.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Download assets into the WordPress media library instead of hotlinking.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added asset size selection and caption support.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Fixed bin (lightbox sub-folder) filtering.<\/li>\n<li>Renamed \"Date Taken\" to \"Creation Date\" with ascending and descending options.<\/li>\n<li>Added distinct organizer icons per container type.<\/li>\n<li>Added paginated count display.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Browse, search, and insert assets from your Mediagraph library without leaving the WordPress editor. Requires a Mediagraph account.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370567"}],"author":[{"embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/damsoftware"}],"wp:attachment":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370567"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370567"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370567"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370567"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370567"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}