[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fpqHClAFpQRj2qsNWcEKeFOSjiaHpHNFBO5KeVpHkg1E":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":11,"num_ratings":11,"last_updated":13,"tested_up_to":14,"requires_at_least":15,"requires_php":16,"tags":17,"homepage":23,"download_link":24,"security_score":25,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":27,"vulnerabilities":28,"developer":29,"crawl_stats":26,"alternatives":34,"analysis":129,"fingerprints":494},"yaml-custom-fields","YAML Custom Fields","1.2.7","starbist","https:\u002F\u002Fprofiles.wordpress.org\u002Fstarbist\u002F","\u003Cp>YAML Custom Fields allows you to define structured content schemas with an intuitive interface and ACF-like template functions. Perfect for theme developers who want flexible, schema-based content management without the complexity.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Define YAML schemas for page templates and template partials\u003C\u002Fli>\n\u003Cli>15+ field types including string, rich-text, images, blocks, taxonomies, data objects, and more\u003C\u002Fli>\n\u003Cli>Easy-to-use admin interface for managing schemas and data\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Three-level data hierarchy:\u003C\u002Fstrong>\n\u003Cul>\n\u003Cli>Per-page data for individual customization (stored in post meta)\u003C\u002Fli>\n\u003Cli>Per-template global data shared across all posts using the same template\u003C\u002Fli>\n\u003Cli>Site-wide global data for partials like headers and footers\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Per-field global\u002Flocal toggle:\u003C\u002Fstrong> Each field can independently use template global data or page-specific data\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Visual dual-field interface:\u003C\u002Fstrong> See both template global and page-specific values side-by-side\u003C\u002Fli>\n\u003Cli>Data Objects for managing structured, reusable data (universities, companies, etc.)\u003C\u002Fli>\n\u003Cli>Data Validation page for reviewing imported content\u003C\u002Fli>\n\u003Cli>Consolidated Export\u002FImport page for all data types (settings, page data, data objects)\u003C\u002Fli>\n\u003Cli>Simple template functions with ACF-like syntax and auto-merge behavior\u003C\u002Fli>\n\u003Cli>Administrator-only access for security\u003C\u002Fli>\n\u003Cli>Clean uninstall removes all database records\u003C\u002Fli>\n\u003Cli>WordPress Coding Standards compliant\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Supported Field Types\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>String\u003C\u002Fstrong> – Single-line text with min\u002Fmax length\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Text\u003C\u002Fstrong> – Multi-line textarea\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Rich Text\u003C\u002Fstrong> – WordPress WYSIWYG editor\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Code\u003C\u002Fstrong> – Code editor with syntax highlighting\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Boolean\u003C\u002Fstrong> – Checkbox for true\u002Ffalse values\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Number\u003C\u002Fstrong> – Number input with min\u002Fmax constraints\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Date\u003C\u002Fstrong> – Date picker with optional time\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Select\u003C\u002Fstrong> – Dropdown with single\u002Fmultiple selection\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Taxonomy\u003C\u002Fstrong> – WordPress categories, tags, or custom taxonomies with single\u002Fmultiple selection\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Post Type\u003C\u002Fstrong> – Dropdown to select registered post types (Post, Page, custom post types)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Data Object\u003C\u002Fstrong> – Reference to structured data objects managed independently (universities, companies, team members, etc.)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Image\u003C\u002Fstrong> – WordPress media uploader for images\u003C\u002Fli>\n\u003Cli>\u003Cstrong>File\u003C\u002Fstrong> – WordPress media uploader for any file\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Object\u003C\u002Fstrong> – Nested group of fields\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Block\u003C\u002Fstrong> – Repeatable blocks for flexible page builders\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Usage Example\u003C\u002Fh4>\n\u003Cp>In your theme template:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\n$hero_title = ycf_get_field('hero_title');\n$hero_image = ycf_get_image('hero_image', null, 'full');\n$category = ycf_get_term('category');\n$post_type = ycf_get_post_type('content_type');\n$university = ycf_get_data_object('university');\n$features = ycf_get_field('features');\n?>\n\n\u003Cdiv class=\"hero\">\n  \u003C?php if ($hero_image): ?>\n    \u003Cimg src=\"\u003C?php echo esc_url($hero_image['url']); ?>\" alt=\"\u003C?php echo esc_attr($hero_image['alt']); ?>\">\n  \u003C?php endif; ?>\n  \u003Ch1>\u003C?php echo esc_html($hero_title); ?>\u003C\u002Fh1>\n  \u003C?php if ($category): ?>\n    \u003Cspan class=\"category\">\u003C?php echo esc_html($category->name); ?>\u003C\u002Fspan>\n  \u003C?php endif; ?>\n  \u003C?php if ($university): ?>\n    \u003Cp>\u003C?php echo esc_html($university['name']); ?>\u003C\u002Fp>\n  \u003C?php endif; ?>\n\u003C\u002Fdiv>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Developer Documentation\u003C\u002Fh3>\n\u003Ch4>Template Functions\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Get a single field value:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$value = ycf_get_field('field_name');\n$value = ycf_get_field('field_name', 123); \u002F\u002F Specific post ID\n$value = ycf_get_field('logo', 'partial:header.php'); \u002F\u002F From partial\n$value = ycf_get_field('title', null, $block); \u002F\u002F From block context\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Get image field with details:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$image = ycf_get_image('field_name', null, 'full');\n$image = ycf_get_image('field_name', 123, 'thumbnail'); \u002F\u002F Specific post ID\n$image = ycf_get_image('icon', null, 'medium', $block); \u002F\u002F From block context\n\n\u002F\u002F Returns: array('id', 'url', 'alt', 'title', 'caption', 'description', 'width', 'height')\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Get file field with details:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$file = ycf_get_file('field_name', null);\n$file = ycf_get_file('field_name', 123); \u002F\u002F Specific post ID\n$file = ycf_get_file('document', null, $block); \u002F\u002F From block context\n\n\u002F\u002F Returns: array('id', 'url', 'path', 'filename', 'filesize', 'mime_type', 'title')\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Get taxonomy field (term or terms):\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$term = ycf_get_term('field_name', null);\n$term = ycf_get_term('field_name', 123); \u002F\u002F Specific post ID\n$term = ycf_get_term('category', null, $block); \u002F\u002F From block context\n\n\u002F\u002F Returns: WP_Term object or array of WP_Term objects (for multiple selection)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Get post type field:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$post_type = ycf_get_post_type('field_name', null);\n$post_type = ycf_get_post_type('field_name', 123); \u002F\u002F Specific post ID\n$post_type = ycf_get_post_type('content_type', null, $block); \u002F\u002F From block context\n\n\u002F\u002F Returns: WP_Post_Type object or null\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Get data object field:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$university = ycf_get_data_object('field_name', null);\n$university = ycf_get_data_object('field_name', 123); \u002F\u002F Specific post ID\n$university = ycf_get_data_object('university', null, $block); \u002F\u002F From block context\n\n\u002F\u002F Returns: Array with data object entry fields or null\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Get all entries of a data object type:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$all_universities = ycf_get_data_objects('universities');\nforeach ($all_universities as $entry_id => $university) {\n    echo esc_html($university['name']);\n}\n\n\u002F\u002F Returns: Array of all entries for the specified data object type\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Get all fields:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$fields = ycf_get_fields();\n$fields = ycf_get_fields(123); \u002F\u002F Specific post ID\n$fields = ycf_get_fields('partial:footer.php'); \u002F\u002F From partial\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Check if field exists:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>if (ycf_has_field('hero_title')) {\n    echo ycf_get_field('hero_title');\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Working with Block fields:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$blocks = ycf_get_field('features');\n\nif (!empty($blocks)) {\n    foreach ($blocks as $block) {\n        \u002F\u002F Access nested fields using context_data parameter\n        $title = ycf_get_field('title', null, $block);\n        $icon = ycf_get_image('icon', null, 'thumbnail', $block);\n        $category = ycf_get_term('category', null, $block);\n\n        echo '\u003Ch3>' . esc_html($title) . '\u003C\u002Fh3>';\n        if ($icon) {\n            echo '\u003Cimg src=\"' . esc_url($icon['url']) . '\">';\n        }\n        if ($category) {\n            echo '\u003Cspan>' . esc_html($category->name) . '\u003C\u002Fspan>';\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Sample YAML Schema\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>fields:\n  - name: hero_title\n    label: Hero Title\n    type: string\n    required: true\n    options:\n      maxlength: 100\n  - name: hero_image\n    label: Hero Image\n    type: image\n  - name: category\n    label: Category\n    type: taxonomy\n    options:\n      taxonomy: category\n  - name: tags\n    label: Tags\n    type: taxonomy\n    multiple: true\n    options:\n      taxonomy: post_tag\n  - name: content_type\n    label: Content Type\n    type: post_type\n  - name: university\n    label: University\n    type: data_object\n    options:\n      object_type: universities\n  - name: features\n    label: Features\n    type: block\n    list: true\n    blockKey: type\n    blocks:\n      - name: feature\n        label: Feature Block\n        fields:\n          - name: title\n            label: Title\n            type: string\n          - name: icon\n            label: Icon\n            type: image\n          - name: description\n            label: Description\n            type: text\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Working with Partials\u003C\u002Fh4>\n\u003Cp>For custom partials, add the @ycf marker in the file header:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\n\u002F**\n * Custom Navigation Partial\n * @ycf\n *\u002F\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then click “Refresh Template List” in the YAML Custom Fields admin page.\u003C\u002Fp>\n\u003Ch4>Template Global Fields\u003C\u002Fh4>\n\u003Cp>Template Global Fields allow you to define default values that are shared across all posts using the same template, while still allowing individual posts to override specific fields.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Setting up Template Global:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Col>\n\u003Cli>Go to \u003Cstrong>YAML Custom Fields\u003C\u002Fstrong> admin page\u003C\u002Fli>\n\u003Cli>Enable YAML for your template (e.g., page.php)\u003C\u002Fli>\n\u003Cli>Click \u003Cstrong>Add Template Global\u003C\u002Fstrong> to define the template global schema\u003C\u002Fli>\n\u003Cli>Define fields that should have shared default values\u003C\u002Fli>\n\u003Cli>Click \u003Cstrong>Manage Template Global Data\u003C\u002Fstrong> to set the default values\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Using Template Global in Posts:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>When editing a post that uses a template with Template Global fields, you’ll see a dual-field interface for each field:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Template Global (All Pages)\u003C\u002Fstrong> – Read-only display showing the default value (with Edit link)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Page-Specific Value\u003C\u002Fstrong> – Editable field for this post only\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Checkbox\u003C\u002Fstrong> – “Use template global for this field” – Toggle per field\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Benefits:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Consistency:\u003C\u002Fstrong> Set default values once, use across all posts\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Flexibility:\u003C\u002Fstrong> Override any field on any post individually\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Clarity:\u003C\u002Fstrong> See both global and local values side-by-side\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Efficiency:\u003C\u002Fstrong> Update template global to affect all posts at once\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Data Priority (when using template functions):\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>When a field uses template global, \u003Ccode>ycf_get_field()\u003C\u002Fcode> returns data in this priority order:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Page-specific value (if “use template global” is unchecked)\u003C\u002Fli>\n\u003Cli>Template global value (if “use template global” is checked)\u003C\u002Fli>\n\u003Cli>Site-wide global value (if template has site-wide global enabled)\u003C\u002Fli>\n\u003Cli>null (if no value exists)\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Data Storage\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Page\u002FPost data:\u003C\u002Fstrong> Stored in post meta with key \u003Ccode>_yaml_cf_data\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Template Global preferences:\u003C\u002Fstrong> Stored in post meta with key \u003Ccode>_yaml_cf_use_template_global_fields\u003C\u002Fcode> (per-field array)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Template Global schemas:\u003C\u002Fstrong> Stored in options table with key \u003Ccode>yaml_cf_template_global_schemas\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Template Global data:\u003C\u002Fstrong> Stored in options table with key \u003Ccode>yaml_cf_template_global_data\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Site-wide global schema:\u003C\u002Fstrong> Stored in options table with key \u003Ccode>yaml_cf_global_schema\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Site-wide global data:\u003C\u002Fstrong> Stored in options table with key \u003Ccode>yaml_cf_global_data\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Partial data:\u003C\u002Fstrong> Stored in options table with key \u003Ccode>yaml_cf_partial_data\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Schemas:\u003C\u002Fstrong> Stored in options table with key \u003Ccode>yaml_cf_schemas\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Data Object Types:\u003C\u002Fstrong> Stored in options table with key \u003Ccode>yaml_cf_data_object_types\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Data Object Entries:\u003C\u002Fstrong> Stored in options table with keys \u003Ccode>yaml_cf_data_object_entries_{type_slug}\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Privacy Policy\u003C\u002Fh3>\n\u003Cp>YAML Custom Fields does not collect, store, or transmit any user data outside of your WordPress installation. All data is stored locally in your WordPress database.\u003C\u002Fp>\n\u003Ch3>Third-Party Libraries\u003C\u002Fh3>\n\u003Cp>This plugin includes the following third-party libraries:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Symfony YAML Component\u003C\u002Fstrong> (v6.4) – Licensed under MIT License (GPL-compatible)\n\u003Cul>\n\u003Cli>Homepage: https:\u002F\u002Fsymfony.com\u002Fcomponents\u002FYaml\u003C\u002Fli>\n\u003Cli>License: https:\u002F\u002Fgithub.com\u002Fsymfony\u002Fyaml\u002Fblob\u002F7.3\u002FLICENSE\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Credits\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Author: \u003Ca href=\"https:\u002F\u002Fwww.silvestar.codes\" rel=\"nofollow ugc\">Silvestar Bistrovic\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Support\u003C\u002Fh3>\n\u003Cp>For documentation, examples, and support, visit:\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FmaliMirkec\u002Fyaml-custom-fields\" rel=\"nofollow ugc\">Plugin Documentation\u003C\u002Fa>\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FmaliMirkec\u002Fyaml-custom-fields\u002Fissues\" rel=\"nofollow ugc\">Report Issues\u003C\u002Fa>\u003C\u002Fp>\n","A WordPress plugin for managing YAML frontmatter schemas in theme templates and partials.",0,252,"","6.9.4","5.0","8.1",[18,19,20,21,22],"custom-fields","frontmatter","meta-fields","schema","yaml","https:\u002F\u002Fgithub.com\u002FmaliMirkec\u002Fyaml-custom-fields","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fyaml-custom-fields.1.2.7.zip",100,null,"2026-03-15T10:48:56.248Z",[],{"slug":7,"display_name":7,"profile_url":8,"plugin_count":30,"total_installs":11,"avg_security_score":25,"avg_patch_time_days":31,"trust_score":32,"computed_at":33},1,30,94,"2026-04-05T02:02:42.026Z",[35,57,78,96,113],{"slug":36,"name":37,"version":38,"author":39,"author_profile":40,"description":41,"short_description":42,"active_installs":43,"downloaded":44,"rating":25,"num_ratings":45,"last_updated":46,"tested_up_to":14,"requires_at_least":47,"requires_php":48,"tags":49,"homepage":52,"download_link":53,"security_score":54,"vuln_count":30,"unpatched_count":11,"last_vuln_date":55,"fetched_at":56},"add-custom-fields-to-media","Add Custom Fields to Media","2.0.4","George Pattichis","https:\u002F\u002Fprofiles.wordpress.org\u002Fpattihis\u002F","\u003Cp>Allows users to add custom fields to the media uploader and access those fields in posts or template files. Great for adding copyrights, image meta etc.\u003C\u002Fp>\n\u003Cp>To display the custom fields in your theme, use the following shortcode in post\u002Fpages:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[acfm id=\"123\" field=\"my_custom_field\"]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Where \u003Ccode>id\u003C\u002Fcode> is the ID of the media item and \u003Ccode>field\u003C\u002Fcode> is the name of the custom field.\u003C\u002Fp>\n\u003Cp>For PHP templates, use the following code:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>echo get_post_meta( 123, 'my_custom_field', true );\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>To use this plugin effectively, download and intall it on your WordPress blog. Next, access “Media Custom Fields” page in your admin Settings and create a new custom field for your media uploads.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Unique ID – The unique variable name for this item. It may not contain special characaters or spaces\u003C\u002Fli>\n\u003Cli>Field Title – The name you want to appear in the media uploader\u003C\u002Fli>\n\u003Cli>Field Help – A descriptive message you want to appear in the media uploader\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Once you’ve added a custom field, you can access it via the Media Library or during the Add Media process of uploading a new item.\u003C\u002Fp>\n\u003Cp>This plugin was originally developed by \u003Ca href=\"https:\u002F\u002Fprofiles.wordpress.org\u002Fchristopherross\u002F\" rel=\"nofollow ugc\">Christopher Ross\u003C\u002Fa>. The plugin has been adopted and refactored by \u003Ca href=\"https:\u002F\u002Fprofiles.wordpress.org\u002Fpattihis\u002F\" rel=\"nofollow ugc\">George Pattichis\u003C\u002Fa> who will continue development and maintenance.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Fadd-custom-fields-to-media\u002Fchangelog\u002F\" rel=\"ugc\">Changelog\u003C\u002Fa>\u003C\u002Fp>\n","Add custom fields to media uploader and access them in template files. Great for copyrights, image meta etc.",80,6905,2,"2026-03-13T00:24:00.000Z","5.2","7.2",[18,50,20,51],"media","upload","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fadd-custom-fields-to-media\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fadd-custom-fields-to-media.2.0.4.zip",99,"2026-03-18 18:16:21","2026-03-15T15:16:48.613Z",{"slug":58,"name":59,"version":60,"author":61,"author_profile":62,"description":63,"short_description":64,"active_installs":65,"downloaded":66,"rating":25,"num_ratings":30,"last_updated":67,"tested_up_to":68,"requires_at_least":69,"requires_php":70,"tags":71,"homepage":75,"download_link":76,"security_score":77,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":56},"custom-field-builder","Custom Field Builder – WordPress custom fields plugin","1.2.4","kirillbdev","https:\u002F\u002Fprofiles.wordpress.org\u002Fkirillbdev\u002F","\u003Cp>\u003Cstrong>Custom Field Builder is a powerful and lightweight developer plugin to create custom meta boxes and custom fields for WordPress.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cp>• Many free custom fields (regular updating and adding new fields).\u003Cbr \u002F>\n• Easy to install and very easy to use.\u003Cbr \u002F>\n• Pure and clean code (increase your admin performance).\u003C\u002Fp>\n\u003Ch4>Links\u003C\u002Fh4>\n\u003Cp>• \u003Ca href=\"http:\u002F\u002Fcfbuilder.kirillbdev.pro\" rel=\"nofollow ugc\">Documentation\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Available fields\u003C\u002Fh4>\n\u003Cp>• Textbox\u003Cbr \u002F>\n• Textarea\u003Cbr \u002F>\n• Select\u003Cbr \u002F>\n• Media (image, attachments)\u003Cbr \u002F>\n• Logic (checkbox may only “true” or “false”)\u003Cbr \u002F>\n• Color picker\u003Cbr \u002F>\n• Repeater\u003Cbr \u002F>\n• Checkbox group\u003Cbr \u002F>\n• Date picker\u003Cbr \u002F>\n• Post relationship\u003C\u002Fp>\n\u003Ch3>Usage\u003C\u002Fh3>\n\u003Cp>Watch this short video tutorial\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FAEeothh5apo?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Cp>Add the following code to your functions.php (or in any convenient file).\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\n    add_action('cf_builder_init', function ($cfBuilder) {\n        $cfBuilder->registerTemplate([\n            'id'          => 'custom_fields',\n            'title'       => 'Custom Field Builder example',\n            'post_type'   => 'post',\n            'position'    => 'normal',\n            'priority'    => 'high',\n            'fields'      => [\n\n                'author_name' => [\n                    'type'    => 'textbox',\n                    'title'   => 'Author name'\n                ],\n\n                'author_bio' => [\n                    'type'    => 'textarea',\n                    'title'   => 'Author bio'\n                ]\n\n            ]\n        ]);\n    });\n?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You also can include your custom template in php file. For example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\n    add_action('cf_builder_init', function ($cfBuilder) {\n        $cfBuilder->registerTemplate('path_to_your_template_file.php');\n    });\n?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>** See all fields example in examples\u002Fbase-fields-template.php in plugin directory! **\u003C\u002Fp>\n","Custom Field Builder is a powerful and lightweight developer plugin to create custom meta boxes and custom fields for WordPress.",10,1252,"2019-03-05T14:59:00.000Z","5.0.0","4.6","5.4",[72,58,18,73,74],"cfb","custom-meta","custom-meta-fields","http:\u002F\u002Fcfbuilder.kirillbdev.pro","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustom-field-builder.zip",85,{"slug":79,"name":80,"version":81,"author":82,"author_profile":83,"description":84,"short_description":85,"active_installs":65,"downloaded":86,"rating":25,"num_ratings":30,"last_updated":87,"tested_up_to":88,"requires_at_least":89,"requires_php":13,"tags":90,"homepage":94,"download_link":95,"security_score":77,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":56},"display-custom-fields","Display Custom Fields","1.1.1","TeaCii","https:\u002F\u002Fprofiles.wordpress.org\u002Fteacii\u002F","\u003Cp>This plugin allows you to display the value of a custom field on a page or post. Permitted values are raw text, html, javascript, javascript file url, css, css file.\u003C\u002Fp>\n\u003Cp>Since version 1.1.x it also allows you to show a custom field of any page or post, provided you have the id.\u003C\u002Fp>\n\u003Cp>One of the intended use of this plugin is to provide just in time code without editing the theme. Often code, especially css, gets lost with theme change. This techniques will ensure the values are loaded only on the given page and they will survive changes of themes and other plugins.\u003C\u002Fp>\n\u003Cp>You can also use this to include javascript snippets or files. They will only be loaded on the given post or page. This in turn allows for loading of scripts only where needed.\u003C\u002Fp>\n\u003Cp>You may use the plugin in two ways:\u003Cbr \u002F>\n[dcf field=”name_of_custom_field”]\u003Cbr \u002F>\nor optionally you can\u003Cbr \u002F>\n– define the type of the field value. By default the type is “raw”.\u003Cbr \u002F>\n– provide the id number of the page or post. By default, it would be the current page\u002Fpost id.\u003Cbr \u002F>\n[dcf field=”name_of_custom_field” type=”value_type” id=’post_or_page_id_number’]\u003C\u002Fp>\n\u003Cp>The accepted value types are:\u003C\u002Fp>\n\u003Cp>“raw” – this is the default and you do not need to specify this type. It outputs the value as it is. You can use html code in the values quite safely.\u003C\u002Fp>\n\u003Cp>“js” – use this to specify that the value is actually javascript. Do not wrap it with the script tag. Remember that $ is not a valid jQuery replacement in WordPress. You should use “jQuery” instead.\u003C\u002Fp>\n\u003Cp>“jsf” – You may need to include a javascript file. The value of the custom field should be a fully qualified javascript file url.\u003C\u002Fp>\n\u003Cp>“css” – use this to specify css code in the value of the custom field.\u003C\u002Fp>\n\u003Cp>“cssf” – You may need to include a css file. The value of the custom field should be a fully qualified css file url. Here I would like to note that:\u003Cbr \u002F>\n– It is highly unusual to include css files in the body. However, it does work.\u003Cbr \u002F>\n– There may be a side effect that some elements may not show properly until the css file is completely loaded.\u003C\u002Fp>\n","This plugin allows you to display the value of a custom field on a page or post. Permitted values are raw text, html, javascript, javascript file url, &hellip;",2418,"2014-07-31T23:19:00.000Z","3.9.40","3.0",[18,91,92,93,20],"display-field-value","display-meta","meta","http:\u002F\u002FTeaCii.com\u002Fdisplay-custom-fields","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdisplay-custom-fields.1.1.1.zip",{"slug":97,"name":98,"version":99,"author":100,"author_profile":101,"description":102,"short_description":103,"active_installs":65,"downloaded":104,"rating":11,"num_ratings":11,"last_updated":105,"tested_up_to":106,"requires_at_least":107,"requires_php":13,"tags":108,"homepage":111,"download_link":112,"security_score":77,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":56},"meta-extensions","Meta Extension","1.0.3","sroyalty","https:\u002F\u002Fprofiles.wordpress.org\u002Fsroyalty\u002F","\u003Cp>This plugin takes a simple concept of giving you fields to enter information that use the meta tags built into\u003Cbr \u002F>\nWordpress and expands on it. Modifying conf.txt in the plugin directory will allow you to enter custom fields to\u003Cbr \u002F>\nthe Posts pages to add textfields, textarea, dropdown selections, checkboxes, and radio selections.\u003C\u002Fp>\n\u003Cp>On top of all this simplicity, it also integrates several popular WordPress plugins. With gallery selection for\u003Cbr \u002F>\nNextGen Gallery you can select a gallery to save the id to a meta field for your post to pull in your theme. Support\u003Cbr \u002F>\nfor WordTube video selection is also added. WP-Download Manager is also supported in this initial release to get ids\u003Cbr \u002F>\nfor downloads as well.\u003C\u002Fp>\n\u003Cp>Now while that may seem enough to make this a popular plugin, there is more. Meta Extensions allows you mark the\u003Cbr \u002F>\nfields to auto add tags based on field title or content (explained in the readme). It also allows you to set up\u003Cbr \u002F>\ncheckboxes to add a post to\u002Fremove from a category automatically as wanted. All from the single conf.txt file included\u003Cbr \u002F>\nwith the plugin.\u003C\u002Fp>\n\u003Cp>One of the latest features is the ability to place conf.txt in your current theme’s directory. By placing conf.txt in\u003Cbr \u002F>\nthe theme directories this allows you to run the plugin with multiple themes on your site and have custom conf.txt per\u003Cbr \u002F>\ntheme to only show the specific fields needed in that theme. If the file is not in the theme directory, it pulls from\u003Cbr \u002F>\nthe default conf.txt in the plugin’s directory.\u003C\u002Fp>\n\u003Cp>Related Links:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Fwww.premiumdigitalservices.net\u002Fblog\u002F\" title=\"Meta Extensions Plugin for WordPress\" rel=\"nofollow ugc\">Plugin Homepage\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Arbitrary section\u003C\u002Fh3>\n\u003Ch4>CONFIGURATION\u003C\u002Fh4>\n\u003Cp>Filed\u002FElement Types:\u003Cbr \u002F>\n    textfield – HTML Form Textfield\u003Cbr \u002F>\n    textarea  – HTML Form Textarea\u003Cbr \u002F>\n    checkbox  – HTML Form Checkbox\u003Cbr \u002F>\n    radio     – HTML Form Radio selections\u003Cbr \u002F>\n    select    – HTML Form Select box\u003Cbr \u002F>\n    gallery   – HTML Form Select box to choose a NextGen Gallery\u003Cbr \u002F>\n    video     – HTML Form Select box to choose a Wordtube Video\u003Cbr \u002F>\n    download  – HTML Form Select box to choose a WordPress Download Manager file\u003C\u002Fp>\n\u003Cp>To specify the custom fields, edit the file conf.txt\u003C\u002Fp>\n\u003Cp>Each entry begins with the subject inside square brackets. The second\u003Cbr \u002F>\nline specifies its type. The third line, which only applies to type\u003Cbr \u002F>\n“radio” and “select,” enumerates the available options. Each option\u003Cbr \u002F>\nhas to be separated by a hash mark (#). Each entry for standard HTML\u003Cbr \u002F>\nform entities you can also include a default which tells it which to\u003Cbr \u002F>\nmark as selected or checked. You can also include the tag option which\u003Cbr \u002F>\nwill tell the plugin to add the selection as a post tag automatically.\u003Cbr \u002F>\nTags are explained further down. Checkbox also has unique entries called\u003Cbr \u002F>\ncategory_id and category_name. These are filled based on existing categories\u003Cbr \u002F>\nin your WordPress site. This can be used to auto add\u002Fremove the post to the\u003Cbr \u002F>\nentered category id (and it’s matching name for error checks) when used.\u003C\u002Fp>\n\u003Cp>Ex.\u003C\u002Fp>\n\u003Cp>[Plan]\u003Cbr \u002F>\ntype = textfield\u003Cbr \u002F>\nsubtitle = Enter the generic name of your plan here.\u003C\u002Fp>\n\u003Cp>[Favorite Post]\u003Cbr \u002F>\ntype = checkbox\u003Cbr \u002F>\ncategory_id = 4\u003Cbr \u002F>\ncategory_name = Project Plans\u003C\u002Fp>\n\u003Cp>[Miles Walked]\u003Cbr \u002F>\ntype = radio\u003Cbr \u002F>\nvalue = 0-9#10-19#20+\u003Cbr \u002F>\ndefault = 0-9\u003C\u002Fp>\n\u003Cp>[Temper Level]\u003Cbr \u002F>\ntype = select\u003Cbr \u002F>\nvalue = High#Medium#Low\u003C\u002Fp>\n\u003Cp>[Hidden Thought]\u003Cbr \u002F>\ntype = textarea\u003Cbr \u002F>\nrows = 4\u003Cbr \u002F>\ncols = 40\u003C\u002Fp>\n\u003Cp>[Picture Gallery]\u003Cbr \u002F>\ntype = gallery\u003Cbr \u002F>\ntag = 0\u003C\u002Fp>\n\u003Cp>[The Video]\u003Cbr \u002F>\ntype = video\u003Cbr \u002F>\ntag = 0\u003C\u002Fp>\n\u003Cp>[Attachment]\u003Cbr \u002F>\ntype = download\u003Cbr \u002F>\ntag = 0\u003C\u002Fp>\n\u003Cp>Tags can be very useful. Below is how each special type generates the\u003Cbr \u002F>\ntag for it.\u003C\u002Fp>\n\u003Cp>Tag Design:\u003Cbr \u002F>\n    textfield – Title of the entry when filled\u003Cbr \u002F>\n    textarea  – Title of the entry when filled\u003Cbr \u002F>\n    checkbox  – Title of the entry when checked\u003Cbr \u002F>\n    radio     – The name of the selection\u003Cbr \u002F>\n    select    – The name of the selection\u003Cbr \u002F>\n    gallery   – Not handled\u003Cbr \u002F>\n    video     – Not handled\u003C\u002Fp>\n\u003Ch4>Useage\u003C\u002Fh4>\n\u003Cp>Once you build your conf.txt file, you are ready to start making posts\u003Cbr \u002F>\nusing the custom fields. In order to call these fields you can either\u003Cbr \u002F>\nuse the built in get methods for post meta, or you can use the ones that\u003Cbr \u002F>\nI have added to the metaext class to keep your code clean and know what\u003Cbr \u002F>\nis what. Below is the current list of functions you can use in your theme\u003Cbr \u002F>\nto call the meta information easily.\u003C\u002Fp>\n\u003Cp>Meta Extensions Class:\u003Cbr \u002F>\n    metaext::get_single_metaext($meta_name, $limit)\u003Cbr \u002F>\n        Description: Creates a post object containing all the Posts with the meta_name passed being set in them.\u003Cbr \u002F>\n            $meta_name: the name in brackets for the field you want to pull the list of posts using this field.\u003Cbr \u002F>\n            $limit: how many of these posts to pull. Defaults to 5 if nothing is passed.\u003Cbr \u002F>\n    metaext::get_multi_metaext($meta_names, $limit)\u003Cbr \u002F>\n        Description: Creates a post object containing all the Posts the all the meta_names passed (meta_names is an array).\u003Cbr \u002F>\n            $meta_names: the names in brackets in an array for the fields you want to pull the list of posts using this field.\u003Cbr \u002F>\n            $limit: how many of these posts to pull. Defaults to 5 if nothing is passed.\u003Cbr \u002F>\n    metaext:: get_value_metaext($the_ID, $name)\u003Cbr \u002F>\n        Description: Gets the value for the passed name from the post id passed.\u003Cbr \u002F>\n            $the_ID: the post ID you are wanting to pull the custom field’s value from.\u003Cbr \u002F>\n            $name: The field name of the entry you want to pull the value for. The name is what is in [] and is case sensitive.\u003C\u002Fp>\n\u003Cp>Meta Extensions WordPress Download Manager Class:\u003Cbr \u002F>\n    metaext_wpdm::get_metaext_downloadlink($id)\u003Cbr \u002F>\n        Description: Returns the download link for WPDM ID passed.\u003Cbr \u002F>\n            $id: The download ID (can use metaext::get_value_metaext() to get the ID) you want the link for.\u003Cbr \u002F>\n    metaext_wpdm::show_metaext_downloadlink($id)\u003Cbr \u002F>\n        Description: Echos the download link for WPDM ID passed.\u003Cbr \u002F>\n            $id: The download ID (can use metaext::get_value_metaext() to get the ID) you want the link for.\u003C\u002Fp>\n\u003Cp>Meta Extensions NextGen Gallery Class:\u003Cbr \u002F>\n    metaext_ngg::get_metaext_firstpic($galleryid)\u003Cbr \u002F>\n        Description: Pulls the first image’s src link for the gallery id passed to it.\u003Cbr \u002F>\n            $galleryid: The gallery ID that you want to pull the first pic’s image url for.\u003Cbr \u002F>\n    metaext_ngg::show_metaext_firstpic($galleryid, $class = ”)\u003Cbr \u002F>\n        Description: Echos the first image’s src link for the gallery id passed to it using the optional class name passed.\u003Cbr \u002F>\n            $galleryid: The gallery ID that you want to pull the first pic’s image url for.\u003Cbr \u002F>\n            $class: The name of the class you want to use, optional.\u003Cbr \u002F>\n    metaext_ngg::show_metaext_gallery($galleryid)\u003Cbr \u002F>\n        Description: Echos the Gallery ID passed, the same as using the NGG show gallery shortcode.\u003Cbr \u002F>\n            $galleryid: The gallery ID that you want to show the gallery for.\u003C\u002Fp>\n\u003Cp>Meta Extensions WordTube Class:\u003Cbr \u002F>\n    metaext_wt::get_metaext_wtvideo($videoid)\u003Cbr \u002F>\n        Description: Returns the Video code to show on a page for the video id passed.\u003Cbr \u002F>\n            $videoid: The video id to get the code for.\u003Cbr \u002F>\n    metaext_wt::show_metaext_wtvideo($videoid)\u003Cbr \u002F>\n        Description: Echos the Video code to show on a page for the video id passed.\u003Cbr \u002F>\n            $videoid: The video id to get the code for.\u003C\u002Fp>\n\u003Ch4>Code Examples\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>\u003Cdiv id=\"meta-ext-test\">\n    \u003C?php if ( metaext::get_value_metaext(get_the_ID(), 'the_gallery') ) : ?>\n        \u003Ch2>Test for Galleries using Meta Extensions with NextGen Gallery\u003C\u002Fh2>\n        \u003C?php metaext_ngg::show_metaext_gallery(metaext::get_value_metaext(get_the_ID(), 'the_gallery')) ?>\n    \u003C?php endif; ?>\n    \u003Cbr \u002F>\u003Cbr \u002F>\n    \u003C?php if ( metaext::get_value_metaext(get_the_ID(), 'the_video') ) : ?>\n        \u003Ch2>Test for Videos using Meta Extensions with WordTube\u003C\u002Fh2>\n        \u003C?php metaext_wt::show_metaext_wtvideo(metaext::get_value_metaext(get_the_ID(), 'the_video')) ?>\n    \u003C?php endif; ?>\n    \u003Cbr \u002F>\u003Cbr \u002F>\n    \u003C?php if ( metaext::get_value_metaext(get_the_ID(), 'the_download') ) : ?>\n        \u003Ch2>Test for Downloads using Meta Extensions with WP Download Manager\u003C\u002Fh2>\n        \u003C?php metaext_wpdm::show_metaext_downloadlink(metaext::get_value_metaext(get_the_ID(), 'the_download')) ?>\n    \u003C?php endif; ?>\n\u003C\u002Fdiv>\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Allows adding custom form fields to posts, storing them in custom meta fields. Integrates NGG, WT, and WP-DM.",3493,"2010-07-11T14:05:00.000Z","3.0.5","2.0.2",[18,109,93,20,110],"fields","posts","http:\u002F\u002Fwww.premiumdigitalservices.net","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmeta-extensions.zip",{"slug":114,"name":115,"version":116,"author":117,"author_profile":118,"description":119,"short_description":120,"active_installs":65,"downloaded":121,"rating":11,"num_ratings":11,"last_updated":122,"tested_up_to":123,"requires_at_least":124,"requires_php":13,"tags":125,"homepage":127,"download_link":128,"security_score":77,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":56},"wp-search-include-meta-fields","WP Search Include Meta Fields","1.0","WP Academic","https:\u002F\u002Fprofiles.wordpress.org\u002Feastsidecode\u002F","\u003Cp>This WordPress plugin extends the default search to include meta (custom) fields\u003C\u002Fp>\n\u003Cp>Major features in WP Search Include Meta Fields include:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>No configuration necessary\u003C\u002Fli>\n\u003Cli>Integrates with core search functionality\u003C\u002Fli>\n\u003Cli>Doesn’t alter the database\u003C\u002Fli>\n\u003C\u002Ful>\n","License: GPLv2 or later WordPress plugin to extend default search to include meta fields",971,"2019-02-19T16:11:00.000Z","5.0.25","4.3",[18,20,126],"search","https:\u002F\u002Feastsidecode.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-search-include-meta-fields.zip",{"attackSurface":130,"codeSignals":278,"taintFlows":402,"riskAssessment":485,"analyzedAt":493},{"hooks":131,"ajaxHandlers":219,"restRoutes":274,"shortcodes":275,"cronEvents":276,"entryPointCount":277,"unprotectedCount":11},[132,138,142,146,151,155,159,163,168,170,171,173,176,178,181,184,187,190,193,197,201,205,208,211,215],{"type":133,"name":134,"callback":135,"file":136,"line":137},"action","admin_menu","registerAdminMenu","src\\Core\\HookManager.php",36,{"type":133,"name":139,"callback":140,"file":136,"line":141},"admin_init","hideSubmenuItems",37,{"type":133,"name":143,"callback":144,"file":136,"line":145},"admin_enqueue_scripts","enqueueAdminAssets",38,{"type":147,"name":148,"callback":149,"priority":65,"file":136,"line":150},"filter","admin_title","customizeAdminTitle",41,{"type":147,"name":152,"callback":153,"file":136,"line":154},"parent_file","setParentFile",42,{"type":147,"name":156,"callback":157,"file":136,"line":158},"submenu_file","setSubmenuFile",43,{"type":133,"name":160,"callback":161,"file":136,"line":162},"switch_theme","clearTemplateCache",49,{"type":133,"name":164,"callback":165,"file":166,"line":167},"admin_notices","closure","yaml-custom-fields.php",21,{"type":133,"name":164,"callback":165,"file":166,"line":169},31,{"type":133,"name":164,"callback":165,"file":166,"line":158},{"type":133,"name":164,"callback":165,"file":166,"line":172},141,{"type":133,"name":139,"callback":174,"file":166,"line":175},"handle_form_submissions",251,{"type":133,"name":139,"callback":177,"file":166,"line":12},"handle_single_post_export",{"type":133,"name":139,"callback":179,"file":166,"line":180},"handle_settings_export",253,{"type":133,"name":139,"callback":182,"file":166,"line":183},"handle_page_data_export",254,{"type":133,"name":139,"callback":185,"file":166,"line":186},"handle_data_objects_export",255,{"type":133,"name":139,"callback":188,"file":166,"line":189},"handle_data_object_type_submissions",256,{"type":133,"name":139,"callback":191,"file":166,"line":192},"handle_validation_page",257,{"type":133,"name":194,"callback":195,"file":166,"line":196},"edit_form_after_title","render_schema_meta_box_after_title",269,{"type":133,"name":198,"callback":199,"file":166,"line":200},"save_post","save_schema_data",270,{"type":133,"name":202,"callback":203,"file":166,"line":204},"delete_post","handle_post_deletion",271,{"type":147,"name":206,"callback":165,"file":166,"line":207},"upload_mimes",644,{"type":147,"name":209,"callback":165,"priority":65,"file":166,"line":210},"wp_check_filetype_and_ext",650,{"type":133,"name":212,"callback":213,"file":166,"line":214},"plugins_loaded","yaml_cf_init",3719,{"type":133,"name":212,"callback":216,"priority":217,"file":166,"line":218},"yaml_cf_init_new_architecture",11,3727,[220,226,230,234,238,242,246,250,254,258,262,266,270],{"action":221,"nopriv":222,"callback":223,"hasNonce":224,"hasCapCheck":224,"file":166,"line":225},"yaml_cf_save_template_settings",false,"ajax_save_template_settings",true,272,{"action":227,"nopriv":222,"callback":228,"hasNonce":224,"hasCapCheck":224,"file":166,"line":229},"yaml_cf_toggle_use_global","ajax_toggle_use_global",273,{"action":231,"nopriv":222,"callback":232,"hasNonce":224,"hasCapCheck":224,"file":166,"line":233},"yaml_cf_save_schema","ajax_save_schema",274,{"action":235,"nopriv":222,"callback":236,"hasNonce":224,"hasCapCheck":224,"file":166,"line":237},"yaml_cf_get_schema","ajax_get_schema",275,{"action":239,"nopriv":222,"callback":240,"hasNonce":224,"hasCapCheck":224,"file":166,"line":241},"yaml_cf_get_partial_data","ajax_get_partial_data",276,{"action":243,"nopriv":222,"callback":244,"hasNonce":224,"hasCapCheck":224,"file":166,"line":245},"yaml_cf_save_partial_data","ajax_save_partial_data",277,{"action":247,"nopriv":222,"callback":248,"hasNonce":224,"hasCapCheck":224,"file":166,"line":249},"yaml_cf_refresh_templates","ajax_refresh_templates",278,{"action":251,"nopriv":222,"callback":252,"hasNonce":224,"hasCapCheck":224,"file":166,"line":253},"yaml_cf_export_settings","ajax_export_settings",279,{"action":255,"nopriv":222,"callback":256,"hasNonce":224,"hasCapCheck":224,"file":166,"line":257},"yaml_cf_import_settings","ajax_import_settings",280,{"action":259,"nopriv":222,"callback":260,"hasNonce":224,"hasCapCheck":224,"file":166,"line":261},"yaml_cf_export_page_data","ajax_export_page_data",281,{"action":263,"nopriv":222,"callback":264,"hasNonce":224,"hasCapCheck":224,"file":166,"line":265},"yaml_cf_import_page_data","ajax_import_page_data",282,{"action":267,"nopriv":222,"callback":268,"hasNonce":224,"hasCapCheck":224,"file":166,"line":269},"yaml_cf_get_posts_with_data","ajax_get_posts_with_data",283,{"action":271,"nopriv":222,"callback":272,"hasNonce":224,"hasCapCheck":224,"file":166,"line":273},"yaml_cf_import_data_objects","ajax_import_data_objects",284,[],[],[],13,{"dangerousFunctions":279,"sqlUsage":280,"outputEscaping":293,"fileOperations":400,"externalRequests":11,"nonceChecks":169,"capabilityChecks":169,"bundledLibraries":401},[],{"prepared":11,"raw":281,"locations":282},4,[283,287,289,291],{"file":284,"line":285,"context":286},"uninstall.php",28,"$wpdb->query() with variable interpolation",{"file":284,"line":288,"context":286},32,{"file":284,"line":290,"context":286},58,{"file":284,"line":292,"context":286},62,{"escaped":294,"rawEcho":295,"locations":296},534,48,[297,301,304,307,310,313,315,317,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398],{"file":298,"line":299,"context":300},"src\\ImportExport\\DataObjectExporter.php",51,"raw output",{"file":302,"line":303,"context":300},"src\\ImportExport\\PageDataExporter.php",70,{"file":305,"line":306,"context":300},"src\\ImportExport\\SettingsExporter.php",45,{"file":308,"line":309,"context":300},"templates\\edit-partial-page.php",53,{"file":311,"line":312,"context":300},"templates\\manage-data-object-entries-page.php",143,{"file":311,"line":314,"context":300},178,{"file":316,"line":295,"context":300},"templates\\manage-global-data-page.php",{"file":318,"line":319,"context":300},"templates\\manage-template-global-data-page.php",57,{"file":166,"line":321,"context":300},361,{"file":166,"line":323,"context":300},421,{"file":166,"line":325,"context":300},499,{"file":166,"line":327,"context":300},1643,{"file":166,"line":329,"context":300},1649,{"file":166,"line":331,"context":300},1675,{"file":166,"line":333,"context":300},1677,{"file":166,"line":335,"context":300},1681,{"file":166,"line":337,"context":300},1688,{"file":166,"line":339,"context":300},1695,{"file":166,"line":341,"context":300},1757,{"file":166,"line":343,"context":300},1759,{"file":166,"line":345,"context":300},1760,{"file":166,"line":347,"context":300},1793,{"file":166,"line":349,"context":300},1795,{"file":166,"line":351,"context":300},1796,{"file":166,"line":353,"context":300},1842,{"file":166,"line":355,"context":300},1843,{"file":166,"line":357,"context":300},1852,{"file":166,"line":359,"context":300},1861,{"file":166,"line":361,"context":300},1862,{"file":166,"line":363,"context":300},2159,{"file":166,"line":365,"context":300},2344,{"file":166,"line":367,"context":300},2385,{"file":166,"line":369,"context":300},2395,{"file":166,"line":371,"context":300},2435,{"file":166,"line":373,"context":300},2469,{"file":166,"line":375,"context":300},2551,{"file":166,"line":377,"context":300},2574,{"file":166,"line":379,"context":300},2578,{"file":166,"line":381,"context":300},2590,{"file":166,"line":383,"context":300},2594,{"file":166,"line":385,"context":300},2630,{"file":166,"line":387,"context":300},2631,{"file":166,"line":389,"context":300},2632,{"file":166,"line":391,"context":300},2686,{"file":166,"line":393,"context":300},2880,{"file":166,"line":395,"context":300},2956,{"file":166,"line":397,"context":300},2960,{"file":166,"line":399,"context":300},3626,3,[],[403,461,474],{"entryPoint":404,"graph":405,"unsanitizedCount":30,"severity":460},"\u003Cyaml-custom-fields> (yaml-custom-fields.php:0)",{"nodes":406,"edges":453},[407,412,418,422,427,431,435,438,443,447,451],{"id":408,"type":409,"label":410,"file":166,"line":411},"n0","source","$_FILES",659,{"id":413,"type":414,"label":415,"file":166,"line":416,"wp_function":417},"n1","sink","file_get_contents() [SSRF\u002FLFI]",684,"file_get_contents",{"id":419,"type":409,"label":420,"file":166,"line":421},"n2","$_POST (x9)",869,{"id":423,"type":414,"label":424,"file":166,"line":425,"wp_function":426},"n3","update_option() [Settings Manipulation]",888,"update_option",{"id":428,"type":409,"label":429,"file":166,"line":430},"n4","$_POST (x5)",1560,{"id":432,"type":414,"label":433,"file":166,"line":331,"wp_function":434},"n5","echo() [XSS]","echo",{"id":436,"type":409,"label":410,"file":166,"line":437},"n6",626,{"id":439,"type":414,"label":440,"file":166,"line":441,"wp_function":442},"n7","header() [Header Injection]",3623,"header",{"id":444,"type":409,"label":445,"file":166,"line":446},"n8","$_POST",1731,{"id":448,"type":449,"label":450,"file":166,"line":446},"n9","transform","→ render_dual_field()",{"id":452,"type":414,"label":433,"file":166,"line":355,"wp_function":434},"n10",[454,455,456,457,458,459],{"from":408,"to":413,"sanitized":224},{"from":419,"to":423,"sanitized":224},{"from":428,"to":432,"sanitized":224},{"from":436,"to":439,"sanitized":224},{"from":444,"to":448,"sanitized":222},{"from":448,"to":452,"sanitized":222},"medium",{"entryPoint":462,"graph":463,"unsanitizedCount":11,"severity":473},"handle_form_submissions (yaml-custom-fields.php:547)",{"nodes":464,"edges":470},[465,466,467,469],{"id":408,"type":409,"label":410,"file":166,"line":411},{"id":413,"type":414,"label":415,"file":166,"line":416,"wp_function":417},{"id":419,"type":409,"label":468,"file":166,"line":421},"$_POST (x2)",{"id":423,"type":414,"label":424,"file":166,"line":425,"wp_function":426},[471,472],{"from":408,"to":413,"sanitized":224},{"from":419,"to":423,"sanitized":224},"low",{"entryPoint":475,"graph":476,"unsanitizedCount":11,"severity":473},"ajax_import_settings (yaml-custom-fields.php:3115)",{"nodes":477,"edges":483},[478,481],{"id":408,"type":409,"label":479,"file":166,"line":480},"$_POST (x7)",3127,{"id":413,"type":414,"label":424,"file":166,"line":482,"wp_function":426},3153,[484],{"from":408,"to":413,"sanitized":224},{"summary":486,"deductions":487},"The \"yaml-custom-fields\" v1.2.7 plugin exhibits a generally good security posture based on the static analysis. All identified entry points, including AJAX handlers, are protected by authentication and capability checks. The plugin also demonstrates strong output escaping practices with 92% of outputs properly escaped, and it diligently uses nonces. The absence of any recorded historical vulnerabilities or CVEs further contributes to a positive security outlook.\n\nHowever, a significant concern arises from the static analysis revealing that 100% of the 4 SQL queries do not use prepared statements. This is a critical weakness as it exposes the plugin to SQL injection vulnerabilities, especially if any of the input data processed by these queries is user-controlled. Additionally, the taint analysis identified one flow with unsanitized paths, which could potentially lead to directory traversal or file inclusion vulnerabilities if not handled carefully, although it is not flagged as critical or high severity. The plugin also performs file operations, the nature of which, if insecurely handled, could pose a risk.\n\nWhile the plugin's proactive use of nonces, capability checks, and output escaping are commendable, the lack of prepared statements for SQL queries and the presence of an unsanitized path flow are notable risks that warrant attention. The clean vulnerability history is a strength, suggesting a potentially well-maintained codebase, but it does not negate the identified code-level risks. Overall, the plugin is well-structured with good defensive coding, but the SQL query handling and the identified taint flow are areas that require immediate review and remediation to ensure a truly secure implementation.",[488,490],{"reason":489,"points":65},"SQL queries without prepared statements",{"reason":491,"points":492},"Flows with unsanitized paths",5,"2026-03-17T05:46:59.876Z",{"wat":495,"direct":512},{"assetPaths":496,"generatorPatterns":503,"scriptPaths":504,"versionParams":505},[497,498,499,500,501,502],"\u002Fwp-content\u002Fplugins\u002Fyaml-custom-fields\u002Fbuild\u002Fadmin\u002Fcss\u002Fadmin-style.css","\u002Fwp-content\u002Fplugins\u002Fyaml-custom-fields\u002Fbuild\u002Fadmin\u002Fjs\u002Fadmin-script.js","\u002Fwp-content\u002Fplugins\u002Fyaml-custom-fields\u002Fbuild\u002Fadmin\u002Fjs\u002Fyaml-fields-editor.js","\u002Fwp-content\u002Fplugins\u002Fyaml-custom-fields\u002Fbuild\u002Fadmin\u002Fjs\u002Fyaml-fields-admin.js","\u002Fwp-content\u002Fplugins\u002Fyaml-custom-fields\u002Fbuild\u002Ffrontend\u002Fcss\u002Ffrontend-style.css","\u002Fwp-content\u002Fplugins\u002Fyaml-custom-fields\u002Fbuild\u002Ffrontend\u002Fjs\u002Ffrontend-script.js",[],[498,499,500,502],[506,507,508,509,510,511],"yaml-custom-fields\u002Fbuild\u002Fadmin\u002Fcss\u002Fadmin-style.css?ver=","yaml-custom-fields\u002Fbuild\u002Fadmin\u002Fjs\u002Fadmin-script.js?ver=","yaml-custom-fields\u002Fbuild\u002Fadmin\u002Fjs\u002Fyaml-fields-editor.js?ver=","yaml-custom-fields\u002Fbuild\u002Fadmin\u002Fjs\u002Fyaml-fields-admin.js?ver=","yaml-custom-fields\u002Fbuild\u002Ffrontend\u002Fcss\u002Ffrontend-style.css?ver=","yaml-custom-fields\u002Fbuild\u002Ffrontend\u002Fjs\u002Ffrontend-script.js?ver=",{"cssClasses":513,"htmlComments":523,"htmlAttributes":528,"restEndpoints":532,"jsGlobals":533,"shortcodeOutput":536},[514,515,516,517,518,519,520,521,522],"yaml-cf-editor","yaml-cf-field-wrapper","yaml-cf-field-label","yaml-cf-field-input","yaml-cf-field-description","yaml-cf-nested-fields","yaml-cf-add-field-button","yaml-cf-remove-field-button","yaml-cf-editor-preview",[524,525,526,527],"\u003C!-- YAML Custom Fields Start -->","\u003C!-- YAML Custom Fields End -->","\u003C!-- YAML Custom Fields Field Start: [field_name] -->","\u003C!-- YAML Custom Fields Field End: [field_name] -->",[529,530,531],"data-yaml-cf-field-type","data-yaml-cf-field-name","data-yaml-cf-field-options",[],[534,535],"yamlCFAdmin","yamlCFEditor",[]]