[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fcmnGpQ8lM4ZeHgDBcVII_PlH0hLvbgllcQo55X4HuaQ":3},{"slug":4,"display_name":5,"profile_url":6,"plugin_count":7,"total_installs":8,"avg_security_score":9,"avg_patch_time_days":10,"trust_score":11,"computed_at":12,"plugins":13},"flixos90","Felix Arntz","https:\u002F\u002Fprofiles.wordpress.org\u002Fflixos90\u002F",12,18150,95,30,91,"2026-04-03T18:04:42.856Z",[14,40,62,84,104,121,136,155,173,189,202,216],{"slug":15,"name":16,"version":17,"author":5,"author_profile":6,"description":18,"short_description":19,"active_installs":20,"downloaded":21,"rating":22,"num_ratings":23,"last_updated":24,"tested_up_to":25,"requires_at_least":26,"requires_php":27,"tags":28,"homepage":34,"download_link":35,"security_score":36,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"bootstrap-for-contact-form-7","Bootstrap for Contact Form 7","1.4.8","\u003Cp>Bootstrap for Contact Form 7 modifies all the output of the popular \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fcontact-form-7\u002F\" rel=\"ugc\">Contact Form 7 plugin\u003C\u002Fa> to be fully compatible with the current version 3 of the popular CSS framework \u003Ca href=\"http:\u002F\u002Fgetbootstrap.com\u002F\" rel=\"nofollow ugc\">Bootstrap\u003C\u002Fa>. What this means to you as a Bootstrap user: No additional CSS rules necessary – from now on, Contact Form 7 integrates seamlessly with the overall Bootstrap design. It is even possible to use different form layouts via Contact Form 7’s “Additional Settings” tab.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>This plugin is an addon to Contact Form 7.\u003C\u002Fstrong>\u003Cbr \u002F>\n  The plugin requires Contact Form 7 to be activated, otherwise it won’t change anything. Furthermore you should be using it in conjunction with a Bootstrap-based WordPress theme, otherwise the forms might look weird (and there would be no point in using this addon anyway).\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch4>Usage\u003C\u002Fh4>\n\u003Cp>Bootstrap for Contact Form 7 does not provide additional options itself, so you can continue using Contact Form 7 (almost) the same way you did before.\u003C\u002Fp>\n\u003Cp>The plugin will not break your form’s appearance, however it is recommended to adjust the contact form shortcodes to achieve perfect results: Generally, you should not be using HTML tags any longer to wrap the field shortcodes. They already include the complete Bootstrap-ready markup, including displaying labels. Read the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fbootstrap-for-contact-form-7\u002Finstallation\u002F\" rel=\"ugc\">Setup Guide\u003C\u002Fa> for a quick introduction.\u003C\u002Fp>\n\u003Ch4>Advanced Features\u003C\u002Fh4>\n\u003Cp>The plugin brings some additional useful features to enhance your forms even more:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>the form layout can be changed to a horizontal or inline one\u003C\u002Fli>\n\u003Cli>the form’s input size can be globally changed\u003C\u002Fli>\n\u003Cli>checkbox and radio groups can be displayed either one per line, inline or as Bootstrap buttons\u003C\u002Fli>\n\u003Cli>text inputs and textareas support Bootstrap’s input group feature to add content before or after them\u003C\u002Fli>\n\u003Cli>text inputs and textareas can show a character count (the [count] shortcode from Contact Form 7) inline\u003C\u002Fli>\n\u003Cli>the captcha input field can show the captcha image inline\u003C\u002Fli>\n\u003Cli>by using GET parameters in a URL to a contact form, field values can be predefined\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The above features are explained in detail on the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fbootstrap-for-contact-form-7\u002Fother_notes\u002F\" rel=\"ugc\">Other Notes\u003C\u002Fa> page.\u003C\u002Fp>\n\u003Ch4>Basic Idea behind the Plugin\u003C\u002Fh4>\n\u003Cp>Lots of WordPress Themes are based on Bootstrap – and while it is the general approach to use CSS rules to style your HTML content, it is also possible the other way around – with many benefits.\u003C\u002Fp>\n\u003Cp>When using a well-known framework which provides general styles for all the important components of a website, it can be time-consuming to apply the same styles to third-party plugins which (obviously) have not been written with a framework in mind. This is perfectly fine, but if you’re using Bootstrap for your WordPress theme, you will certainly love the fact that you do not need to write CSS rules for the Contact Form 7 plugin any longer. It will all look like Bootstrap from the beginning so that it fits into your website design. If you’re not using Bootstrap, this plugin is useless for you – but maybe you’re just having an idea how you can adjust another popular WordPress plugin to integrate with another well-written CSS framework.\u003C\u002Fp>\n\u003Ch3>Advanced Features\u003C\u002Fh3>\n\u003Ch4>Additional Settings\u003C\u002Fh4>\n\u003Cblockquote>\n\u003Cp>Here you find additional settings which are part of the Bootstrap for Contact Form 7 plugin. If you want to learn more about the additional settings of the original Contact Form 7 plugin, please visit \u003Ca href=\"http:\u002F\u002Fcontactform7.com\u002Fadditional-settings\u002F\" rel=\"nofollow ugc\">this page\u003C\u002Fa>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>You can adjust several form properties (properties that affect an entire form, not just a single field of it) to give your forms the appearance you want. Here is a list of the properties, what they do and their possible values:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>layout\u003C\u002Fcode> – adjusts the form’s layout (note that in most cases the inline form will need additional styling to look good); valid values: ‘default’, ‘inline’, ‘horizontal’; default value: ‘default’\u003C\u002Fli>\n\u003Cli>\u003Ccode>size\u003C\u002Fcode> – adjusts the size of all input fields; valid values: ‘default’, ‘small’, ‘large’; default value: ‘default’\u003C\u002Fli>\n\u003Cli>\u003Ccode>group_layout\u003C\u002Fcode> – adjusts the layout of checkbox and radio groups; valid values: ‘default’, ‘inline’, ‘buttons’; default value: ‘default’\u003C\u002Fli>\n\u003Cli>\u003Ccode>group_type\u003C\u002Fcode> – adjusts the color of checkbox and radio groups with buttons layout; valid values: ‘default’, ‘primary’, ‘success’, ‘info’, ‘warning’, ‘danger’; default value: ‘default’\u003C\u002Fli>\n\u003Cli>\u003Ccode>submit_size\u003C\u002Fcode> – adjusts the size of the submit button; valid values: ‘default’, ‘small’, ‘large’ or an empty string to force it to have the size defined in the \u003Ccode>size\u003C\u002Fcode> form property; default value is an empty string\u003C\u002Fli>\n\u003Cli>\u003Ccode>submit_type\u003C\u002Fcode> – adjusts the color of the submit button; valid values: ‘default’, ‘primary’, ‘success’, ‘info’, ‘warning’, ‘danger’; default value: ‘primary’\u003C\u002Fli>\n\u003Cli>\u003Ccode>required_html\u003C\u002Fcode> – adjusts the HTML output to append to required fields’ labels; valid values: any HTML output; default value: \u003Ccode>\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>grid_columns\u003C\u002Fcode> – allows you to override the total grid column count of Bootstrap (you might only need to adjust this if you’re using a custom version of Bootstrap); valid values: any integer greater than 1; default value: 12\u003C\u002Fli>\n\u003Cli>\u003Ccode>label_width\u003C\u002Fcode> – adjusts the form’s label width (applies only to horizontal layout); valid values: any integer between 1 and the value of \u003Ccode>grid_columns\u003C\u002Fcode> minus 1; default value: 3\u003C\u002Fli>\n\u003Cli>\u003Ccode>breakpoint\u003C\u002Fcode> – adjusts the responsive breakpoint (applies only to horizontal layout); valid values: ‘xs’, ‘sm’, ‘md’, ‘lg’; default value: ‘sm’\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>There are four methods to adjust the above properties: The easiest one is to use the “Additional Settings” tab when editing a form in Contact Form 7 and insert any property and its desired value there, one per line. For example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>layout:horizontal\nsize:large\ngroup_layout:inline\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Alternatively you can use the filter \u003Ccode>cf7bs_form_{{FORM_ID}}_properties\u003C\u002Fcode> where \u003Ccode>{{FORM_ID}}\u003C\u002Fcode> must be replaced by the ID of the form you would like to modify (you find that number in the overall form’s shortcode). An array of all the properties and their values is passed to that function so that you can easily adjust them. Example (in this case we would adjust the contact form with the ID 3):\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function my_custom_form_properties( $properties ) {\n    $properties['layout'] = 'horizontal';\n    $properties['size'] = 'large';\n    $properties['group_layout'] = 'inline';\n    return $properties;\n}\nadd_filter( 'cf7bs_form_3_properties', 'my_custom_form_properties' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The third way does something slightly different from the other two since it does not change a specific form’s properties, but the default properties for all forms. To do that, you should use the filter \u003Ccode>cf7bs_default_form_properties\u003C\u002Fcode> which works exactly like the other filter mentioned above.\u003C\u002Fp>\n\u003Cp>The fourth method is different from the others as it allows to override the form settings on a per-field basis. You can add any of the setting names plus its intended value as a shortcode attribute for any field to make this field behave differently from the form’s setting. This can be especially helpful if you need to create advanced form layouts like when you need multiple fields on the same line. For example, you could do the following to display two fields in one row, even though the form’s \u003Ccode>layout\u003C\u002Fcode> is set to ‘default’:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003Cdiv class=\"form-group row\">\n    \u003Cdiv class=\"col-md-6\">\u003Clabel for=\"user-first-name\">First Name\u003C\u002Flabel>[text user_first_name id:user-first-name layout:none][\u002Ftext]\u003C\u002Fdiv>\n    \u003Cdiv class=\"col-md-6\">\u003Clabel for=\"user-last-name\">Last Name\u003C\u002Flabel>[text user_last_name id:user-last-name layout:none][\u002Ftext]\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Note that the custom form filter takes precedence over the properties defined in the admin, while the default filter is just used as fallback.\u003C\u002Fp>\n\u003Ch4>Input Groups\u003C\u002Fh4>\n\u003Cp>All textual input fields support the input group feature that Bootstrap provides. To use it, add a shortcode-like construct (almost, but it has to use curly braces instead) into the content of any text \u002F email \u002F url \u002F tel input shortcode. Example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[text twitter-username]{input_before}@{\u002Finput_before}Your Twitter Handle[\u002Ftext]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Note that the \u003Ccode>input_before\u003C\u002Fcode> and \u003Ccode>input_after\u003C\u002Fcode> can also be added to textareas. In this case, the content will be displayed directly above or below the textarea respectively.\u003C\u002Fp>\n\u003Ch4>Submit Button Alignment\u003C\u002Fh4>\n\u003Cp>The submit button can be aligned left, center or right to fit your form’s desired appearance. Simply provide an \u003Ccode>align\u003C\u002Fcode> option with either ‘left’, ‘center’ or ‘right’ as value. Example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[submit align:right \"Send\"]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Inline Character Count\u003C\u002Fh4>\n\u003Cp>Contact Form 7 provides a \u003Ccode>[count]\u003C\u002Fcode> shortcode that renders a number indicating how many characters have been entered or how many characters are remaining in a specific input field. Using it on its own looks kind of ugly though. But guess what, you can adjust that too by adding an option \u003Ccode>include_count\u003C\u002Fcode> to any text \u002F email \u002F url \u002F tel \u002F textarea input. You can optionally specify a value for that option as well which can consist of the positioning (‘before’ or ‘after’) and the count direction (‘up’ or ‘down’) of the counter. Just as a reminder, when choosing ‘down’, make sure you give the input element a maximum length, otherwise there is no point in having that counter. Example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[text your-text maxlength:80 include_count:after:down]Your Text[\u002Ftext]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>By the way, have you read the information about input groups above? You can combine those with the character count (because just seeing a number without any additional information might confuse your site’s visitors). The following example will show a message like ‘433 characters left’ after the field:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[textarea your-text maxlength:500 include_count:after:down input_after:characters---left]Your Text[\u002Ftextarea]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Inline Captcha Image\u003C\u002Fh4>\n\u003Cp>If you’ve been using Contact Form 7 together with the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Freally-simple-captcha\u002F\" rel=\"ugc\">Really Simple CAPTCHA\u003C\u002Fa> plugin, you are probably aware of the \u003Ccode>[captchar]\u003C\u002Fcode> (captcha input field) and \u003Ccode>[captchac]\u003C\u002Fcode> (captcha image) shortcodes it provides. You can still use them independently, but it probably looks nicer to have the captcha image show up inline, right beside its input field. To accomplish this, remove the \u003Ccode>[captchac]\u003C\u002Fcode> shortcode completely and instead add a new option \u003Ccode>include_captchac\u003C\u002Fcode> to the \u003Ccode>[captchar]\u003C\u002Fcode> shortcode. You can optionally give this option a value (either ‘before’ or ‘after’) to mark the location where the image should show up. Example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[captchar your-captcha include_captchac:before]Captcha[\u002Fcaptchar]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Custom Form URLs\u003C\u002Fh4>\n\u003Cp>You can add GET parameters to populate your forms with custom initial values by simply using the field name as parameter’s key and the desired value as the parameter’s value. This works with checkboxes, date fields, number fields, select fields, all text fields and textareas. The easiest way to create such a URL is to use the plugin’s function \u003Ccode>cf7bs_add_get_parameter()\u003C\u002Fcode> where you provide parameters similarly to the WordPress Core function \u003Ca href=\"https:\u002F\u002Fcodex.wordpress.org\u002FFunction_Reference\u002Fadd_query_arg\" rel=\"nofollow ugc\">add_query_arg\u003C\u002Fa>. Example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$my_custom_url = cf7bs_add_get_parameter( array(\n    'your-name'     => 'John Doe',\n    'your-email'    => 'johndoe@example.com',\n    'your-subject'  => 'Support Request',\n), 'http:\u002F\u002Fwww.example.com\u002Fmy-custom-form\u002F' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Filter Field Arguments\u003C\u002Fh4>\n\u003Cp>As of version 1.2.3, field arguments for every single field can be filtered, which allows you to basically modify anything you like. The filters you need to hook your function into have the following structure \u003Ccode>cf7bs_form_{{FORM_ID}}_field_{{FIELD_BASETYPE}}_{{FIELD_NAME}}_properties\u003C\u002Fcode>. Yep, it’s a long filter name, but it is necessary so that you can filter in the most detailed way possible. When using one of the filters, replace \u003Ccode>{{FORM_ID}}\u003C\u002Fcode> with the ID of the form, \u003Ccode>{{FIELD_BASETYPE}}\u003C\u002Fcode> with the type of the field you need to adjust (be sure to not include the asterisks here!) and \u003Ccode>{{FIELD_NAME}}\u003C\u002Fcode> with the name of the field. The function should accept one argument, an array of parameters. For an overview about the available parameters, please check the plugin’s source code.\u003C\u002Fp>\n\u003Ch3>Unsupported functionality\u003C\u002Fh3>\n\u003Cp>While the plugin tries to support as many features as possible from the original Contact Form 7 (in combination with adding new ones!), not everything is and can be supported.\u003C\u002Fp>\n\u003Cp>There are two things in particular which are explicitly not supported:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>the \u003Ccode>size\u003C\u002Fcode> option on all input fields (Bootstrap form elements scale automatically, so we do not need a custom size for those)\u003C\u002Fli>\n\u003Cli>the \u003Ccode>label_first\u003C\u002Fcode> option on checkbox and radio fields (Bootstrap natively only supports checkboxes and radio buttons where the label is displayed after them)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>If you discover any other Contact Form 7 feature than the above two which is not supported by Bootstrap for Contact Form 7, you can \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffelixarntz\u002Fbootstrap-for-contact-form-7\u002Fissues\" rel=\"nofollow ugc\">raise an issue\u003C\u002Fa> or \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fbootstrap-for-contact-form-7\" rel=\"ugc\">submit a support request\u003C\u002Fa>.\u003C\u002Fp>\n","This plugin modifies the output of the popular Contact Form 7 plugin to be styled in compliance with themes using the Bootstrap CSS framework.",10000,316299,96,26,"2018-05-24T13:31:00.000Z","4.9.29","3.6","",[29,30,31,32,33],"bootstrap","bootstrap-3","bootstrap-framework","contact-form-7","wpcf7","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fbootstrap-for-contact-form-7\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fbootstrap-for-contact-form-7.1.4.8.zip",85,0,null,"2026-03-15T15:16:48.613Z",{"slug":41,"name":42,"version":43,"author":5,"author_profile":6,"description":44,"short_description":45,"active_installs":46,"downloaded":47,"rating":48,"num_ratings":49,"last_updated":50,"tested_up_to":51,"requires_at_least":52,"requires_php":53,"tags":54,"homepage":60,"download_link":61,"security_score":36,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"native-lazyload","Native Lazyload","1.0.2","\u003Cp>Lazy-loads media using the native browser feature. \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Fnative-lazy-loading\" rel=\"nofollow ugc\">Learn more about the new \u003Ccode>loading\u003C\u002Fcode> attribute\u003C\u002Fa> or \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F44427\" rel=\"nofollow ugc\">view the WordPress core ticket\u003C\u002Fa> where inclusion of a similar implementation in WordPress core itself is being discussed.\u003C\u002Fp>\n\u003Cp>If the \u003Ccode>loading\u003C\u002Fcode> attribute is not supported by the browser, the plugin falls back to a JavaScript solution based on \u003Ccode>IntersectionObserver\u003C\u002Fcode>. For the case that JavaScript is disabled, but the \u003Ccode>loading\u003C\u002Fcode> attribute \u003Cem>is\u003C\u002Fem> supported by the browser, a \u003Ccode>noscript\u003C\u002Fcode> variant of the respective element will be added that also includes the \u003Ccode>loading\u003C\u002Fcode> attribute without any further changes.\u003C\u002Fp>\n\u003Ch4>“Native” means “Fast”\u003C\u002Fh4>\n\u003Cp>If you have found your way over here, you are probably aware of how crucial performance is for a website’s user experience and success. You might also know that lazy-loading is a key feature to improve said performance. However, the solutions for lazy-loading so far still added a bit of overhead themselves, since they relied on loading, parsing and running custom JavaScript logic, that may be more or less heavy on performance.\u003C\u002Fp>\n\u003Cp>This plugin largely does away with this pattern. It relies on the new \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwhatwg\u002Fhtml\u002Fpull\u002F3752\" rel=\"nofollow ugc\">\u003Ccode>loading\u003C\u002Fcode>\u003C\u002Fa> attribute, which makes lazy-loading a native browser functionality. The attribute is already supported by Chrome, and will be rolled out to other browsers over time. The solution being “native” means that it does not rely on custom JavaScript logic, and thus is more lightweight. And “more lightweight” means “faster”.\u003C\u002Fp>\n\u003Cp>Last but not least, a neat thing to keep in mind is that this plugin will essentially improve itself over time, as more browsers roll out support for the \u003Ccode>loading\u003C\u002Fcode> attribute.\u003C\u002Fp>\n\u003Ch4>Usage\u003C\u002Fh4>\n\u003Cp>Just activate the plugin, and all your images and iframes in post content will be loaded lazily.\u003C\u002Fp>\n\u003Ch3>Credit\u003C\u002Fh3>\n\u003Cp>This plugin is partly based on logic from \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwprig\u002Fwprig\u002Fblob\u002Fv2.0\u002Finc\u002FLazyload\u002FComponent.php\" rel=\"nofollow ugc\">WP Rig\u003C\u002Fa> as well as recommendations from \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Fnative-lazy-loading\" rel=\"nofollow ugc\">web.dev\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Fweb\u002Ffundamentals\u002Fperformance\u002Flazy-loading-guidance\u002Fimages-and-video\u002F\" rel=\"nofollow ugc\">developers.google.com\u003C\u002Fa>.\u003C\u002Fp>\n","Lazy-loads media using the native browser feature.",6000,89723,60,31,"2019-12-06T16:56:00.000Z","5.3.21","4.7","7.0",[55,56,57,58,59],"lazy","lazyload","load","loading","native","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fnative-lazyload\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fnative-lazyload.1.0.2.zip",{"slug":63,"name":64,"version":65,"author":5,"author_profile":6,"description":66,"short_description":67,"active_installs":68,"downloaded":69,"rating":70,"num_ratings":71,"last_updated":72,"tested_up_to":73,"requires_at_least":74,"requires_php":53,"tags":75,"homepage":81,"download_link":82,"security_score":83,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"attachment-taxonomies","Attachment Taxonomies","1.2.1","\u003Cp>The plugin adds two taxonomies to the WordPress media library which are then available to categorize and tag your attachments. By default, these taxonomies, although sharing the same names and behavior, are separate from the default post taxonomies, but this can easily be changed if desired.\u003C\u002Fp>\n\u003Cp>The plugin follows WordPress Core principles and offers a lightweight alternative to similar approaches which often tend to be incredibly flexible, but at the same time complicated and bloated. And if you have a little knowledge of code, you should be able to adjust the plugin exactly to your needs if the default configuration doesn’t satisfy you.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Adds categories and tags to the Media Library (independent from the regular post categories and tags)\u003C\u002Fli>\n\u003Cli>Inserts filter dropdowns for attachment taxonomies into the media toolbar and media modal\u003C\u002Fli>\n\u003Cli>Allows to pick taxonomy terms for attachments from within the Attachment Selection & Edit modals\u003C\u002Fli>\n\u003Cli>Adds a setting for the default attachment category\u003C\u002Fli>\n\u003Cli>Enhances the \u003Ccode>[gallery]\u003C\u002Fcode> shortcode so that images of a specific attachment taxonomy can be included automatically\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Quality attributes\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Lightweight plugin following WordPress Core principles\u003C\u002Fli>\n\u003Cli>“Decisions, not Options”\u003C\u002Fli>\n\u003Cli>Can easily be used as a must-use plugin\u003C\u002Fli>\n\u003Cli>Provides a flexible API to add other attachment taxonomies or disable the existing ones for developers\u003C\u002Fli>\n\u003Cli>Provides an easy-to-use \u003Ccode>has_default\u003C\u002Fcode> argument that can be used when registering an attachment taxonomy in order to automatically add a setting for the default taxonomy term\u003C\u002Fli>\n\u003C\u002Ful>\n","This plugin adds categories and tags to the WordPress media library - lightweight and developer-friendly.",1000,63646,92,10,"2025-11-24T23:32:00.000Z","6.9.4","6.1",[76,77,78,79,80],"attachment","categories","media","tags","taxonomies","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fattachment-taxonomies\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fattachment-taxonomies.1.2.1.zip",100,{"slug":85,"name":86,"version":87,"author":5,"author_profile":6,"description":88,"short_description":89,"active_installs":90,"downloaded":91,"rating":83,"num_ratings":92,"last_updated":93,"tested_up_to":73,"requires_at_least":94,"requires_php":95,"tags":96,"homepage":102,"download_link":103,"security_score":83,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"fast-smooth-scroll","Fast Smooth Scroll","1.0.0","\u003Cp>This plugin takes a \u003Cstrong>no-frills approach\u003C\u002Fstrong> to smooth scrolling, providing a \u003Cstrong>fast, performant, and accessible user experience\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Simply enable the plugin\u003C\u002Fstrong>, and any anchor links (i.e. links that point to other content on the same page) will provide a smooth scrolling experience rather than abruptly jumping to the destination content.\u003C\u002Fp>\n\u003Cp>The plugin relies on the \u003Cstrong>latest smooth scrolling techniques using CSS\u003C\u002Fstrong>. A very \u003Cstrong>fast and lightweight JavaScript polyfill (\u003C1KB)\u003C\u002Fstrong> is included to equally support older browsers, including Internet Explorer. So you can rest assured this plugin covers your userbase.\u003C\u002Fp>\n\u003Cp>\u003Ch4>Why does this plugin exist?\u003C\u002Fh4>\n\u003C\u002Fp>\n\u003Cp>Smooth scrolling is a basic feature to enhance user experience, so it shouldn’t come at a performance cost that at the same time harms user experience elsewhere.\u003C\u002Fp>\n\u003Cp>Several other smooth scrolling solutions unfortunately rely on outdated techniques such as jQuery, which can hurt your site’s performance, and is really not necessary to provide the feature. Even browsers as old as 10 years don’t need jQuery to achieve smooth scrolling. In fact, as of today you can achieve the behavior with only CSS, not even requiring any JavaScript.\u003C\u002Fp>\n\u003Cp>Another potential reason to use this plugin over other smooth scrolling solutions is accessibility: This plugin respects the user preferences around reduced motion, which can avoid discomfort for those with \u003Ca href=\"https:\u002F\u002Fwww.a11yproject.com\u002Fposts\u002Funderstanding-vestibular-disorders\u002F\" rel=\"nofollow ugc\">vestibular motion disorders\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>You may already use a smooth scrolling plugin, but it is worth double checking that it doesn’t use one of those outdated, inefficient, and inaccessible approaches that may slow down your site or affect user interactions negatively.\u003C\u002Fp>\n\u003Ch4>More technical details\u003C\u002Fh4>\n\u003Cp>This plugin simply enables smooth scrolling with the \u003Ccode>scroll-behavior\u003C\u002Fcode> CSS property. This property has been supported by all modern browsers for a few years now.\u003C\u002Fp>\n\u003Cp>To support older browsers as well, a lightweight JavaScript polyfill is included, which is only loaded for browsers that lack support for the CSS property and doesn’t require any dependencies. The polyfill uses latest JavaScript user experience best practices such as \u003Ccode>requestAnimationFrame\u003C\u002Fcode> to provide a smooth scrolling experience without potentially blocking other user interactions.\u003C\u002Fp>\n\u003Cp>For relevant browser support, see:\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Fcss-scroll-behavior\" rel=\"nofollow ugc\">CSS Scroll-behavior\u003C\u002Fa>\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Fmdn-css_properties_scroll-padding-top\" rel=\"nofollow ugc\">CSS property: scroll-padding-top\u003C\u002Fa>\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Fprefers-reduced-motion\" rel=\"nofollow ugc\">prefers-reduced-motion media query\u003C\u002Fa>\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Frequestanimationframe\" rel=\"nofollow ugc\">requestAnimationFrame\u003C\u002Fa>\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Fhigh-resolution-time\" rel=\"nofollow ugc\">High Resolution Time API\u003C\u002Fa>\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Fmdn-api_nodelist\" rel=\"nofollow ugc\">NodeList API\u003C\u002Fa>\u003Cbr \u002F>\n* \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Fmdn-api_window_scrollto\" rel=\"nofollow ugc\">Window API: scrollTo\u003C\u002Fa>\u003C\u002Fp>\n","This lightweight plugin enhances user experience by enabling smooth scrolling for anchor links without the need for jQuery or other dependencies.",800,4028,3,"2025-11-24T23:33:00.000Z","5.0","5.2",[97,98,99,100,101],"anchor-links","lightweight","performance","scroll-animation","smooth-scroll","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Ffast-smooth-scroll\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ffast-smooth-scroll.1.0.0.zip",{"slug":105,"name":106,"version":107,"author":5,"author_profile":6,"description":108,"short_description":109,"active_installs":83,"downloaded":110,"rating":83,"num_ratings":92,"last_updated":111,"tested_up_to":73,"requires_at_least":112,"requires_php":113,"tags":114,"homepage":119,"download_link":120,"security_score":83,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"snow-fall","Snow Fall","1.0.1","\u003Cp>This plugin adds a subtle snow fall effect to your website, using the lightweight \u003Ccode>\u003Csnow-fall>\u003C\u002Fcode> JavaScript web component by \u003Ca href=\"https:\u002F\u002Fwww.zachleat.com\" rel=\"nofollow ugc\">Zach Leatherman\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.zachleat.com\u002Fweb\u002Fsnow-fall\" rel=\"nofollow ugc\">Learn more about the \u003Ccode>\u003Csnow-fall>\u003C\u002Fcode> component\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fzachleat.github.io\u002Fsnow-fall\u002Fdemo.html\" rel=\"nofollow ugc\">Demo of the \u003Ccode>\u003Csnow-fall>\u003C\u002Fcode> component\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The plugin takes a no-frills, zero-config approach – you simply activate the plugin, and it just works – thanks to the excellent underlying web component implementation. There should be no notable adverse effects on performance, also given the plugin uses the \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2024\u002F03\u002F04\u002Fscript-modules-in-6-5\u002F\" rel=\"nofollow ugc\">WordPress Script Modules API\u003C\u002Fa> that was introduced in WordPress 6.5.\u003C\u002Fp>\n\u003Cp>The plugin respects user preferences for reduced motion, as a best practice for accessibility.\u003C\u002Fp>\n\u003Cp>Additional credit: \u003Ca href=\"https:\u002F\u002Funsplash.com\u002Fphotos\u002Fsnow-field-and-green-pine-trees-during-daytime-IWenq-4JHqo\" rel=\"nofollow ugc\">Banner image by Adam Chang\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>License\u003C\u002Fh4>\n\u003Cp>The Snow Fall plugin is \u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002Fgpl-2.0.html\" rel=\"nofollow ugc\">licensed under the GPLv2 (or later)\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>The \u003Ccode>\u003Csnow-fall>\u003C\u002Fcode> and \u003Ccode>\u003Cis-land>\u003C\u002Fcode> web components are \u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicense\u002Fmit\" rel=\"nofollow ugc\">licensed under the MIT license\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>See their source code on GitHub:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fzachleat\u002Fsnow-fall\" rel=\"nofollow ugc\">\u003Ccode>zachleat\u002Fsnow-fall\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002F11ty\u002Fis-land\" rel=\"nofollow ugc\">\u003Ccode>11ty\u002Fis-land\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n","Adds a subtle snow fall effect to your website, using a lightweight web component.",3323,"2025-11-24T23:39:00.000Z","6.5","7.2",[115,116,117,98,118],"christmas","falling-snow","holiday","winter","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsnow-fall\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsnow-fall.1.0.1.zip",{"slug":122,"name":123,"version":107,"author":5,"author_profile":6,"description":124,"short_description":125,"active_installs":126,"downloaded":127,"rating":83,"num_ratings":128,"last_updated":93,"tested_up_to":73,"requires_at_least":94,"requires_php":95,"tags":129,"homepage":134,"download_link":135,"security_score":83,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"flush-transients","Flush Transients","\u003Cp>Just like many other plugins offer a feature to flush the WordPress object cache, this plugin allows to flush transients.\u003C\u002Fp>\n\u003Cp>Many WordPress sites do not have access to an object cache in their hosting environment, and for those sites transients are the only mechanism for caching data which WordPress natively supports. Being able to clear transients can be crucial for certain use-cases, particularly on sites that do not use an object cache.\u003C\u002Fp>\n\u003Cp>This plugin adds a small admin bar menu item where users with the required capabilities can flush transients for the site. For sites not using an object cache, where transients are stored in the database, the menu item also provides information on the amount of transients stored.\u003C\u002Fp>\n\u003Cp>Both regular transients and network transients are supported. When using WordPress Multisite, network transients can be flushed in the Network Admin UI.\u003C\u002Fp>\n","This plugin allows you to flush WordPress transients, plain and simple.",90,2077,1,[130,131,132,99,133],"cache","flushing","invalidation","transients","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fflush-transients\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fflush-transients.1.0.1.zip",{"slug":137,"name":138,"version":139,"author":5,"author_profile":6,"description":140,"short_description":141,"active_installs":142,"downloaded":143,"rating":83,"num_ratings":144,"last_updated":145,"tested_up_to":73,"requires_at_least":146,"requires_php":113,"tags":147,"homepage":153,"download_link":154,"security_score":83,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"ai-services","AI Services","0.7.4","\u003Cp>This WordPress plugin introduces central infrastructure which allows other plugins to make use of AI capabilities. It exposes APIs that can be used in various contexts, whether you need to use AI capabilities in server-side or client-side code. Furthermore, the APIs are agnostic of the AI service – whether that’s Anthropic, Google, or OpenAI, to only name a few, you can use any of them in the same way. You can also register your own implementation of another service, if it is not supported out of the box.\u003C\u002Fp>\n\u003Cp>The plugin does intentionally \u003Cem>not\u003C\u002Fem> come with specific AI driven features built-in, except for an AI Playground screen to explore AI capabilities as well as a settings screen to configure AI service credentials. The purpose of this plugin is to facilitate use of AI by other plugins. As such, it is a perfect use-case for \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2024\u002F03\u002F05\u002Fintroducing-plugin-dependencies-in-wordpress-6-5\u002F\" rel=\"nofollow ugc\">plugin dependencies\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Here’s a (non-comprehensive) feature list:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Abstraction layer and APIs to communicate with any AI service in a uniform way\n\u003Cul>\n\u003Cli>APIs are available in both PHP and in JavaScript, as well as via the WordPress REST API and WP-CLI commands\u003C\u002Fli>\n\u003Cli>Currently supports the following AI capabilities (with more on the way!):\n\u003Cul>\n\u003Cli>text generation (including text streaming for more immediate feedback to users)\u003C\u002Fli>\n\u003Cli>text chats with history\u003C\u002Fli>\n\u003Cli>multimodal input\u003C\u002Fli>\n\u003Cli>function calling\u003C\u002Fli>\n\u003Cli>image generation\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>AI Playground administration screen (in the Tools menu) allows exploring the different AI capabilities\n\u003Cul>\n\u003Cli>Explore all AI capabilities supported by the plugin via user interface\u003C\u002Fli>\n\u003Cli>Select which AI service and model to use and set a few advanced configuration parameters\u003C\u002Fli>\n\u003Cli>Define your own function declarations used for AI function calling\u003C\u002Fli>\n\u003Cli>Generate images and save them to the WordPress media library\u003C\u002Fli>\n\u003Cli>Exchange the AI service or model on the fly to continue a chat started with one model with another one\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>AI Services settings screen to configure services with API credentials\u003C\u002Fli>\n\u003Cli>Built-in AI service implementations\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Fclaude\" rel=\"nofollow ugc\">Anthropic (Claude)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fai.google.dev\u002Fgemini-api\" rel=\"nofollow ugc\">Google (Gemini, Imagen)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmistral.ai\u002F\" rel=\"nofollow ugc\">Mistral\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fopenai.com\u002Fchatgpt\u002F\" rel=\"nofollow ugc\">OpenAI (GPT, Dall-E)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.perplexity.ai\u002F\" rel=\"nofollow ugc\">Perplexity (Sonar)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fx.ai\u002F\" rel=\"nofollow ugc\">xAI (Grok)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Browser (client-side only; experimental support for \u003Ca href=\"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fbuilt-in-apis\" rel=\"nofollow ugc\">Chrome’s built-in AI APIs\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fblogs.windows.com\u002Fmsedgedev\u002F2025\u002F05\u002F19\u002Fintroducing-the-prompt-and-writing-assistance-apis\u002F\" rel=\"nofollow ugc\">Edge’s built-in AI APIs\u003C\u002Fa>)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Additional AI service integrations can be registered and will then be available in the same way as built-in ones\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Disclaimer:\u003C\u002Fstrong> The AI Services plugin is still in its early stages, with a limited feature set and more being added. A crucial part of refining the plugin is shaping the APIs to make them easy to use and cover the different generative AI capabilities that the AI services offer in a uniform way. That’s why your feedback is much appreciated!\u003C\u002Fp>\n\u003Ch4>Why?\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>A centralized AI infrastructure \u003Cstrong>facilitates user choice\u003C\u002Fstrong>. Users may prefer certain AI services over other ones, and for many common tasks, either of the popular AI services is suitable. Having a common API regardless of the AI service allows leaving the choice to the user, rather than the plugin author.\u003C\u002Fli>\n\u003Cli>Since the centralized AI infrastructure comes with a common API that works the same for every AI service, it means \u003Cstrong>plugin developers don’t have to spend as much time familiarizing themselves with different services\u003C\u002Fstrong>, at least when it comes to simple tasks. For tasks where certain services may have advantages over others, there is still flexibility to focus on a specific AI service.\u003C\u002Fli>\n\u003Cli>It also means \u003Cstrong>no more reinventing the wheel\u003C\u002Fstrong>: Since most AI services do not provide PHP SDKs for their APIs, many times this means WordPress plugins that want to leverage AI have to implement their own layer around the service’s API. Not only is that time consuming, it also distracts from working on the actual (AI driven) features that the plugin should offer to its users. In fact this directly facilitates the user choice aspect mentioned, as having APIs for various AI services already provided means you can simply make those available to your plugin users.\u003C\u002Fli>\n\u003Cli>Having central AI infrastructure available \u003Cstrong>unlocks AI capabilities for smaller plugins or features\u003C\u002Fstrong>: It may not be worth the investment to implement a whole AI API layer for a simple AI driven feature, but when you already have it available, it can lead to more plugins (and thus more users) benefitting from AI capabilities.\u003C\u002Fli>\n\u003Cli>Last but not least, a central AI infrastructure means \u003Cstrong>users will only have to configure the AI API once\u003C\u002Fstrong>, e.g. paste their API keys only in a single WordPress administration screen. Without central AI infrastructure, every plugin has to provide its own UI for pasting API keys, making the process more tedious for site owners the more AI capabilities their site uses.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Integration with third party services\u003C\u002Fh4>\n\u003Cp>While the plugin APIs allow registering custom AI services, the plugin comes with a few popular AI services built-in. These AI services rely on the respective third party API. Their use is optional and it is up to you to choose which third party service you would like to use or whether you would like to use multiple.\u003C\u002Fp>\n\u003Cp>The use of the third party AI services is subject to the respective terms of service. The following third party services are supported out of the box:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Fclaude\" rel=\"nofollow ugc\">Anthropic (Claude)\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Flegal\u002Fconsumer-terms\" rel=\"nofollow ugc\">Anthropic Consumer Terms of Service\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Flegal\u002Fcommercial-terms\" rel=\"nofollow ugc\">Anthropic Commercial Terms of Service\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Flegal\u002Fprivacy\" rel=\"nofollow ugc\">Anthropic Privacy Policy\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fai.google.dev\u002Fgemini-api\" rel=\"nofollow ugc\">Google (Gemini, Imagen)\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpolicies.google.com\u002Fterms\" rel=\"nofollow ugc\">Google Terms of Service\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpolicies.google.com\u002Fterms\u002Fgenerative-ai\" rel=\"nofollow ugc\">Google AI Terms of Service\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpolicies.google.com\u002Fprivacy\" rel=\"nofollow ugc\">Google Privacy Policy\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmistral.ai\u002F\" rel=\"nofollow ugc\">Mistral\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmistral.ai\u002Fterms#terms-of-service\" rel=\"nofollow ugc\">Mistral Terms of Service\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmistral.ai\u002Fterms#privacy-policy\" rel=\"nofollow ugc\">Mistral Privacy Policy\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fopenai.com\u002Fchatgpt\u002F\" rel=\"nofollow ugc\">OpenAI (GPT, Dall-E)\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fopenai.com\u002Fpolicies\u002Frow-terms-of-use\u002F\" rel=\"nofollow ugc\">OpenAI Terms of Use\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fopenai.com\u002Fpolicies\u002Frow-privacy-policy\u002F\" rel=\"nofollow ugc\">OpenAI Privacy Policy\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.perplexity.ai\u002F\" rel=\"nofollow ugc\">Perplexity (Sonar)\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.perplexity.ai\u002Fhub\u002Flegal\u002Fterms-of-service\" rel=\"nofollow ugc\">Perplexity Terms of Service\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.perplexity.ai\u002Fhub\u002Flegal\u002Fprivacy-policy\" rel=\"nofollow ugc\">Perplexity Privacy Policy\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fx.ai\u002F\" rel=\"nofollow ugc\">xAI (Grok)\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fx.ai\u002Flegal\u002Fterms-of-service\" rel=\"nofollow ugc\">xAI Terms of Service – Consumer\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fx.ai\u002Flegal\u002Fterms-of-service-enterprise\" rel=\"nofollow ugc\">xAI Terms of Service – Enterprise\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fx.ai\u002Flegal\u002Fprivacy-policy\" rel=\"nofollow ugc\">xAI Privacy Policy\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Code examples for using the API\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Generate the answer to a prompt in PHP code:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>use Felix_Arntz\\AI_Services\\Services\\API\\Enums\\AI_Capability;\nuse Felix_Arntz\\AI_Services\\Services\\API\\Helpers;\n\nif ( ai_services()->has_available_services() ) {\n    $service = ai_services()->get_available_service();\n    try {\n        $candidates = $service\n            ->get_model(\n                array(\n                    'feature'      => 'my-test-feature',\n                    'capabilities' => array( AI_Capability::TEXT_GENERATION ),\n                )\n            )\n            ->generate_text( 'What can I do with WordPress?' );\n\n        $text = Helpers::get_text_from_contents(\n            Helpers::get_candidate_contents( $candidates )\n        );\n\n        echo $text;\n    } catch ( Exception $e ) {\n        \u002F\u002F Handle the exception.\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Generate the answer to a prompt in JavaScript code:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>const helpers = aiServices.ai.helpers;\nconst { hasAvailableServices, getAvailableService } = wp.data.select( 'ai-services\u002Fai' );\nif ( hasAvailableServices() ) {\n    const service = getAvailableService();\n    try {\n        const candidates = await service.generateText(\n            'What can I do with WordPress?',\n            { feature: 'my-test-feature' }\n        );\n\n        const text = helpers.getTextFromContents(\n                helpers.getCandidateContents( candidates )\n            );\n\n        console.log( text );\n    } catch ( error ) {\n        \u002F\u002F Handle the error.\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Generate the answer to a prompt using WP-CLI:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>wp ai-services generate-text \"What can I do with WordPress?\" --feature=my-test-feature\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You can also use a specific AI service, if you have a preference, for example the \u003Ccode>google\u003C\u002Fcode> service.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Generate the answer to a prompt using a specific AI service, in PHP code:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>use Felix_Arntz\\AI_Services\\Services\\API\\Enums\\AI_Capability;\nuse Felix_Arntz\\AI_Services\\Services\\API\\Helpers;\n\nif ( ai_services()->is_service_available( 'google' ) ) {\n    $service = ai_services()->get_available_service( 'google' );\n    try {\n        $candidates = $service\n            ->get_model(\n                array(\n                    'feature'      => 'my-test-feature',\n                    'capabilities' => array( AI_Capability::TEXT_GENERATION ),\n                )\n            )\n            ->generate_text( 'What can I do with WordPress?' );\n\n        $text = Helpers::get_text_from_contents(\n            Helpers::get_candidate_contents( $candidates )\n        );\n\n        echo $text;\n    } catch ( Exception $e ) {\n        \u002F\u002F Handle the exception.\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Refer to the \u003Ca href=\"https:\u002F\u002Ffelixarntz.github.io\u002Fai-services\u002FDocumentation.html\" rel=\"nofollow ugc\">plugin documentation\u003C\u002Fa> for granular examples including explainers.\u003C\u002Fp>\n\u003Cp>For complete examples such as entire plugins built on top of the AI Services infrastructure, please see the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffelixarntz\u002Fai-services\u002Ftree\u002Fmain\u002Fexamples\" rel=\"nofollow ugc\">examples directory on GitHub\u003C\u002Fa>.\u003C\u002Fp>\n","Makes AI centrally available in WordPress, whether via PHP, REST API, JavaScript, or WP-CLI - for any provider.",70,4456,2,"2025-12-07T19:11:00.000Z","6.0",[148,149,150,151,152],"ai","function-calling","image-generation","multimodal","text-generation","https:\u002F\u002Ffelixarntz.github.io\u002Fai-services\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fai-services.0.7.4.zip",{"slug":156,"name":157,"version":158,"author":5,"author_profile":6,"description":159,"short_description":160,"active_installs":161,"downloaded":162,"rating":83,"num_ratings":92,"last_updated":163,"tested_up_to":164,"requires_at_least":94,"requires_php":53,"tags":165,"homepage":171,"download_link":172,"security_score":36,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"block-areas","Block Areas","0.2.0","\u003Cp>Introduces a simple method for defining block areas to use the block editor outside of the post content.\u003C\u002Fp>\n\u003Cp>This is an experimental plugin that explores basic usage of Gutenberg blocks outside of the content bubble, on a sitewide level.\u003C\u002Fp>\n\u003Cp>In the long term it will likely eliminate itself once WordPress core and Gutenberg will have completed the next phase of advancing to the sitewide level. The plugin exists as a baseline to have an easy way for experimenting with similar functionality already today.\u003C\u002Fp>\n\u003Ch4>Usage\u003C\u002Fh4>\n\u003Cp>After activating the plugin, you can create and edit block areas under \u003Cem>Appearance > Block Areas\u003C\u002Fem>. There should be two block areas already, \u003Ccode>header\u003C\u002Fcode> and \u003Ccode>footer\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Block areas are identified by their unique slug. Since \u003Ccode>header\u003C\u002Fcode> and \u003Ccode>footer\u003C\u002Fcode> are expected to exist, make sure not to delete them.\u003C\u002Fp>\n\u003Cp>In order to print a specific block area, for example in your theme, use \u003Ccode>block_areas()->render( $slug )\u003C\u002Fcode> (e.g. \u003Ccode>block_areas()->render( 'header' )\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Cp>You can also explicitly add theme support, specifying which block area slugs your theme relies on (e.g. \u003Ccode>add_theme_support( 'block-areas', 'header', 'footer' )\u003C\u002Fcode>).\u003C\u002Fp>\n","Introduces a simple method for defining block areas to use the block editor outside of the post content.",50,279222,"2019-08-20T19:19:00.000Z","5.2.24",[166,167,168,169,170],"blocks","editor","gutenberg","theming","wprig","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fblock-areas","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fblock-areas.0.2.0.zip",{"slug":174,"name":175,"version":176,"author":5,"author_profile":6,"description":177,"short_description":178,"active_installs":179,"downloaded":180,"rating":37,"num_ratings":37,"last_updated":93,"tested_up_to":73,"requires_at_least":181,"requires_php":182,"tags":183,"homepage":187,"download_link":188,"security_score":83,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"wp-api-json-feed","WP-API JSON Feed","1.1.0","\u003Cp>Implements JSON feeds following the official JSON feed specification by using the WordPress REST API. By default, only a JSON feed for regular posts is added. This can be easily customized to also provide JSON feeds for e.g. certain custom post types.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Adds JSON feeds following the official \u003Ca href=\"https:\u002F\u002Fjsonfeed.org\u002Fversion\u002F1.1\" rel=\"nofollow ugc\">version 1.1 spec\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>Adds a JSON feed for posts to the REST API by default (e.g. at \u003Ccode>\u002Fwp-json\u002Ffeed\u002Fv1\u002Fposts\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>Allows adding JSON feeds for other post types by using a \u003Ccode>show_json_feed\u003C\u002Fcode> argument when registering the post type.\u003C\u002Fli>\n\u003Cli>Places a link tag to the current feed inside the HTML head tag.\u003C\u002Fli>\n\u003Cli>Maintains backward compatibility with the previous JSON feed \u003Ca href=\"https:\u002F\u002Fwww.jsonfeed.org\u002Fversion\u002F1\u002F\" rel=\"nofollow ugc\">version 1 spec\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>Contains extensive filters to modify the feed responses as necessary.\u003C\u002Fli>\n\u003C\u002Ful>\n","Implements JSON feeds following the official JSON feed specification by using the WordPress REST API.",40,4243,"5.4","5.6",[184,185,186],"feed","json-feed","rest-api","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwp-api-json-feed\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-api-json-feed.1.1.0.zip",{"slug":190,"name":191,"version":87,"author":5,"author_profile":6,"description":192,"short_description":193,"active_installs":37,"downloaded":194,"rating":37,"num_ratings":37,"last_updated":93,"tested_up_to":73,"requires_at_least":146,"requires_php":113,"tags":195,"homepage":200,"download_link":201,"security_score":83,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"location-taxonomy","Location Taxonomy","\u003Cp>This plugin adds a “Location” taxonomy to your website – plain and simple. The taxonomy allows you to associate your posts with specific locations.\u003C\u002Fp>\n\u003Cp>By default, the taxonomy will be available for posts. This can be customized with a filter.\u003C\u002Fp>\n","Registers a hierarchical taxonomy to associate your posts with locations.",521,[196,197,198,199],"hierarchical","location","post","taxonomy","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Flocation-taxonomy\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flocation-taxonomy.1.0.0.zip",{"slug":203,"name":204,"version":107,"author":5,"author_profile":6,"description":205,"short_description":206,"active_installs":37,"downloaded":207,"rating":37,"num_ratings":37,"last_updated":27,"tested_up_to":73,"requires_at_least":146,"requires_php":113,"tags":208,"homepage":213,"download_link":214,"security_score":83,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":215},"relevant-social-url","Relevant Social URL","\u003Cp>This plugin adds a field to the WordPress editor sidebar which allows you to paste the URL to a social media post that is associated with the post on your WordPress site. The URL is then stored in post meta and can be used to e.g. display the relevant social media post URL in the frontend.\u003C\u002Fp>\n\u003Cp>By default, the plugin will append the link to the post content in the frontend. This can be disabled via filter though in favor of manual output elsewhere.\u003C\u002Fp>\n\u003Cp>You can paste any URL into the field, regardless of social media platform. That said, the plugin will automatically recognize certain providers and adjust the message displayed in the frontend accordingly, referencing the specific provider when possible. The following providers are explicitly supported (in alphabetical order):\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Bluesky\u003C\u002Fli>\n\u003Cli>Facebook\u003C\u002Fli>\n\u003Cli>GitHub\u003C\u002Fli>\n\u003Cli>Instagram\u003C\u002Fli>\n\u003Cli>LinkedIn\u003C\u002Fli>\n\u003Cli>SoundCloud\u003C\u002Fli>\n\u003Cli>Spotify\u003C\u002Fli>\n\u003Cli>Threads\u003C\u002Fli>\n\u003Cli>TikTok\u003C\u002Fli>\n\u003Cli>Twitter\u003C\u002Fli>\n\u003Cli>Tumblr\u003C\u002Fli>\n\u003Cli>WordPress\u003C\u002Fli>\n\u003Cli>WordPress.com\u003C\u002Fli>\n\u003Cli>X\u003C\u002Fli>\n\u003Cli>YouTube\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>No third-party APIs are called by this plugin and no data is sent to any of these providers by the plugin.\u003C\u002Fp>\n","Allows to associate a social media post URL with each post, and optionally to display a link to it in the frontend.",612,[209,210,198,211,212],"frontend","link","social-media","twitter","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Frelevant-social-url\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Frelevant-social-url.1.0.1.zip","2026-03-15T10:48:56.248Z",{"slug":217,"name":218,"version":219,"author":5,"author_profile":6,"description":220,"short_description":221,"active_installs":37,"downloaded":222,"rating":37,"num_ratings":37,"last_updated":223,"tested_up_to":224,"requires_at_least":95,"requires_php":53,"tags":225,"homepage":229,"download_link":230,"security_score":36,"vuln_count":37,"unpatched_count":37,"last_vuln_date":38,"fetched_at":39},"share-target","Share Target","1.0.0-beta.1","\u003Cp>By using this plugin, you can share content like images, media, URLs and text directly to your WordPress site from a \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Fweb-app-manifest\" rel=\"nofollow ugc\">capable device and browser\u003C\u002Fa>. For example, you can share a photo that you just took on your phone to your WordPress site in the same way that you would otherwise share it with your friends in a native messaging app.\u003C\u002Fp>\n\u003Cp>When you share content to your WordPress site using this plugin, it will automatically start a new block editor draft post with it; you can then just add anything else you like, or immediately publish it as is. For certain use-cases, e.g. an image blog, creating a post with the shared image might be everything that’s needed before publishing right away!\u003C\u002Fp>\n\u003Cp>To name a few other examples of what you can share to your WordPress site using this plugin, think about audio and video files, short text notes, Spotify playlists – basically anything that you can share from an app on your phone you can now also share directly to your WordPress site.\u003C\u002Fp>\n\u003Ch4>Requirements\u003C\u002Fh4>\n\u003Cp>In order to use this plugin, you will also need to install and activate the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fpwa\u002F\" rel=\"ugc\">PWA plugin\u003C\u002Fa>, which provides the basic infrastructure for your site to become a PWA.\u003C\u002Fp>\n\u003Ch4>Usage\u003C\u002Fh4>\n\u003Cp>With both plugins active, once you visit your site on a \u003Ca href=\"https:\u002F\u002Fcaniuse.com\u002Fweb-app-manifest\" rel=\"nofollow ugc\">capable device and browser\u003C\u002Fa>, you should see a prompt (via the PWA plugin’s functionality) to add the plugin to your home screen (e.g. similar to an app on your phone).\u003C\u002Fp>\n\u003Cp>Once you have added your website to the home screen of your device, it should be available as a target when sharing any content from that device, e.g. a photo or a URL.\u003C\u002Fp>\n\u003Cp>When you share something to your WordPress site, the installed PWA of your website should open. You should then (potentially after logging in) land directly on a new post in the block editor where the shared content has already been added. If you are sharing a media file (e.g. an image or video file), it will be automatically added to your site’s media library.\u003C\u002Fp>\n\u003Ch4>Background information\u003C\u002Fh4>\n\u003Cp>This plugin is powered by the Web Share Target API. The \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Fweb-share-target\u002F\" rel=\"nofollow ugc\">Web Share Target API\u003C\u002Fa> is a modern browser API which allows sharing images, media, URLs and basic text content directly to your website, relying on the regular sharing UI that is for example integrated in your phone. \u003Ca href=\"https:\u002F\u002Fw3c.github.io\u002Fweb-share-target\u002F\" rel=\"nofollow ugc\">See here for more technical background information about the Web Share Target API.\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Third-party developer API\u003C\u002Fh4>\n\u003Cp>The Share Target plugin allows other plugins to integrate with it. You can customize what should happen with incoming shared content when it arrives in the block editor, conditionally overriding the default behavior of the plugin.\u003C\u002Fp>\n\u003Cp>In PHP, enqueue your custom JavaScript file. Make sure to include the \u003Ccode>share-target\u003C\u002Fcode> script in its dependencies. For example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>wp_enqueue_script(\n  'my-share-target-handler',\n  '\u002Fassets\u002Fjs\u002Fmy-share-target-handler.js',\n  array( 'share-target' )\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>In your JavaScript file you can then add your custom share handler using the following function:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>\u003Ccode>wp.shareTarget.registerShareHandler( options )\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Registers a new share handler for incoming shared data.\u003C\u002Fp>\n\u003Cp>Parameters:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>options\u003C\u002Fcode>: \u003Cem>(Object) (required)\u003C\u002Fem> Handler options.\u003C\u002Fli>\n\u003Cli>\u003Ccode>options.handle\u003C\u002Fcode>: \u003Cem>(Function) (required)\u003C\u002Fem> Share handler function. Must be asynchronous and accept an object with properties \u003Ccode>title\u003C\u002Fcode>, \u003Ccode>description\u003C\u002Fcode>, \u003Ccode>link\u003C\u002Fcode> (each strings), and \u003Ccode>attachment\u003C\u002Fcode> (object). Any of these may be undefined. Depending on the data, the function should decide whether to handle it and if so run the necessary logic and return true, to stop following handlers from being called. Otherwise, it should return false.\u003C\u002Fli>\n\u003Cli>\u003Ccode>options.priority\u003C\u002Fcode>: \u003Cem>(number) (optional)\u003C\u002Fem> Priority for the handler. A lower number means higher priority, like for WordPress hooks. Default is 10.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The following example handles any shared Spotify content and embeds it into the post:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002F Matches a shared Spotify URL.\nconst spotifyRegex = \u002F^https:\\\u002F\\\u002Fopen\\.spotify\\.com\u002F;\n\nwp.shareTarget.registerShareHandler( {\n  handle: async ( { link, attachment } ) => {\n    \u002F\u002F Do not handle if a media file is being shared.\n    if ( attachment ) {\n      return false;\n    }\n\n    \u002F\u002F If a shared Spotify URL, embed it.\n    if ( link && link.match( spotifyRegex ) ) {\n      wp.data.dispatch( 'core\u002Fblock-editor' ).insertBlocks( [\n        wp.blocks.createBlock( 'core\u002Fembed', {\n          url: link,\n          type: 'rich',\n          providerNameSlug: 'spotify',\n          responsive: true,\n        } ),\n      ] );\n      return true;\n    }\n\n    \u002F\u002F Otherwise fall back to other handlers.\n    return false;\n  },\n  priority: 5,\n} );\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Allows to share images and other content directly to a WordPress site through the Web Share Target API.",1251,"2021-04-06T01:46:00.000Z","5.7.15",[226,78,217,227,228],"image","sharing","web","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fshare-target\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fshare-target.1.0.0-beta.1.zip"]