[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$ftONqxPzTQgk-2FYDotFsI70hpHDeQY0csrRC2dVDSX8":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},"braad","Braad","https:\u002F\u002Fprofiles.wordpress.org\u002Fbraad\u002F",6,2140,85,30,84,"2026-07-14T21:12:48.402Z",[14,39,59,73,90,104],{"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":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"better-rest-api-featured-images","Better REST API Featured Images","1.2.1","\u003Cp>\u003Cstrong>Note:\u003C\u002Fstrong> You probably do not need this plugin. The REST API already supports adding the query param \u003Ccode>?_embed\u003C\u002Fcode> to your URL and the response will then include all “embedded media”, including the featured image, and the data you get there is exactly what this plugin gives you. The only reasons to use this plugin at this point are if you prefer to have the featured image data in a top level field in the response rather than among other embedded media in the \u003Ccode>_embedded\u003C\u002Fcode> field, and if you \u003Cem>always\u003C\u002Fem> want the featured image data in the response rather than having to ask for it with \u003Ccode>?_embed\u003C\u002Fcode>. I still use this plugin because I do usually want both these things, but definitely give \u003Ccode>?_embed\u003C\u002Fcode> a try before using this plugin. 🙂\u003C\u002Fp>\n\u003Cp>Version 2 of the WordPress REST API returns a \u003Ccode>featured_media\u003C\u002Fcode> field (formerly featured_image) on the post object by default, but this field is simply the image ID.\u003C\u002Fp>\n\u003Cp>This plugin adds a \u003Ccode>better_featured_image\u003C\u002Fcode> field to the post object that contains the available image sizes and urls, allowing you to get this information without making a second request.\u003C\u002Fp>\n\u003Cp>It takes this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\"featured_media\": 13,\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And turns it into this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\"featured_media\": 13,\n\"better_featured_image\": {\n    \"id\": 13,\n    \"alt_text\": \"Hot Air Balloons\",\n    \"caption\": \"The event featured hot air balloon rides\",\n    \"description\": \"The hot air balloons from the big event\",\n    \"media_type\": \"image\",\n    \"media_details\": {\n      \"width\": 5760,\n      \"height\": 3840,\n      \"file\": \"2015\u002F09\u002Fballoons.jpg\",\n      \"sizes\": {\n        \"thumbnail\": {\n          \"file\": \"balloons-150x150.jpg\",\n          \"width\": 150,\n          \"height\": 150,\n          \"mime-type\": \"image\u002Fjpeg\",\n          \"source_url\": \"http:\u002F\u002Fapi.example.com\u002Fwp-content\u002Fuploads\u002F2015\u002F09\u002Fballoons-150x150.jpg\"\n        },\n        \"medium\": {\n          \"file\": \"balloons-300x200.jpg\",\n          \"width\": 300,\n          \"height\": 200,\n          \"mime-type\": \"image\u002Fjpeg\",\n          \"source_url\": \"http:\u002F\u002Fapi.example.com\u002Fwp-content\u002Fuploads\u002F2015\u002F09\u002Fballoons-300x200.jpg\"\n        },\n        \"large\": {\n          \"file\": \"balloons-1024x683.jpg\",\n          \"width\": 1024,\n          \"height\": 683,\n          \"mime-type\": \"image\u002Fjpeg\",\n          \"source_url\": \"http:\u002F\u002Fapi.example.com\u002Fwp-content\u002Fuploads\u002F2015\u002F09\u002Fballoons-1024x683.jpg\"\n        },\n        \"post-thumbnail\": {\n          \"file\": \"balloons-825x510.jpg\",\n          \"width\": 825,\n          \"height\": 510,\n          \"mime-type\": \"image\u002Fjpeg\",\n          \"source_url\": \"http:\u002F\u002Fapi.example.com\u002Fwp-content\u002Fuploads\u002F2015\u002F09\u002Fballoons-825x510.jpg\"\n        }\n      },\n      \"image_meta\": {\n        \"aperture\": 6.3,\n        \"credit\": \"\",\n        \"camera\": \"Canon EOS 5D Mark III\",\n        \"caption\": \"\",\n        \"created_timestamp\": 1433110262,\n        \"copyright\": \"\",\n        \"focal_length\": \"50\",\n        \"iso\": \"100\",\n        \"shutter_speed\": \"0.004\",\n        \"title\": \"\",\n        \"orientation\": 1\n      }\n    },\n    \"post\": null,\n    \"source_url\": \"http:\u002F\u002Fapi.example.com\u002Fwp-content\u002Fuploads\u002F2015\u002F09\u002Fballoons.jpg\"\n},\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The format of the response is nearly identical to what you would get sending a request to \u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F13\u003C\u002Fcode> or using \u003Ccode>?_embed\u003C\u002Fcode>. When no featured image has been set on the post the \u003Ccode>better_featured_image\u003C\u002Fcode> field will have a value of \u003Ccode>null\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>I’ve done some basic performance tests that indicate the difference in response times with and without this plugin to be about 10-15ms for a collection of 10 posts and 0-5ms for a single post. For me this is much faster than making a second request to \u003Ccode>\u002Fmedia\u002F\u003C\u002Fcode>, especially for multiple posts.\u003C\u002Fp>\n\u003Cp>As of version 1.1.0, there is a filter \u003Ccode>better_rest_api_featured_image\u003C\u002Fcode> that allows you to add custom data to the better_featured_image field. The filter is directly on the return value of the function that returns the better_featured_image field. This can be used to do things like add custom image meta or an SVG version of the image to the response. Here’s an example of how you might use it:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'better_rest_api_featured_image', 'xxx_modify_rest_api_featured_image', 10, 2 );\n\u002F**\n * Modify the Better REST API Featured Image response.\n *\n * @param   array  $featured_image  The array of image data.\n * @param   int    $image_id        The image ID.\n *\n * @return  array                   The modified image data.\n *\u002F\nfunction xxx_modify_rest_api_featured_image( $featured_image, $image_id ) {\n\n  \u002F\u002F Add an extra_data_string field with a string value.\n  $featured_image['extra_data_string'] = 'A custom value.';\n\n  \u002F\u002F Add an extra_data_array field with an array value.\n  $featured_image['extra_data_array'] = array(\n    'custom_key' => 'A custom value.',\n  );\n\n  return $featured_image;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This plugin is on \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBraadMartin\u002Fbetter-rest-api-featured-images\" title=\"Better REST API Featured Images\" rel=\"nofollow ugc\">on Github\u003C\u002Fa> and pull requests are always welcome. 🙂\u003C\u002Fp>\n","Adds a top-level field with featured image data including available sizes and URLs to the post object returned by the REST API.",2000,60100,100,11,"2016-07-30T16:56:00.000Z","4.6.30","4.0","",[29,30,31,32,33],"featured","images","post","rest","thumbnail","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fbetter-rest-api-featured-images\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fbetter-rest-api-featured-images.1.2.1.zip",0,null,"2026-04-16T10:56:18.058Z",{"slug":40,"name":41,"version":42,"author":5,"author_profile":6,"description":43,"short_description":44,"active_installs":45,"downloaded":46,"rating":22,"num_ratings":47,"last_updated":48,"tested_up_to":49,"requires_at_least":50,"requires_php":27,"tags":51,"homepage":57,"download_link":58,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"vertical-center","Vertical Center","1.1.1","\u003Cp>Vertical Center lets you easily vertically center elements.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Center an unlimited number of elements independently\u003C\u002Fli>\n\u003Cli>Specify simple CSS\u002FjQuery selectors to target elements\u003C\u002Fli>\n\u003Cli>Easy to use admin interface\u003C\u002Fli>\n\u003Cli>Items are vertical centered immediately after the page has loaded\u003C\u002Fli>\n\u003Cli>Adds a class to each centered element after it has been centered (useful for CSS transition effects)\u003C\u002Fli>\n\u003Cli>Fully responsive (automatically updates on resize and orientationchange events)\u003C\u002Fli>\n\u003Cli>Works on mobile devices\u003C\u002Fli>\n\u003Cli>Works across all modern browsers (including IE8)\u003C\u002Fli>\n\u003Cli>Trigger custom ‘verticalcenter’ event to force a recalculation\u003C\u002Fli>\n\u003Cli>Debounced resize events for added smoothness\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Check out the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fvertical-center\u002Fscreenshots\u002F\" rel=\"ugc\">Screenshots tab\u003C\u002Fa> for a gif of the plugin in action.\u003C\u002Fp>\n\u003Ch4>Instructions\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Navigate to \u003Cstrong>Settings > Vertical Center\u003C\u002Fstrong> in the WordPress admin.\u003C\u002Fli>\n\u003Cli>Enter a \u003Cem>selector\u003C\u002Fem> and an \u003Cem>offset\u003C\u002Fem> for the element(s) you want to center.\u003C\u002Fli>\n\u003Cli>Add\u002Fremove additional elements by clicking the “+ Add More” and “Remove” buttons.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Advanced\u003C\u002Fh4>\n\u003Cp>Want to trigger the vertical centering manually? No problem. You can skip entering a selector on the settings page and call the jQuery script yourself using either \u003Ccode>.initVerticalCenter()\u003C\u002Fcode> or \u003Ccode>.doVerticalCenter()\u003C\u002Fcode>. The \u003Ccode>.initVerticalCenter()\u003C\u002Fcode> method sets up the event listeners to recalculate if the window is resized, while the \u003Ccode>.doVerticalCenter()\u003C\u002Fcode> method directly centers without attaching any events:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002F Attach events and center.\njQuery( '.selector' ).initVerticalCenter();\n\n\u002F\u002F Center without attaching events.\njQuery( '.selector' ).doVerticalCenter();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Both functions take one optional argument, the offset value (as a number of pixels):\u003C\u002Fp>\n\u003Cpre>\u003Ccode>jQuery( '.selector' ).initVerticalCenter( offset );\n\njQuery( '.selector' ).doVerticalCenter( offset );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To offset the calculation by 20 pixels:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>jQuery( '.selector' ).initVerticalCenter( 20 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The functions are chainable. My personal favorite way to use this plugin is to inline \u003Ccode>style=\"opacity: 0;\"\u003C\u002Fcode> on the elements that I am centering (to guarantee they’ll be transparent when the DOM loads) and then fade them in with something like this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>jQuery( '.selector' ).initVerticalCenter().delay( 200 ).fadeTo( 'slow', 1 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Or to achieve the same effect with only CSS you can use the \u003Ccode>vc-complete\u003C\u002Fcode> class that gets added to each target element after the initial centering (added in version 1.0.3), which might look like this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>#target {\n    opacity: 0;\n    transition: opacity 0.5s;\n}\n\n#target.vc-complete {\n    opacity: 1;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This plugin also adds an event ‘verticalcenter’ to the window, allowing you to easily trigger the vertical centering manually. This is useful if you have added items to the page after it loads via AJAX. You can trigger the event like this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>jQuery( window ).trigger( 'verticalcenter' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Easily vertically center any element relative to its container. Fully responsive.",80,4918,5,"2015-12-07T14:46:00.000Z","4.4.34","3.8",[52,53,54,55,56],"center","javascript","jquery","responsive","vertical","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fvertical-center\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fvertical-center.1.1.1.zip",{"slug":60,"name":61,"version":62,"author":5,"author_profile":6,"description":63,"short_description":64,"active_installs":10,"downloaded":65,"rating":36,"num_ratings":36,"last_updated":66,"tested_up_to":49,"requires_at_least":26,"requires_php":27,"tags":67,"homepage":71,"download_link":72,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"only-rest-api","Only REST API","1.0.0","\u003Cp>Got a WordPress install that serves only as the data layer and\u002For admin UI of your web application?\u003C\u002Fp>\n\u003Cp>This plugin will effectively turn off all default front end output, redirect all front end urls to the main site url, and optionally display a message of your choice. The message can be a simple plain text message or you can use the included filters to completely control the HTML output.\u003C\u002Fp>\n\u003Cp>All activity in the wp-admin and all requests for assets like images, scripts, files, etc. will be unaffected by this plugin. Only requests that go through the \u003Ccode>template_redirect\u003C\u002Fcode> action will be affected.\u003C\u002Fp>\n\u003Ch4>Message Output\u003C\u002Fh4>\n\u003Cp>Rather than contaminate the data structures you might be using for your application (like posts and pages) this plugin includes a settings page with a simple textarea box where you can save any basic message you want to show. The message content is stored in the options table, and the textarea supports all the same HTML that you can use in post content.\u003C\u002Fp>\n\u003Cp>You can use the \u003Ccode>only_rest_api_page_content\u003C\u002Fcode> filter to include any custom HTML output you want inside the \u003Ccode>\u003Cbody>\u003C\u002Fcode> tags, or you can use the \u003Ccode>only_rest_api_page_html\u003C\u002Fcode> filter to completely replace all HTML output of the message page, including the \u003Ccode>\u003Chtml>\u003C\u002Fcode> and \u003Ccode>\u003Chead>\u003C\u002Fcode> tags.\u003C\u002Fp>\n\u003Cp>There is also an \u003Ccode>only_rest_api_page_css\u003C\u002Fcode> filter that allows you to override the 5 lines of CSS this plugin includes to center the message on the page.\u003C\u002Fp>\n\u003Cp>If you want a hook added or have a feature request let me know. Pull requests are welcome \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBraadMartin\u002Fonly-rest-api\" title=\"Only REST API on Github\" rel=\"nofollow ugc\">on Github\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Filter Examples\u003C\u002Fh4>\n\u003Cp>Use custom HTML inside the \u003Ccode>\u003Cbody>\u003C\u002Fcode> tags:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'only_rest_api_page_content', 'xxx_page_content' );\nfunction xxx_page_content( $content ) {\n\n    $content = '\u003Cdiv class=\"custom-output\">Sorry, I Only Speak REST. Please try again at a proper endpoint.\u003C\u002Fdiv>';\n\n    return $content;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Add custom CSS to the default output:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'only_rest_api_page_css', 'xxx_page_css' );\nfunction xxx_page_css( $css ) {\n\n    $css .= '.page-content { color: red; font-size: 72px; }';\n\n    return $css;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Replace the entire HTML output for the page:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'only_rest_api_page_html', 'xxx_page_html' );\nfunction xxx_page_html( $html ) {\n\n    ob_start();\n\n    ?>\n    \u003C!doctype html>\n    \u003Chtml lang=\"\">\n        \u003Chead>\n            \u003Cmeta charset=\"utf-8\">\n            \u003Cmeta http-equiv=\"x-ua-compatible\" content=\"ie=edge\">\n            \u003Ctitle>Call me back over the REST API yo!\u003C\u002Ftitle>\n            \u003Cmeta name=\"description\" content=\"\">\n            \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n            \u003Clink rel=\"stylesheet\" type=\"text\u002Fcss\" href=\"your-awesome-stylesheet.css\">\n            \u003Cscript type=\"text\u002Fjavascript\">\n                \u002F\u002F Do neat stuff...\n            \u003C\u002Fscript>\n        \u003C\u002Fhead>\n        \u003Cbody>\n            \u003Cdiv class=\"page-content\">\n                Ain't nobody got time for non-REST API requests. Please try again at a proper endpoint. :)\n            \u003C\u002Fdiv>\n        \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n    \u003C?php\n\n    $html = ob_get_clean();\n\n    return $html;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Redirects all front end, non-REST API requests to a single page.",2246,"2015-12-07T15:12:00.000Z",[68,69,70,32],"api","json","only","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fonly-rest-api\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fonly-rest-api.1.0.0.zip",{"slug":74,"name":75,"version":76,"author":5,"author_profile":6,"description":77,"short_description":78,"active_installs":79,"downloaded":80,"rating":22,"num_ratings":81,"last_updated":82,"tested_up_to":49,"requires_at_least":26,"requires_php":27,"tags":83,"homepage":87,"download_link":88,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":89},"genesis-rest-api-integration","Genesis REST API Integration","1.1.0","\u003Cp>If your site uses the Genesis framework, it’s likely that you’re making use of Genesis hooks like genesis_before_content or genesis_entry_footer. When using the WP REST API, any content that has been added to these hooks is not included in the response by default.\u003C\u002Fp>\n\u003Cp>This plugin filters the response from the API to include any content added via Genesis hooks. It adds this content to the post object response, which means you don’t have to do a separate request or modify your request to get the data. Simply ask for a post in the standard way like \u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F1 and you’ll get the extra content from the Genesis hooks.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.diffchecker.com\u002Fv9ttyrq7\" rel=\"nofollow ugc\">Example diff showing the response with and without the plugin active\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>The Genesis hook content that is returned is generated with respect to the context of the specific post being retrieved. The context will match what it would be on the single post page for the given post, page, or custom post type. This means that if you’ve got some code like this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_action( 'genesis_before_entry', 'mytheme_output_special_content' );\nfunction mytheme_output_special_content() {\n    \u002F\u002F Only on posts in a specific category\n    if ( in_category( '5' ) ) {\n        echo 'Some Content';\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You’ll get back ‘Some Content’ as the value of the property ‘genesis_before_entry’ on the response object only if the post is actually in category 5. All of the standard conditionals like is_archive(), is_single(), has_tag(), etc. will be respected.\u003C\u002Fp>\n\u003Cp>By default this plugin only adds properties to the response object for hooks that have output, but you can modify this behavior using a filter like so:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'genesis_rest_api_return_empty_hooks', '__return_true' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>By default this plugin adds the extra properties to posts, pages, and all custom post types, but you can specify which post types you want to include the extra data with another filter:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'genesis_rest_api_supported_post_types', 'mytheme_genesis_rest_api_supported_post_types' );\nfunction mytheme_genesis_rest_api_supported_post_types( $post_types ) {\n\n    \u002F\u002F Only add data to the movie post type.\n    $post_types = array( 'movie' );\n\n    return $post_types;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>NOTE:\u003C\u002Fstrong> In v2 of the REST API, custom post types need to have the extra properties \u003Ccode>show_in_rest\u003C\u002Fcode>, \u003Ccode>rest_base\u003C\u002Fcode>, and \u003Ccode>rest_controller_class\u003C\u002Fcode> set on their post type objects in order for the API to start serving data for them. I’ve included a filter in this plugin for adding these properties so that you can declare REST API support for CPTs and add the extra Genesis data in one step, but the filter is off by default and won’t override properties that are already set (because if core doesn’t assume you want all your CPTs publicly accessible by default, I don’t think I should either). To turn this functionality on, use the included filter like this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'genesis_rest_api_register_cpt_api_support', '__return_true' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If you do this, you’re CPTs will be available at routes that match the official name of the post type found on the post type object, so if your post type is ‘movie’ and you have a movie with an id of 8, the movie will be accessible at \u002Fwp-json\u002Fv2\u002Fmovie\u002F8. It’s probably a better idea to match the core convention of \u002Fposts\u002F and \u002Fpages\u002F, so if you want to make the route available at \u002Fmovies\u002F instead of \u002Fmovie\u002F you just need to specifically set the \u003Ccode>rest_base\u003C\u002Fcode> property like so:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_action( 'init', 'mytheme_change_cpt_routes', 11 );\nfunction mytheme_change_cpt_routes() {\n\n    global $wp_post_types;\n\n    $wp_post_types['movie']->rest_base = 'movies';\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Here’s the full list of all the Genesis hooks that are currently supported:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>genesis_before\ngenesis_before_header\ngenesis_site_title\ngenesis_site_description\ngenesis_header_right\ngenesis_after_header\ngenesis_before_content_sidebar_wrap\ngenesis_before_content\ngenesis_before_loop\ngenesis_before_while\ngenesis_before_entry\ngenesis_entry_header\ngenesis_before_entry_content\ngenesis_entry_content\ngenesis_after_entry_content\ngenesis_entry_footer\ngenesis_after_entry\ngenesis_after_endwhile\ngenesis_after_loop\ngenesis_before_sidebar_widget_area\ngenesis_after_sidebar_widget_area\ngenesis_after_content_sidebar_wrap\ngenesis_before_footer\ngenesis_footer\ngenesis_after_footer\ngenesis_after\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And naturally, there is a filter to control which hooks are supported:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'genesis_rest_api_supported_hooks', 'mytheme_genesis_rest_api_supported_hooks' );\nfunction mytheme_genesis_rest_api_supported_hooks( $genesis_hooks ) {\n\n    \u002F\u002F Only include certian hooks.\n    $genesis_hooks = array(\n        'genesis_before_entry',\n        'genesis_after_entry',\n    );\n\n    return $genesis_hooks;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>NOTE:\u003C\u002Fstrong> The hooks genesis_header and genesis_loop are not included by default because they mostly call other hooks that are included, but you can always add them back in using the genesis_rest_api_supported_hooks filter.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>NOTE:\u003C\u002Fstrong> Returning formatted HTML over the REST API is not the best way to make use of a REST API to build a website. It would be preferable to return only the raw object data and build all of your HTML on the client side using the object data. With this plugin you can do exactly this with a little help from \u003Ccode>json_encode\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_action( 'genesis_before_entry_content', 'mytheme_pass_array' );\nfunction mytheme_pass_array() {\n\n    if ( is_single( 124 ) ) {\n        $json = array(\n            'a_key' => 'some value',\n            'another_key' => 'another value',\n        );\n        echo json_encode( $json );\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Or the object version:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_action( 'genesis_after_entry_content', 'mytheme_pass_object' );\nfunction mytheme_pass_object() {\n\n    if ( in_category( 2 ) ) {\n        $json = new stdClass();\n        $json->some_key = 'some value';\n        $json->another_key = 'another value';\n        echo json_encode( $json );\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Passing arbitrary objects and arrays like this really opens up some interesting possibilities.\u003C\u002Fp>\n\u003Cp>If you have any ideas for new features or find a bug, please open an issue \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBraadMartin\u002Fgenesis-rest-api-integration\" title=\"Genesis REST API Integration\" rel=\"nofollow ugc\">on Github\u003C\u002Fa>. Pull requests are also encouraged :).\u003C\u002Fp>\n","Adds content output from the Genesis framework hooks to the response data for posts, pages, and custom post types when using the WP REST API v2.",10,1999,1,"2015-12-07T14:43:00.000Z",[68,84,85,86,32],"framework","genesis","integration","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fgenesis-rest-api-integration\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fgenesis-rest-api-integration.1.1.0.zip","2026-04-06T09:54:40.288Z",{"slug":91,"name":92,"version":62,"author":5,"author_profile":6,"description":93,"short_description":94,"active_installs":79,"downloaded":95,"rating":36,"num_ratings":36,"last_updated":96,"tested_up_to":49,"requires_at_least":50,"requires_php":27,"tags":97,"homepage":102,"download_link":103,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"mm-ajax-login","Mm Ajax Login","\u003Cp>This plugin allows you to create special links that check whether a user is logged in and then follow the link if they are or show an ajax-powered login form in a simple lightbox if they are not. Once the user fills out the login form with valid credentials they will be logged in and redirected to the page the link points to.\u003C\u002Fp>\n\u003Ch4>Scenario\u003C\u002Fh4>\n\u003Cp>Let’s say you’ve got a page on your site that only logged in users are able to access. It could be a private page or ideally it is a page that is set up to show a standard login form to users who are not logged in. With this plugin you could add the class ‘ajax-login-trigger’ to all the links that point to that page, then when a user clicks one of these links an ajax request is sent to the server to check whether the user is already logged in, and if they are the user is redirected to the page without ever noticing that the login check was done, or if they aren’t logged in they’ll see a login form appear in a simple lightbox. When the user fills out the form, a second ajax request is sent to the server to attempt to log them in, and if successful the user is redirected to the page.\u003C\u002Fp>\n\u003Ch4>Customize It!\u003C\u002Fh4>\n\u003Cp>This plugin includes lots of hooks and filters that allow for all sorts of customizations and unique use cases. Here’s a quick list:\u003C\u002Fp>\n\u003Cp>Actions:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>mm_ajax_login_before_form_outside\nmm_ajax_login_before_form_inside\nmm_ajax_login_extra_buttons\nmm_ajax_login_after_form_inside\nmm_ajax_login_after_form_outside\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Filters:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>mm_ajax_login_trigger_selector\nmm_ajax_login_form_title\nmm_ajax_login_status_message\nmm_ajax_login_username_label\nmm_ajax_login_password_label\nmm_ajax_login_rememberme_text\nmm_ajax_login_lost_password_text\nmm_ajax_login_button_text\nmm_ajax_login_custom_login_action\nmm_ajax_login_email_login_fail_message\nmm_ajax_login_success_message\nmm_ajax_login_fail_message\nmm_ajax_login_allow_email_login\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Many things are possible with these hooks. The hooks \u003Ccode>mm_ajax_login_before_form_inside\u003C\u002Fcode> and \u003Ccode>mm_ajax_login_after_form_inside\u003C\u002Fcode> allow you to add any custom input elements to the form. When the login form is submitted all of the values from the input elements included in the form will get passed to the PHP function that processes the ajax request, which will then pass the data to the \u003Ccode>mm_ajax_login_custom_login_action\u003C\u002Fcode> filter. You can intercept the incoming data using this filter and proceed with any custom action you want, like registering new users and logging them in during the same action.\u003C\u002Fp>\n\u003Ch4>Filter Examples\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Use a custom selector for the trigger link:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'mm_ajax_login_trigger_selector', 'prefix_custom_login_trigger' );\nfunction prefix_custom_login_trigger( $selector ) {\n\n    \u002F\u002F Custom selector goes here.\n    $selector = '.my-custom-selector';\n\n    return $selector;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Use a custom status message:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'mm_ajax_login_status_message', 'prefix_custom_status_message' );\nfunction prefix_custom_status_message( $status_message ) {\n\n    \u002F\u002F Custom status message goes here.\n    $status_message = 'Magic happening...';\n\n    return $status_message;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This plugin is \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMIGHTYminnow\u002Fmm-ajax-login\" rel=\"nofollow ugc\">on Github\u003C\u002Fa> and pull requests are always welcome.\u003C\u002Fp>\n","A custom lightbox login form that serves as a gatekeeper for links with the class \"ajax-login-trigger\".",2075,"2015-12-07T14:36:00.000Z",[98,99,100,101],"ajax","form","lightbox","login","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fmm-ajax-login\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmm-ajax-login.1.0.0.zip",{"slug":105,"name":106,"version":107,"author":5,"author_profile":6,"description":108,"short_description":109,"active_installs":79,"downloaded":110,"rating":111,"num_ratings":112,"last_updated":113,"tested_up_to":49,"requires_at_least":26,"requires_php":27,"tags":114,"homepage":119,"download_link":120,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":89},"plugin-cards","Plugin Cards","1.2.2","\u003Cp>Plugin Cards lets you display WordPress 4.0 style cards with plugin information for any plugin that lives on the wordpress.org repository. All of the custom queries that are possible using the wordpress.org API are possible with this plugin, including queries for plugins by:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Slug\u003C\u002Fli>\n\u003Cli>Author\u003C\u002Fli>\n\u003Cli>Tag\u003C\u002Fli>\n\u003Cli>Search term\u003C\u002Fli>\n\u003Cli>Brose terms: popular, new, & beta\u003C\u002Fli>\n\u003Cli>A wordpress.org user’s favorites list\u003C\u002Fli>\n\u003Cli>Any other custom query you pass in via an included filter\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This plugin uses the same wordpress.org API that your wp-admin uses when you are searching for new plugins, and it uses as much of the admin CSS and core functionality as possible to bring you a purposefully stock experience.\u003C\u002Fp>\n\u003Cp>I have also included a number of filters in the plugin that allow you to customize everything. You can use a custom query, include custom fields not shown by default, use custom icons, use custom plugin urls, add to or override the information shown in each section of the output, override the entire output with your own, and more.\u003C\u002Fp>\n\u003Cp>This plugin is \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBraadMartin\u002Fplugin-cards\" title=\"Plugin Cards on Github\" rel=\"nofollow ugc\">on Github\u003C\u002Fa> and I encourage feature requests and pull requests.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Query the wordpress.org plugin repo by all methods supported by the wordpress.org API, including by slug, author, tag, popular, new, beta, user’s favorites, and search term\u003C\u002Fli>\n\u003Cli>Cards match the design introduced in WordPress 4.0\u003C\u002Fli>\n\u003Cli>Uses the wordpress.org API to get plugin information\u003C\u002Fli>\n\u003Cli>Caches results to minimize hits on the API\u003C\u002Fli>\n\u003Cli>Default fields include plugin name, icon, description, author link, star rating, active install count, last updated and compatible up to\u003C\u002Fli>\n\u003Cli>Uses SVG plugin icon if available, then retina icon if available, then regular icon\u003C\u002Fli>\n\u003Cli>Uses the WP native Dashicons for the star ratings\u003C\u002Fli>\n\u003Cli>Intelligently Responsive\u003C\u002Fli>\n\u003Cli>Easily customize the look of the cards with CSS\u003C\u002Fli>\n\u003Cli>Easily customize the functionality of the entire plugin with provided filters\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>With Plugin Cards you can easily display a custom list of plugins for any purpose.\u003C\u002Fp>\n\u003Ch4>Usage\u003C\u002Fh4>\n\u003Cp>This plugin adds a shortcode \u003Ccode>[plugin_cards]\u003C\u002Fcode> that you can use to display the plugin cards anywhere on your site.\u003C\u002Fp>\n\u003Cp>The following parameters can be used to create your query:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[plugin_cards slug=\"easy-digital-downloads\"]\n[plugin_cards author=\"markjaquith\"]\n[plugin_cards user=\"matt\"] \u002F\u002F Displays user's favorites list\n[plugin_cards tag=\"slider\"]\n[plugin_cards browse=\"popular\"]\n[plugin_cards browse=\"new\"]\n[plugin_cards browse=\"beta\"]\n[plugin_cards search=\"gallery\"]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Note:\u003C\u002Fstrong> The wordpress.org API only supports querying by one parameter at a time, so currently only one parameter can be included in the shortcode to build the query. If this ever changes I will add support for querying by multiple parameters to this plugin.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Note:\u003C\u002Fstrong> The parameter is required for the shortcode to work. Simply using [plugin_cards] will result in a silent fail.\u003C\u002Fp>\n\u003Cp>You can also set the max number of results using the max_results parameter like this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[plugin_cards max_results=\"10\" browse=\"popular\"]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Advanced Usage\u003C\u002Fh4>\n\u003Cp>This plugin includes a number of filters that you can use to customize the display of the cards and add plugin information to the cards. I recommend reading through the code if you really want to understand how the filters can be used. Here are some examples:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Use a custom query\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function custom_plugin_cards_query( $custom_query_args, $atts = array(), $fields = array() ) {\n\n    \u002F\u002F Show the 10 most popular plugins with only certain fields returned\n    $custom_query_args = array(\n        'per_page' => 10,\n        'browse' => 'popular',\n        'fields' => array(\n            'banners' => true,\n            'icons' => false,\n            'reviews' => true,\n            'rating' => true,\n            'num_ratings' => true,\n            'downloaded' => false,\n            'active_installs' => false,\n            'short_description' => false,\n            'sections' => true,\n            'downloadlink' => true,\n            'last_updated' => true,\n            'homepage' => true,\n        )\n    );\n\n    return $custom_query_args;\n\n}\nadd_filter( 'plugin_cards_api_query_args', 'custom_plugin_cards_query', 10, 3 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then you’d have to use one of the output filters and some CSS to get the new fields to show on the page. There is a lot that is possible with the \u003Ccode>plugin_cards_api_query_args\u003C\u002Fcode> filter, too much to cover here, but the key is setting the right main query param and setting the fields that you want returned.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Use custom URLs\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function custom_plugin_card_urls( $plugin_url, $plugin = null ) {\n\n    \u002F\u002F Point URLs to a custom endpoint based on the plugin slug\n    $plugin_url = 'https:\u002F\u002Fdomain.com\u002Fcustom-plugins\u002F' . esc_attr( $plugin->slug );\n\n    \u002F\u002F Change the URL of a specific plugin\n    if ( 'woocommerce' === $plugin->slug ) {\n        $plugin_url = 'http:\u002F\u002Fwww.woothemes.com\u002Fwoocommerce\u002F';\n    }\n\n    return $plugin_url;\n\n}\nadd_filter( 'plugin_cards_plugin_url', 'custom_plugin_card_urls', 10, 2 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The complete list of simple filters that work exactly like plugin_cards_plugin_urls is:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>plugin_cards_plugin_url\nplugin_cards_plugin_name\nplugin_cards_short_description\nplugin_cards_plugin_author\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>There are also some advanced filters that allow you to override the HTML output of entire sections, including:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>plugin_cards_plugin_icon\nplugin_cards_action_links\nplugin_cards_plugin_rating\nplugin_cards_last_updated\nplugin_cards_install_count\nplugin_cards_plugin_compatibility\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>These filters can be used like this:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Use custom plugin icons\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function custom_plugin_card_icons( $plugin_icon, $plugin = null, $plugin_url = '' ) {\n\n    \u002F\u002F Replace all plugin icons with kittens\n    $plugin_icon = '\u003Ca href=\"' . esc_url( $plugin_url ) . '\" class=\"plugin-icon\">\u003Cimg src=\"http:\u002F\u002Fdomain.com\u002Fkittens.jpg\" \u002F>\u003C\u002Fa>';\n\n    \u002F\u002F Replace the icon for a specific plugin\n    if ( 'equal-height-columns' === $plugin->slug ) {\n        $plugin_icon = '\u003Ca href=\"' . esc_url( $plugin_url ) . '\" class=\"plugin-icon\">\u003Cimg src=\"http:\u002F\u002Fdomain.com\u002Fcustom-icon.jpg\" \u002F>\u003C\u002Fa>';\n    }\n\n    return $plugin_icon;\n\n}\nadd_filter( 'plugin_cards_plugin_icon', 'custom_plugin_card_icons', 10, 3 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>There is also one special filter \u003Ccode>plugin_cards_cache_expiration\u003C\u002Fcode> that allows you to set how long you want the results of the API request to be cached. The default is 2 hours (expressed as number of seconds).\u003C\u002Fp>\n\u003Cp>If you want a hook added just let me know. Pull requests are welcome \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBraadMartin\u002Fplugin-cards\" title=\"Plugin Cards on Github\" rel=\"nofollow ugc\">on Github\u003C\u002Fa>.\u003C\u002Fp>\n","Display plugin cards that match the style introduced in WordPress 4.0. Uses the wordpress.org API and supports custom queries.",2855,90,8,"2015-12-07T15:07:00.000Z",[115,116,117,118],"card","cards","repo","search","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fplugin-cards\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fplugin-cards.1.2.2.zip"]