flush_rules(); } ?>

Rather than creating hundreds of pages/posts in Wordpress, simply map a URL pattern to an Airpress table using Airpress Virtual Posts. Each requests that matches the pattern will attempt to retrieve the cooresponding Airtable record and serve it using the specified Wordpress page as a 'template'. If an Airtable record is not found, a 404 is served. If a Wordpress page/post exists for the requested URL, then it will be used instead of the 'template' specified.

"New Configuration"); $configs[] = $config; $active_tab = count($configs)-1; set_airpress_config("airpress_vp",$active_tab,$config); } else { $active_tab = $requested_tab; } $_GET['tab'] = $active_tab; foreach($configs as $key => $config){ airpress_admin_vp_tab($key,$config); } } add_action( 'admin_init', 'airpress_admin_vp_tab_controller'); /***********************************************/ # TAB: DEFAULT /***********************************************/ function airpress_admin_vp_tab($key,$config) { $option_name = "airpress_vp".$key; //$options = get_option( $option_name ); $defaults = array( "name" => "New Configuration", "connection" => null, "pattern" => "/something-unique/(.*)", "formula" => "{Your Airtable Field} = '$1'", "table" => "Your Airtable Table", "field" => "Your Airtable Field", "template" => null, ); $options = array_merge($defaults,$config); ################################ ################################ $section_title = "Virtual Posts"; $section_name = "airpress_vp".$key; add_settings_section( $section_name, __( $section_title, 'airpress' ), "airpress_admin_vp_render_section", $option_name ); ################################ $field_name = "name"; $field_title = "Configuration Name"; add_settings_field( $field_name, __( $field_title, 'airpress' ), 'airpress_admin_vp_render_element_text', $option_name, $section_name, array($options,$option_name,$field_name) ); ################################ $field_name = "connection"; $field_title = "Select Connection"; add_settings_field( $field_name, __( $field_title, 'airpress' ), 'airpress_admin_vp_render_element_select_connections', $option_name, $section_name, array($options,$option_name,$field_name) ); ################################ ################################ $section_title = ""; $section_name = "airpress_vp".$key; $option_name = 'airpress_vp'.$key; add_settings_section( $section_name, __( $section_title, 'airpress' ), "airpress_admin_vp_render_section", $option_name ); ################################ $field_name = "pattern"; $field_title = "URL Pattern to Match"; add_settings_field( $field_name, __( $field_title, 'airpress' ), 'airpress_admin_vp_render_element_text', $option_name, $section_name, array($options,$option_name,$field_name) ); ################################ $field_name = "formula"; $field_title = "Filter by formula"; add_settings_field( $field_name, __( $field_title, 'airpress' ), 'airpress_admin_vp_render_element_text', $option_name, $section_name, array($options,$option_name,$field_name) ); ################################ $field_name = "table"; $field_title = "Airtable Table Name"; add_settings_field( $field_name, __( $field_title, 'airpress' ), 'airpress_admin_vp_render_element_text', $option_name, $section_name, array($options,$option_name,$field_name) ); ############################### $field_name = "field"; $field_title = "Airtable Field to be used as post_name"; add_settings_field( $field_name, __( $field_title, 'airpress' ), 'airpress_admin_vp_render_element_text', $option_name, $section_name, array($options,$option_name,$field_name) ); ################################ $field_name = "template"; $field_title = "Map to this page"; add_settings_field( $field_name, __( $field_title, 'airpress' ), 'airpress_admin_vp_render_element_select__page', $option_name, $section_name, array($options,$option_name,$field_name) ); ############################### $field_name = "delete"; $field_title = "Delete Configuration?"; add_settings_field( $field_name, __( $field_title, 'airpress' ), 'airpress_admin_vp_render_element_delete', $option_name, $section_name, array($options,$option_name,$field_name) ); register_setting($option_name,$option_name,"airpress_vp_validation"); } function airpress_vp_validation($config){ // global $wp_rewrite; // airpress_vp_add_rule($config); // $wp_rewrite->flush_rules(); return $config; } function airpress_vp_add_rule($config){ return add_rewrite_rule($config["pattern"], 'index.php?page_id='.$config["template"] , 'top'); } function airpress_vp_add_rules(){ global $wp_rewrite; $configs = get_airpress_configs("airpress_vp"); foreach($configs as $config){ if (isset($config["pattern"]) && !empty($config["pattern"])){ airpress_vp_add_rule($config); } } } function airpress_admin_vp_render_section__general() { echo '

' . __( 'Provides examples of the five basic element types.', 'sandbox' ) . '

'; } function airpress_admin_vp_render_section() { echo '

' . __( '', 'airpress' ) . '

'; } function airpress_admin_vp_render_element_text($args) { $options = $args[0]; $option_name = $args[1]; $field_name = $args[2]; echo ''; } function airpress_admin_vp_render_element_toggle($args) { $options = $args[0]; $option_name = $args[1]; $field_name = $args[2]; $checked = checked( 1, isset( $options[$field_name] ) ? $options[$field_name] : 0, false ); echo ''; echo ''; } function airpress_admin_vp_render_element_select__posttypes($args) { $options = $args[0]; $option_name = $args[1]; $field_name = $args[2]; $post_types = airpress_get_posttypes_available(); echo ''; } function airpress_admin_vp_render_element_select_connections($args) { $options = $args[0]; $option_name = $args[1]; $field_name = $args[2]; $connections = get_airpress_configs("airpress_cx"); echo ''; } function airpress_admin_vp_render_element_select__page($args) { $options = $args[0]; $option_name = $args[1]; $field_name = $args[2]; $pages = get_pages(); echo ''; } function airpress_admin_vp_render_element_delete($args) { $options = $args[0]; $option_name = $args[1]; $field_name = $args[2]; $tab = (int)$_GET["tab"]; echo "Yes, delete this configuration"; } ?>