feat: Divi save pipeline – tree_rev lock, kses-safe save, revision, flags, cache, ToolResult
DiviSaver/DiviWriter/DiviComposition/DiviChange, WpValueSanitizer (S4), WpMediaResolver, DiviFlags (S11), DynamicContentMap from Divi's live registry (S22), S31 wiring, S35 control strip at apply() entry. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Integrations\Divi\Pages;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Compose\MediaResolver;
|
||||
|
||||
/**
|
||||
* Media library images for short-form fields (image_id, portrait_id, image_ids): only images
|
||||
* the current user may read. URL and alt text are cleaned by ShortformWriter like client input.
|
||||
*/
|
||||
final class WpMediaResolver implements MediaResolver
|
||||
{
|
||||
public function image(int $id): ?array
|
||||
{
|
||||
if ($id <= 0 || ! wp_attachment_is_image($id) || ! current_user_can('read_post', $id)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$url = wp_get_attachment_url($id);
|
||||
if (! is_string($url) || $url === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return ['url' => $url, 'alt' => (string) get_post_meta($id, '_wp_attachment_image_alt', true)];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user