| 开发者 | feichtmedia |
|---|---|
| 更新时间 | 2026年7月8日 23:51 |
| PHP版本: | 8.2 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPL-2.0-or-later |
String type and custom ImageManagerImage type)/wp-content/plugins/ directory.Advanced Custom Fields (free or PRO) is required. The plugin displays an admin notice if ACF is not installed or active.
No. The WPGraphQL integration is optional and activates automatically if WPGraphQL and WPGraphQL for ACF (v2.x) are installed and active. Without these plugins, the field type works fully.
After activation, go to Settings → FeichtMedia ImageManager. Enter three values:
wordpress. It is part of every CDN URL.cdn.example.com. The plugin adds https:// automatically.Enter the domain without protocol and without a trailing slash, e.g. cdn.example.com. The plugin adds https:// automatically when saving. If https:// is accidentally prepended, it will be removed on save.
The plugin accesses the ImageManager read-only. For the file browser and metadata queries, the API key needs at least:
image:list – display the image list in the file browserimage:read – fetch metadata for a single image (for the "metadata" return format)category:list – load category folders in the file browsercategory:read – load a single category (for breadcrumb navigation)*:read permission (read access to all resources) covers all of the above with a single entry and is the recommended choice if your ImageManager account supports wildcard permissions.
API keys that only grant write permissions (image:create, image:update, etc.) will result in 403 errors in the file browser and must not be used.
No. All requests to the ImageManager are routed through a server-side WP REST API proxy. The API key is read exclusively on the server from the WordPress database and is never visible in the browser or in browser network traffic.
Only the image ID (the newFilename field, e.g. 20260612-085316-my-photo.jpg) is stored as post_meta per image. No URLs, no metadata, no CDN domain. The full URL is assembled at runtime from the stored image ID, the project ID, and the CDN domain.
The return format is set per ACF field in the field settings:
/wordpress/20260612-085316-my-photo.jpg. No API call, fastest option. Suitable when your theme assembles the full URL itself or passes the path to a CDN helper.https://cdn.example.com/wordpress/…. Also no API call. Suitable when you need a ready-to-use URL in templates.imageId, relativeUrl, absoluteUrl, orgFilename, title, alt, copyright, width, height, filetype, and filesize. Requires one API call per image per cache interval (default: 1 hour, configurable). Suitable when your template needs alt text, copyright information, or image dimensions.The project ID (also called usergroup ID) is the unique identifier of your ImageManager project, e.g. wordpress. It is part of every CDN URL and is needed to construct the full image URL from a stored image ID. You can find the project ID in your ImageManager dashboard.
Click Add image (or Change image if one is already set) in the ACF field. A modal file browser opens, showing the categories and images from your ImageManager project:
The Metadata return format stores each image's data as a WordPress Transient. This is intentional: it reduces load on the ImageManager API and prevents pages with many images from exceeding the API request limit. The cache TTL is 3,600 seconds (1 hour) by default and can be adjusted or fully disabled under Settings → FeichtMedia ImageManager in the ACF Field section. Changes to title, alt text, copyright, or dimensions in the ImageManager will not appear in WordPress until the Transient expires or the cache is cleared manually. To clear the cache for a specific image immediately:
wp transient delete feichtmedia_imagemanager_acf_meta_$(php -r "echo md5('YOUR_IMAGE_ID');")delete_transient( 'feichtmedia_imagemanager_acf_meta_' . md5( 'YOUR_IMAGE_ID' ) );Yes. Under Settings → FeichtMedia ImageManager in the ACF Field section you can:
0 means the cache never expires.The plugin is read-only and only writes the image ID as post_meta. Conflicts can only arise from the standard WordPress save behaviour when multiple editors edit the same post simultaneously, not from the plugin itself.
Yes. If WPGraphQL and WPGraphQL for ACF (v2.x) are installed and active, the plugin automatically registers a GraphQL field type handler:
relative_url and absolute_url are returned as String.metadata return format returns the custom object type ImageManagerImage with the fields: imageId, relativeUrl, absoluteUrl, orgFilename, title, alt, copyright, width, height, filetype, filesize.Nothing. Deactivation does not delete any data. Stored image IDs remain as post_meta and are immediately available again after reactivation.
On uninstall, the plugin removes its own settings (feichtmedia_imagemanager_acf_cache_enabled, feichtmedia_imagemanager_acf_cache_ttl). The shared settings (API key, project ID, CDN domain) are only deleted if no other FeichtMedia ImageManager plugin is still active. If other such plugins are installed, the shared settings are kept. post_meta (stored image IDs) is never deleted.
Retrieve the ACF field as usual with get_field() or the_field(). The returned value depends on the configured return format:
Relative URL:
$path = get_field('my_imagemanager_field'); // e.g. /wordpress/20260612-085316-my-photo.jpg
Absolute URL:
$url = get_field('my_imagemanager_field'); // e.g. https://cdn.example.com/wordpress/…
Metadata:
$image = get_field('my_imagemanager_field');
// $image['alt'], $image['title'], $image['absoluteUrl'], $image['width'], …
No. The plugin does not upload images to WordPress and does not store any image files. It stores only the image ID (a short text string) as post_meta. Images continue to be served via the FeichtMedia ImageManager and your CDN.
No. The plugin has read-only access to the ImageManager. It neither uploads, edits, nor deletes images.
includes/shared/imagemanager-core/) are documented in CHANGELOG.md under a separate Core sub-section of the relevant version entry.
1.2.1 – 2026-07-08
null in GraphQL (WPGraphQL for ACF). The resolver now handles all nesting variants — groups, repeaters, flexible content, and combinations of them — and also resolves fields attached to taxonomy terms, users, and options pages correctly.post_content) always returned null in GraphQL. The resolver now reads the field value from the block's attributes, matching how WPGraphQL for ACF resolves block fields.ready_field lifecycle event fires (affected by the iFrame-based block editor in WordPress 7 and ACF's React-based Expanded Editor).null for imagemanager_image fields inside ACF Repeaters. The resolver now reads the pre-formatted value from the row data instead of calling get_field() with a null source ID, which previously fell back to the global post context and found no value.plugins_loaded to add_action('init', …, 1) to fix the "translation loading triggered too early" notice introduced in WordPress 6.7.feichtmedia_imagemanager_acf_missing_notice() now uses the correct naming prefix (was fm_imagemanager_acf_missing_notice()).fm_img_meta_ to feichtmedia_imagemanager_acf_meta_ — the old key was never matched by the uninstall cleanup query, so transients were not removed on plugin deletion.