{"id":6457,"date":"2014-05-20T15:58:54","date_gmt":"2014-05-20T19:58:54","guid":{"rendered":"http:\/\/localhost\/documentation\/"},"modified":"2025-03-19T05:09:24","modified_gmt":"2025-03-19T09:09:24","slug":"gffeedaddon","status":"publish","type":"post","link":"https:\/\/docs.gravityforms.com\/gffeedaddon\/","title":{"rendered":"GFFeedAddOn"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-introduction\">Introduction<\/h2>\n\n\n\n<p>The GFFeedAddOn class provides basic functionality for developers when creating new feed-based add-ons for Gravity Forms. It includes all the features of the GFAddOn class with one exception; the Form Settings are replaced by the Feed Settings UI.<\/p>\n\n\n\n<p>Before reading any further please review the documentation for creating a simple add-on using the <a href=\"https:\/\/docs.gravityforms.com\/gfaddon\/\" target=\"_blank\" rel=\"noopener noreferrer\">GFAddOn<\/a> class.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a data-autolink=\"autolink_settings-api\" href=\"\/settings-api\">Settings API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.gravityforms.com\/gfaddon\/#creating-plugin-settings\" target=\"_blank\" rel=\"noopener noreferrer\">Creating Plugin Settings<\/a><\/li>\n\n\n\n<li><a href=\"\/include-scripts-styles-with-addon-framework\/\">Including Scripts And Styles When Using The Add-On Framework<\/a><\/li>\n\n\n\n<li><a href=\"\/using-entry-meta-with-add-on-framework\/\">Including And Using Entry Meta With The Add-On Framework<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.gravityforms.com\/gfaddon\/#object-locking-api\" target=\"_blank\" rel=\"noopener noreferrer\">Object Locking<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.gravityforms.com\/gfaddon\/#results-page\" target=\"_blank\" rel=\"noopener noreferrer\">Creating a Results Page<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.gravityforms.com\/gfaddon\/#uninstalling\" target=\"_blank\" rel=\"noopener noreferrer\">Uninstalling<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-creating-feed-settings\">Creating Feed Settings<\/h2>\n\n\n\n<p>The feed settings UI is generated by overriding the feed_settings_fields() function and returning an array with the configuration for each of the fields. The configuration array follows the same structure as the form settings configuration. See the <a href=\"\/settings-api\" data-autolink=\"autolink_settings-api\">Settings API<\/a> for further details on the structure of the array.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-feed-settings-fields-example\">Feed Settings Fields Example<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\npublic function feed_settings_fields() {\n    return array(\n        array(\n            &#039;title&#039;  =&gt; &#039;Simple Form Settings&#039;,\n            &#039;fields&#039; =&gt; array(\n                array(\n                    &#039;label&#039;   =&gt; &#039;My checkbox&#039;,\n                    &#039;type&#039;    =&gt; &#039;checkbox&#039;,\n                    &#039;name&#039;    =&gt; &#039;enabled&#039;,\n                    &#039;tooltip&#039; =&gt; &#039;This is the tooltip&#039;,\n                    &#039;choices&#039; =&gt; array(\n                        array(\n                            &#039;label&#039; =&gt; &#039;Enabled&#039;,\n                            &#039;name&#039;  =&gt; &#039;enabled&#039;\n                        )\n                     )\n                ),\n                array(\n                    &#039;label&#039;   =&gt; &#039;My checkboxes&#039;,\n                    &#039;type&#039;    =&gt; &#039;checkbox&#039;,\n                    &#039;name&#039;    =&gt; &#039;checkboxgroup&#039;,\n                    &#039;tooltip&#039; =&gt; &#039;This is the tooltip&#039;,\n                    &#039;choices&#039; =&gt; array(\n                        array(\n                            &#039;label&#039; =&gt; &#039;First Choice&#039;,\n                            &#039;name&#039;  =&gt; &#039;first&#039;\n                        ),\n                        array(\n                            &#039;label&#039; =&gt; &#039;Second Choice&#039;,\n                            &#039;name&#039;  =&gt; &#039;second&#039;\n                        ),\n                        array(\n                            &#039;label&#039; =&gt; &#039;Third Choice&#039;,\n                            &#039;name&#039;  =&gt; &#039;third&#039;\n                        )\n                    )\n                ),\n                array(\n                    &#039;label&#039;   =&gt; &#039;My Radio Buttons&#039;,\n                    &#039;type&#039;    =&gt; &#039;radio&#039;,\n                    &#039;name&#039;    =&gt; &#039;myradiogroup&#039;,\n                    &#039;tooltip&#039; =&gt; &#039;This is the tooltip&#039;,\n                    &#039;choices&#039; =&gt; array(\n                        array(\n                            &#039;label&#039; =&gt; &#039;First Choice&#039;\n                        ),\n                        array(\n                            &#039;label&#039; =&gt; &#039;Second Choice&#039;\n                        ),\n                        array(\n                            &#039;label&#039; =&gt; &#039;Third Choice&#039;\n                        )\n                    )\n                ),\n                array(\n                    &#039;label&#039;      =&gt; &#039;My Horizontal Radio Buttons&#039;,\n                    &#039;type&#039;       =&gt; &#039;radio&#039;,\n                    &#039;horizontal&#039; =&gt; true,\n                    &#039;name&#039;       =&gt; &#039;myradiogrouph&#039;,\n                    &#039;tooltip&#039;    =&gt; &#039;This is the tooltip&#039;,\n                    &#039;choices&#039;    =&gt; array(\n                        array(\n                            &#039;label&#039; =&gt; &#039;First Choice&#039;\n                        ),\n                        array(\n                            &#039;label&#039; =&gt; &#039;Second Choice&#039;\n                        ),\n                        array(\n                            &#039;label&#039; =&gt; &#039;Third Choice&#039;\n                        )\n                    )\n                ),\n                array(\n                    &#039;label&#039;   =&gt; &#039;My Dropdown&#039;,\n                    &#039;type&#039;    =&gt; &#039;select&#039;,\n                    &#039;name&#039;    =&gt; &#039;mydropdown&#039;,\n                    &#039;tooltip&#039; =&gt; &#039;This is the tooltip&#039;,\n                    &#039;choices&#039; =&gt; array(\n                        array(\n                            &#039;label&#039; =&gt; &#039;First Choice&#039;,\n                            &#039;value&#039; =&gt; &#039;first&#039;\n                        ),\n                        array(\n                            &#039;label&#039; =&gt; &#039;Second Choice&#039;,\n                            &#039;value&#039; =&gt; &#039;second&#039;\n                        ),\n                        array(\n                            &#039;label&#039; =&gt; &#039;Third Choice&#039;,\n                            &#039;value&#039; =&gt; &#039;third&#039;\n                        )\n                    )\n                ),\n                array(\n                    &#039;label&#039;             =&gt; &#039;My Text Box&#039;,\n                    &#039;type&#039;              =&gt; &#039;text&#039;,\n                    &#039;name&#039;              =&gt; &#039;mytext&#039;,\n                    &#039;tooltip&#039;           =&gt; &#039;This is the tooltip&#039;,\n                    &#039;class&#039;             =&gt; &#039;medium&#039;,\n                    &#039;feedback_callback&#039; =&gt; array( $this, &#039;is_valid_setting&#039; )\n                ),\n                array(\n                    &#039;label&#039;   =&gt; &#039;My Text Area&#039;,\n                    &#039;type&#039;    =&gt; &#039;textarea&#039;,\n                    &#039;name&#039;    =&gt; &#039;mytextarea&#039;,\n                    &#039;tooltip&#039; =&gt; &#039;This is the tooltip&#039;,\n                    &#039;class&#039;   =&gt; &#039;medium merge-tag-support mt-position-right&#039;\n                ),\n                array(\n                    &#039;label&#039;   =&gt; &#039;My Hidden Field&#039;,\n                    &#039;type&#039;    =&gt; &#039;hidden&#039;,\n                    &#039;name&#039;    =&gt; &#039;myhidden&#039;\n                ),\n                array(\n                    &#039;label&#039;   =&gt; &#039;My Custom Field&#039;,\n                    &#039;type&#039;    =&gt; &#039;my_custom_field_type&#039;,\n                    &#039;name&#039;    =&gt; &#039;my_custom_field&#039;\n                ),\n                array(\n                    &#039;type&#039;           =&gt; &#039;feed_condition&#039;,\n                    &#039;name&#039;           =&gt; &#039;mycondition&#039;,\n                    &#039;label&#039;          =&gt; __( &#039;Opt-In Condition&#039;, &#039;simplefeedaddon&#039; ),\n                    &#039;checkbox_label&#039; =&gt; __( &#039;Enable Condition&#039;, &#039;simplefeedaddon&#039; ),\n                    &#039;instructions&#039;   =&gt; __( &#039;Process this example feed if&#039;, &#039;simplefeedaddon&#039; )\n                ),\n            )\n        ),\n        array(\n            &#039;title&#039;  =&gt; esc_html__( &#039;This is the title for Section 1&#039;, &#039;sometextdomain&#039; ),\n            &#039;fields&#039; =&gt; array(\n                array(\n                    &#039;name&#039;                =&gt; &#039;metaData&#039;,\n                    &#039;label&#039;               =&gt; esc_html__( &#039;Metadata&#039;, &#039;sometextdomain&#039; ),\n                    &#039;type&#039;                =&gt; &#039;dynamic_field_map&#039;,\n                    &#039;limit&#039;               =&gt; 20,\n                    &#039;exclude_field_types&#039; =&gt; &#039;creditcard&#039;,\n                    &#039;tooltip&#039;             =&gt; &#039;&lt;h6&gt;&#039; . esc_html__( &#039;Metadata&#039;, &#039;sometextdomain&#039; ) . &#039;&lt;\/h6&gt;&#039; . esc_html__( &#039;You may send custom meta information to &#x5B;...]. A maximum of 20 custom keys may be sent. The key name must be 40 characters or less, and the mapped data will be truncated to 500 characters per requirements by &#x5B;...]. &#039;, &#039;sometextdomain&#039; ),\n                    &#039;validation_callback&#039; =&gt; array( $this, &#039;validate_custom_meta&#039; ),\n                ),\n            ),\n        ),\n    );\n}\n<\/pre><\/div>\n\n\n<p>The code above will render a Form Settings page for the Simple Add-On similar to this:<br><a href=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Form_Settings_Fields.png\"><img decoding=\"async\" src=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Form_Settings_Fields.png\" alt=\"Form Settings Fields Example\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-dynamic-feed-mapping\">Dynamic Feed Mapping<\/h3>\n\n\n\n<p>Dynamic feed mapping can be used to create fields which automatically map to values in the form. For example, if you need to create a feed that uses information such as a first name and last name, field mapping would be used to map the form fields to those values.<\/p>\n\n\n\n<p>A dynamically mapped field can be implemented just like many of the other feed settings fields and setting the setting field type to <strong>dynamic_field_map<\/strong>. Adding a feed section containing dynamically mapped fields would look something like the following:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\narray(\n    &#039;title&#039;  =&gt; esc_html__( &#039;This is the title for Section 1&#039;, &#039;sometextdomain&#039; ),\n    &#039;fields&#039; =&gt; array(\n        array(\n            &#039;name&#039;                =&gt; &#039;metaData&#039;,\n            &#039;label&#039;               =&gt; esc_html__( &#039;Metadata&#039;, &#039;sometextdomain&#039; ),\n            &#039;type&#039;                =&gt; &#039;dynamic_field_map&#039;,\n            &#039;limit&#039;               =&gt; 20,\n            &#039;exclude_field_types&#039; =&gt; &#039;creditcard&#039;,\n            &#039;tooltip&#039;             =&gt; &#039;&lt;h6&gt;&#039; . esc_html__( &#039;Metadata&#039;, &#039;sometextdomain&#039; ) . &#039;&lt;\/h6&gt;&#039; . esc_html__( &#039;You may send custom meta information to &#x5B;...]. A maximum of 20 custom keys may be sent. The key name must be 40 characters or less, and the mapped data will be truncated to 500 characters per requirements by &#x5B;...]. &#039;, &#039;sometextdomain&#039; ),\n            &#039;validation_callback&#039; =&gt; array( $this, &#039;validate_custom_meta&#039; ),\n        ),\n    ),\n)\n<\/pre><\/div>\n\n\n<p>More information on the <em>dynamic_field_map<\/em> field type can be found on the <a href=\"https:\/\/docs.gravityforms.com\/dynamic_field_map-field\/\"><em>dynamic_field_map<\/em> Field documentation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-adding-columns-to-feed-list\">Adding Columns to Feed List<\/h2>\n\n\n\n<p>To add columns to the list of feeds, override the feed_list_columns() function and return an array of column keys with their corresponding titles. The values will be rendered to the list automatically, but if you need to customize the value just before it is rendered to the list, declare a function with the name get_column_value_[column key] and pass the $feed object as a parameter to the function. The feed object is an associative array with the keys as defined in feed_settings_fields() with the corresponding values for the current row.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-adding-columns-to-feed-list-example\">Adding Columns to Feed List Example<\/h3>\n\n\n\n<p>This example adds two columns to the feed list. The columns are titled &#8220;Name&#8221; and &#8220;My Textbox&#8221;. The get_column_value_mytext function returns the value for the &#8220;mytext&#8221; field as bold text.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nprotected function feed_list_columns() {\n    return array(\n        &#039;feedName&#039; =&gt; __( &#039;Name&#039;, &#039;simplefeedaddon&#039; ),\n        &#039;mytext&#039;   =&gt; __( &#039;My Textbox&#039;, &#039;simplefeedaddon&#039; )\n    );\n}\n\n\/\/ customize the value of mytext before it is rendered to the list\npublic function get_column_value_mytext( $feed ){\n    return &#039;&lt;b&gt;&#039; . rgars( $feed, &#039;meta\/mytext&#039; ) . &#039;&lt;\/b&gt;&#039;;\n}\n<\/pre><\/div>\n\n\n<p>The code above will render a Feed List page similar to the following:<br><a href=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Adding_Columns_to_Feed_List.png\"><img decoding=\"async\" src=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Adding_Columns_to_Feed_List.png\" alt=\"Adding Columns to Feed LIst Example\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-processing-feeds\">Processing Feeds<\/h2>\n\n\n\n<p>Override the process_feed() method to add code to handle feed processing, such as passing the form entry values to a third-party service.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n\/**\n * Processes feed action.\n *\n * @param array $feed  The Feed Object currently being processed.\n * @param array $entry The Entry Object currently being processed.\n * @param array $form  The Form Object currently being processed.\n *\n * @return void|null|bool|WP_Error|array The returned value determines if the feed status is saved to the \"feed_{$feed_id}_status\" entry meta.\n *                                       - void or null when the feed status should not be saved.\n *                                       - false or a WP_Error when a failed status should be saved.\n *                                       - true or the entry array when a success status should be saved.\n *\/\npublic function process_feed( $feed, $entry, $form ) {}\n<\/pre><\/div>\n\n\n<p>We recommend using get_field_value() to retrieve the entry value for a mapped field, e.g.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n$email = $this-&gt;get_field_value( $form, $entry, $feed&#x5B;&#039;meta&#039;]&#x5B;&#039;listFields_email&#039;] );\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-save-entry-feed-status\">save_entry_feed_status()<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\npublic function save_entry_feed_status( $result, $entry_id, $feed_id, $form_id ) {}\n<\/pre><\/div>\n\n\n<p><code>save_entry_feed_status<\/code> was added in Gravity Forms version 2.9.4, It is called by\u00a0<code>GFFeedAddOn::maybe_process_feed()<\/code>\u00a0and\u00a0<code>GF_Feed_Processor::task()<\/code>\u00a0after the feed has been processed, and is passed the value returned by\u00a0<code>process_feed()<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-parameters\">Parameters<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>$result<\/code>&nbsp;null|<a href=\"https:\/\/docs.gravityforms.com\/bool\/\">bool<\/a>|<a href=\"https:\/\/docs.gravityforms.com\/array\/\">array<\/a>|WP_Error|Exception<br>The value returned by&nbsp;<code>process_feed()<\/code>.<\/li>\n\n\n\n<li><code>$entry_id<\/code>&nbsp;<a href=\"https:\/\/docs.gravityforms.com\/int\/\">int<\/a><br>The ID of the entry the feed was processed for.<\/li>\n\n\n\n<li><code>$feed_id<\/code> <a href=\"https:\/\/docs.gravityforms.com\/int\/\">int<\/a><br>The ID of the feed that was processed.<\/li>\n\n\n\n<li><code>$form_id<\/code>&nbsp;<a href=\"https:\/\/docs.gravityforms.com\/int\/\">int<\/a><br>The ID of the form the entry and feed belong to.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-post-process-feed\">post_process_feed()<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\npublic function post_process_feed( $feed, $entry, $form ) {}\n<\/pre><\/div>\n\n\n<p><code>post_process_feed<\/code> was added in Gravity Forms version 2.9.4. It is called by\u00a0<code>GFFeedAddOn::maybe_process_feed()<\/code>\u00a0and\u00a0<code>GF_Feed_Processor::task()<\/code>\u00a0after the feed has been processed. It contains the <a href=\"https:\/\/docs.gravityforms.com\/gform_post_process_feed\/\" target=\"_blank\" rel=\"noreferrer noopener\">gform_post_process_feed<\/a> hooks.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-parameters-0\">Parameters<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>$feed<\/code>&nbsp;<a href=\"https:\/\/docs.gravityforms.com\/array\/\">array<\/a><br>The feed that was processed.<\/li>\n\n\n\n<li><code>$entry<\/code>&nbsp;<a href=\"https:\/\/docs.gravityforms.com\/array\/\">array<\/a><br>The entry the feed was processed for.<\/li>\n\n\n\n<li><code>$form<\/code>&nbsp;<a href=\"https:\/\/docs.gravityforms.com\/array\/\">array<\/a><br>The form the entry and feed belong to.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-fulfill-entry\">fulfill_entry()<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\npublic function fulfill_entry( $entry_id, $form_id ) {}\n<\/pre><\/div>\n\n\n<p><code>fulfill_entry<\/code> was added in Gravity Forms version 2.9.4. It is called by\u00a0<code>GFFeedAddOn::maybe_process_feed()<\/code>\u00a0and\u00a0<code>GF_Feed_Processor::task()<\/code>\u00a0after the feed has been processed. It sets the <code>{slug}_is_fulfilled<\/code> entry meta to <code>true<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-parameters-1\">Parameters<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>$entry_id<\/code>&nbsp;<a href=\"https:\/\/docs.gravityforms.com\/int\/\">int<\/a><br>The entry ID.<\/li>\n\n\n\n<li><code>$form_id<\/code>&nbsp;<a href=\"https:\/\/docs.gravityforms.com\/int\/\">int<\/a><br>The form ID.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-implementing-a-feed-condition-setting\">Implementing a Feed Condition Setting<\/h2>\n\n\n\n<p>A feed condition setting is a feed setting that automatically adds an optional conditional logic setting to the feed. The field is configured just like the other fields (see the <a href=\"\/settings-api\" data-autolink=\"autolink_settings-api\">Settings API<\/a>) with the the following properties:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>type<\/strong> <a href=\"https:\/\/docs.gravityforms.com\/string\/\">string<\/a><br>&#8216;feed condition&#8217;<\/li>\n\n\n\n<li><strong>name<\/strong> <a href=\"https:\/\/docs.gravityforms.com\/string\/\">string<\/a><br>The name for the setting.<\/li>\n\n\n\n<li><strong>label<\/strong> <a href=\"https:\/\/docs.gravityforms.com\/string\/\">string<\/a><br>The label for the feed condition setting.<\/li>\n\n\n\n<li><strong>checkbox_label<\/strong> <a href=\"https:\/\/docs.gravityforms.com\/string\/\">string<\/a><br>The label that appears to the right of the checkbox used to enable the condition. If this is not set, the default translated string &#8220;Enable Condition&#8221; is used.<\/li>\n\n\n\n<li><strong>instructions<\/strong> <a href=\"https:\/\/docs.gravityforms.com\/string\/\">string<\/a><br>The instruction text appears above the conditional logic drop downs, is followed by the All\/Any drop down selection, and the translated text &#8220;of the following match&#8221;. If you do not specify instruction text, the text &#8220;Process this feed if&#8221; is used.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-feed-condition-field-examples\">Feed Condition Field Examples<\/h3>\n\n\n\n<p>This is a simple example that uses the basic settings to create the feed condition field.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\narray(\n    &#039;type&#039;  =&gt; &#039;feed_condition&#039;,\n    &#039;name&#039;  =&gt; &#039;sample_condition&#039;,\n    &#039;label&#039; =&gt; &#039;Feed Condition&#039;,\n)\n<\/pre><\/div>\n\n\n<p>The code above will render the feed condition field as follows:<br><a href=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/Fields_Feed_Condition_Simple_Example.png\"><img decoding=\"async\" src=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/Fields_Feed_Condition_Simple_Example.png\" alt=\"Feed Condition Simple Example\"><\/a><\/p>\n\n\n\n<p>This example includes setting the checkbox_label and instructions.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\narray(\n    &#039;type&#039;           =&gt; &#039;feed_condition&#039;,\n    &#039;name&#039;           =&gt; &#039;mycondition&#039;,\n    &#039;label&#039;          =&gt; __( &#039;Opt-In Condition&#039;, &#039;simplefeedaddon&#039; ),\n    &#039;checkbox_label&#039; =&gt; __( &#039;Enable Condition&#039;, &#039;simplefeedaddon&#039; ),\n    &#039;instructions&#039;   =&gt; __( &#039;Process this example feed if&#039;, &#039;simplefeedaddon&#039; )\n)\n<\/pre><\/div>\n\n\n<p>The code above will render the feed condition field as follows:<br><a href=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/Fields_Feed_Condition_Example.png\"><img decoding=\"async\" src=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/Fields_Feed_Condition_Example.png\" alt=\"Settings API Sections Example\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-asynchronous-feed-processing\">Asynchronous Feed Processing<\/h2>\n\n\n\n<p>As of Gravity Forms version 2.2, feeds can be loaded asynchronously. This means that instead of processing all of the feeds at once, the feeds will be loaded individually.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-gffeedaddon-async-feed-processing-property\">GFFeedAddOn $_async_feed_processing Property<\/h3>\n\n\n\n<p>To load a feed asynchronously, set the <a href=\"https:\/\/docs.gravityforms.com\/_async_feed_processing\/\">$_async_feed_processing<\/a> property within the <em>GFFeedAddOn<\/em> class to <em>true<\/em>.<\/p>\n\n\n\n<p><strong>Example<\/strong>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nclass My_Feed_AddOn extends GFFeedAddOn {\n    public $_async_feed_processing = true;\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-gform-is-feed-asynchronous-filter\">gform_is_feed_asynchronous Filter<\/h3>\n\n\n\n<p><strong>Example<\/strong>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nadd_filter( 'gform_is_feed_asynchronous'. '__return_true' );\n<\/pre><\/div>\n\n\n<p>See <a href=\"https:\/\/docs.gravityforms.com\/gform_is_feed_asynchronous\/\">gform_is_feed_asynchronous<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-further-reading\">Further Reading<\/h2>\n\n\n\n<p>The following articles may also be useful:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.gravityforms.com\/notifications-custom-events-addon-framework\/\">Sending Notifications on Custom Events when using the Add-On Framework<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.gravityforms.com\/adding-note-when-using-addon-framework\/\">Adding a Note to the Entry when using the Add-On Framework<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.gravityforms.com\/mapped-field-values-during-feed-processing\/\">Accessing Mapped Field Values During Feed Processing<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sample-feed-add-on\">Sample Feed Add-On<\/h2>\n\n\n\n<p>A sample feed add-on is available which demonstrates the basic functions of GFFeedAddOn:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Feed settings including feed conditions<\/li>\n\n\n\n<li>Plugin page<\/li>\n\n\n\n<li>Plugin Settings<\/li>\n\n\n\n<li>Scripts and Styles<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/github.com\/rocketgenius\/simplefeedaddon\">https:\/\/github.com\/rocketgenius\/simplefeedaddon<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The GFFeedAddOn class provides basic functionality for developers when creating new feed-based add-ons for Gravity Forms. It includes all the features of the GFAddOn class with one exception; the Form Settings are replaced by the Feed Settings UI.<\/p>\n","protected":false},"author":16,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_autodraft_ids":[],"jetpack_post_was_ever_published":false,"_sb_is_suggestion_mode":false,"_sb_show_suggestion_boards":false,"_sb_show_comment_boards":false,"_sb_suggestion_history":"","_sb_update_block_changes":"","_is_real_time_mode":false,"_realtime_collaborators":"","footnotes":"","cf_checklist_status":[]},"categories":[197],"tags":[],"class_list":["post-6457","post","type-post","status-publish","format-standard","hentry","category-classes","wpautop"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>GFFeedAddOn - Gravity Forms Documentation<\/title>\n<meta name=\"description\" content=\"The GFFeedAddOn class provides basic functionality for developers when creating new feed-based add-ons for Gravity Forms. It includes all the features of the GFAddOn class with one exception; the Form Settings are replaced by the Feed Settings UI.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/docs.gravityforms.com\/gffeedaddon\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GFFeedAddOn\" \/>\n<meta property=\"og:description\" content=\"The GFFeedAddOn class provides basic functionality for developers when creating new feed-based add-ons for Gravity Forms. It includes all the features of the GFAddOn class with one exception; the Form Settings are replaced by the Feed Settings UI.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/docs.gravityforms.com\/gffeedaddon\/\" \/>\n<meta property=\"og:site_name\" content=\"Gravity Forms Documentation\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-20T19:58:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-19T09:09:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Form_Settings_Fields.png\" \/>\n<meta name=\"author\" content=\"Justin Pakes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@gravityforms\" \/>\n<meta name=\"twitter:site\" content=\"@gravityforms\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Justin Pakes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/\"},\"author\":{\"name\":\"Justin Pakes\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#\\\/schema\\\/person\\\/8a88745ec2ee5bc1bb24eea8634bf376\"},\"headline\":\"GFFeedAddOn\",\"datePublished\":\"2014-05-20T19:58:54+00:00\",\"dateModified\":\"2025-03-19T09:09:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/\"},\"wordCount\":955,\"publisher\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/docs.gravityforms.com\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/GFFeed_Form_Settings_Fields.png\",\"articleSection\":[\"Classes\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/\",\"url\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/\",\"name\":\"GFFeedAddOn - Gravity Forms Documentation\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/docs.gravityforms.com\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/GFFeed_Form_Settings_Fields.png\",\"datePublished\":\"2014-05-20T19:58:54+00:00\",\"dateModified\":\"2025-03-19T09:09:24+00:00\",\"description\":\"The GFFeedAddOn class provides basic functionality for developers when creating new feed-based add-ons for Gravity Forms. It includes all the features of the GFAddOn class with one exception; the Form Settings are replaced by the Feed Settings UI.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/#primaryimage\",\"url\":\"https:\\\/\\\/docs.gravityforms.com\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/GFFeed_Form_Settings_Fields.png\",\"contentUrl\":\"https:\\\/\\\/docs.gravityforms.com\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/GFFeed_Form_Settings_Fields.png\",\"width\":1438,\"height\":887},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/gffeedaddon\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/docs.gravityforms.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GFFeedAddOn\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#website\",\"url\":\"https:\\\/\\\/docs.gravityforms.com\\\/\",\"name\":\"Gravity Forms Documentation\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/docs.gravityforms.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#organization\",\"name\":\"Gravity Forms\",\"url\":\"https:\\\/\\\/docs.gravityforms.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/docs.gravityforms.com\\\/wp-content\\\/uploads\\\/2020\\\/01\\\/gravity-forms-2020-logo-stacked.png\",\"contentUrl\":\"https:\\\/\\\/docs.gravityforms.com\\\/wp-content\\\/uploads\\\/2020\\\/01\\\/gravity-forms-2020-logo-stacked.png\",\"width\":392,\"height\":515,\"caption\":\"Gravity Forms\"},\"image\":{\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/gravityforms\",\"http:\\\/\\\/@gravityforms.com\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/docs.gravityforms.com\\\/#\\\/schema\\\/person\\\/8a88745ec2ee5bc1bb24eea8634bf376\",\"name\":\"Justin Pakes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/791cb5bec00c6dd4bec2e80cf4df9638297207d8f77890c96b6b483be434ecea?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/791cb5bec00c6dd4bec2e80cf4df9638297207d8f77890c96b6b483be434ecea?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/791cb5bec00c6dd4bec2e80cf4df9638297207d8f77890c96b6b483be434ecea?s=96&d=mm&r=g\",\"caption\":\"Justin Pakes\"},\"url\":\"https:\\\/\\\/docs.gravityforms.com\\\/author\\\/pakes\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GFFeedAddOn - Gravity Forms Documentation","description":"The GFFeedAddOn class provides basic functionality for developers when creating new feed-based add-ons for Gravity Forms. It includes all the features of the GFAddOn class with one exception; the Form Settings are replaced by the Feed Settings UI.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/docs.gravityforms.com\/gffeedaddon\/","og_locale":"en_US","og_type":"article","og_title":"GFFeedAddOn","og_description":"The GFFeedAddOn class provides basic functionality for developers when creating new feed-based add-ons for Gravity Forms. It includes all the features of the GFAddOn class with one exception; the Form Settings are replaced by the Feed Settings UI.","og_url":"https:\/\/docs.gravityforms.com\/gffeedaddon\/","og_site_name":"Gravity Forms Documentation","article_published_time":"2014-05-20T19:58:54+00:00","article_modified_time":"2025-03-19T09:09:24+00:00","og_image":[{"url":"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Form_Settings_Fields.png","type":"","width":"","height":""}],"author":"Justin Pakes","twitter_card":"summary_large_image","twitter_creator":"@gravityforms","twitter_site":"@gravityforms","twitter_misc":{"Written by":"Justin Pakes","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/#article","isPartOf":{"@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/"},"author":{"name":"Justin Pakes","@id":"https:\/\/docs.gravityforms.com\/#\/schema\/person\/8a88745ec2ee5bc1bb24eea8634bf376"},"headline":"GFFeedAddOn","datePublished":"2014-05-20T19:58:54+00:00","dateModified":"2025-03-19T09:09:24+00:00","mainEntityOfPage":{"@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/"},"wordCount":955,"publisher":{"@id":"https:\/\/docs.gravityforms.com\/#organization"},"image":{"@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/#primaryimage"},"thumbnailUrl":"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Form_Settings_Fields.png","articleSection":["Classes"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/","url":"https:\/\/docs.gravityforms.com\/gffeedaddon\/","name":"GFFeedAddOn - Gravity Forms Documentation","isPartOf":{"@id":"https:\/\/docs.gravityforms.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/#primaryimage"},"image":{"@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/#primaryimage"},"thumbnailUrl":"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Form_Settings_Fields.png","datePublished":"2014-05-20T19:58:54+00:00","dateModified":"2025-03-19T09:09:24+00:00","description":"The GFFeedAddOn class provides basic functionality for developers when creating new feed-based add-ons for Gravity Forms. It includes all the features of the GFAddOn class with one exception; the Form Settings are replaced by the Feed Settings UI.","breadcrumb":{"@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/docs.gravityforms.com\/gffeedaddon\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/#primaryimage","url":"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Form_Settings_Fields.png","contentUrl":"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2014\/05\/GFFeed_Form_Settings_Fields.png","width":1438,"height":887},{"@type":"BreadcrumbList","@id":"https:\/\/docs.gravityforms.com\/gffeedaddon\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/docs.gravityforms.com\/"},{"@type":"ListItem","position":2,"name":"GFFeedAddOn"}]},{"@type":"WebSite","@id":"https:\/\/docs.gravityforms.com\/#website","url":"https:\/\/docs.gravityforms.com\/","name":"Gravity Forms Documentation","description":"","publisher":{"@id":"https:\/\/docs.gravityforms.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/docs.gravityforms.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/docs.gravityforms.com\/#organization","name":"Gravity Forms","url":"https:\/\/docs.gravityforms.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/docs.gravityforms.com\/#\/schema\/logo\/image\/","url":"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2020\/01\/gravity-forms-2020-logo-stacked.png","contentUrl":"https:\/\/docs.gravityforms.com\/wp-content\/uploads\/2020\/01\/gravity-forms-2020-logo-stacked.png","width":392,"height":515,"caption":"Gravity Forms"},"image":{"@id":"https:\/\/docs.gravityforms.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/gravityforms","http:\/\/@gravityforms.com"]},{"@type":"Person","@id":"https:\/\/docs.gravityforms.com\/#\/schema\/person\/8a88745ec2ee5bc1bb24eea8634bf376","name":"Justin Pakes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/791cb5bec00c6dd4bec2e80cf4df9638297207d8f77890c96b6b483be434ecea?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/791cb5bec00c6dd4bec2e80cf4df9638297207d8f77890c96b6b483be434ecea?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/791cb5bec00c6dd4bec2e80cf4df9638297207d8f77890c96b6b483be434ecea?s=96&d=mm&r=g","caption":"Justin Pakes"},"url":"https:\/\/docs.gravityforms.com\/author\/pakes\/"}]}},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pdGaEa-1G9","_links":{"self":[{"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/posts\/6457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/comments?post=6457"}],"version-history":[{"count":10,"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/posts\/6457\/revisions"}],"predecessor-version":[{"id":42953,"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/posts\/6457\/revisions\/42953"}],"wp:attachment":[{"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/media?parent=6457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/categories?post=6457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.gravityforms.com\/wp-json\/wp\/v2\/tags?post=6457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}