Inventory_Presser_Plugin::add_hooks()
This is the driver function of the entire plugin. Includes dependencies and adds all hooks.
Return Return
(void)
Source Source
File: inventory-presser.php
public function add_hooks() {
// Only do these things once.
if ( has_filter( 'invp_prefix_meta_key', array( 'INVP', 'translate_custom_field_names' ) ) ) {
return;
}
// include all this plugin's classes that live in external files.
$this->include_dependencies();
// Ensure addon updaters are initialized in multisite.
if ( class_exists( 'Inventory_Presser_Addon' ) ) {
Inventory_Presser_Addon::ensure_multisite_updaters();
}
// Prefix and unprefix meta keys with "inventory_presser_".
add_filter( 'invp_prefix_meta_key', array( 'INVP', 'translate_custom_field_names' ) );
add_filter( 'invp_unprefix_meta_key', array( 'INVP', 'untranslate_custom_field_names' ) );
// Provide a path to .mo files in /languages.
add_action( 'init', array( $this, 'load_textdomain' ) );
/**
* Create our post type and taxonomies
*/
// create a custom post type for the vehicles.
add_action( 'init', array( $this, 'create_post_type' ) );
// Give all administrator users full capabilities over the custom post type.
add_action( 'admin_init', array( $this, 'add_admin_capabilities' ) );
// register all postmeta fields the CPT uses.
add_action( 'init', array( $this, 'register_meta_fields' ), 20 );
// Filter the attachment post type to make sure `parent` is exposed in the REST API.
add_filter( 'register_post_type_args', array( $this, 'edit_attachment_post_type' ), 10, 2 );
/**
* Make sure our own classes exist before creating instances in case
* a page load happens during a plugin update when some of these
* files might actually not exist.
*/
// Create custom taxonomies.
if ( class_exists( 'Inventory_Presser_Taxonomies' ) ) {
$taxonomies = new Inventory_Presser_Taxonomies();
$taxonomies->add_hooks();
}
// Modify edit-tags.php for our location taxonomy to manage term meta.
if ( class_exists( 'Inventory_Presser_Admin_Location_Meta' ) ) {
$location_meta = new Inventory_Presser_Admin_Location_Meta();
$location_meta->add_hooks();
}
/**
* Some custom rewrite rules are created and destroyed
*/
// Add custom rewrite rules.
add_action( 'generate_rewrite_rules', array( $this, 'add_pretty_search_urls' ) );
/**
* Activation and deactivation hooks ensure that the rewrite rules are
* flushed to add and remove our custom rewrite rules
*/
// Flush rewrite rules when the plugin is activated.
register_activation_hook( INVP_PLUGIN_FILE_PATH, array( __CLASS__, 'flush_rewrite' ) );
// Set default settings values.
register_activation_hook( INVP_PLUGIN_FILE_PATH, array( __CLASS__, 'set_default_settings' ) );
// Delete an option during deactivation.
register_deactivation_hook( INVP_PLUGIN_FILE_PATH, array( __CLASS__, 'delete_rewrite_rules_option' ) );
// Register some widgets included with this plugin.
add_action( 'widgets_init', array( $this, 'register_widgets' ) );
/**
* Deliver our promise to order posts, change the ORDER BY clause of
* the query that's fetching post objects.
*/
if ( ! is_admin() ) {
add_action( 'pre_get_posts', array( $this, 'add_orderby_to_query' ) );
}
// Register scripts and styles.
add_action( 'wp_enqueue_scripts', array( __CLASS__, 'include_scripts_and_styles' ) );
add_action( 'admin_enqueue_scripts', array( __CLASS__, 'include_scripts_and_styles' ) );
add_action( 'enqueue_block_assets', array( __CLASS__, 'include_scripts_and_styles' ) );
// Allow custom fields to be searched.
if ( class_exists( 'Add_Custom_Fields_To_Search' ) ) {
$add_custom_fields_to_search = new Add_Custom_Fields_To_Search();
$add_custom_fields_to_search->add_hooks();
}
// Redirect URLs by VINs to proper vehicle permalinks.
if ( class_exists( 'Vehicle_URLs_By_VIN' ) ) {
$allow_urls_by_vin = new Vehicle_URLs_By_VIN();
$allow_urls_by_vin->add_hooks();
}
// Add buttons near vehicles for Carfax reports or NextGear inspections.
if ( class_exists( 'Inventory_Presser_Badges' ) ) {
$badges = new Inventory_Presser_Badges();
$badges->add_hooks();
}
// Redirect 404 vehicles to make archives.
if ( class_exists( 'Redirect_404_Vehicles' ) ) {
$redirect_404_vehicles = new Redirect_404_Vehicles();
$redirect_404_vehicles->add_hooks();
}
// Modify the URL of an "Email a Friend" menu item on the "Vehicle Details Buttons" menu.
if ( class_exists( 'Inventory_Presser_Email_A_Friend' ) ) {
$email_a_friend = new Inventory_Presser_Email_A_Friend();
$email_a_friend->add_hooks();
}
// Make it possible for a menu item to print the page.
if ( class_exists( 'Inventory_Presser_Menu_Item_Print' ) ) {
$print_button = new Inventory_Presser_Menu_Item_Print();
$print_button->add_hooks();
}
/**
* When vehicle posts are inserted, make sure they create a relationship
* with the "For Sale" term in the Availabilities taxonomy. Some queries
* that honor the "Include Sold Vehicles" setting in this plugin will
* exclude them without a relationship to a term in that taxonomy.
*/
if ( class_exists( 'INVP' ) ) {
// Everything For Sale because by default we hide other Availabilities like Sold.
add_action( 'save_post_' . INVP::POST_TYPE, array( $this, 'mark_vehicles_for_sale_during_insertion' ), 10, 3 );
// Photos are sometimes attached to posts in simultaneous requests.
add_action( 'save_post_' . INVP::POST_TYPE, array( 'Inventory_Presser_Photo_Numberer', 'renumber_photos' ), 10, 1 );
// Save custom post meta and term relationships when posts are saved.
add_action( 'save_post_' . INVP::POST_TYPE, array( $this, 'save_vehicle_post_meta' ), 10, 3 );
}
// Maybe skip the trash bin and permanently delete vehicles & photos.
add_action( 'trashed_post', array( $this, 'maybe_force_delete' ) );
// When vehicles are deleted, delete their attachments, too.
add_action( 'before_delete_post', array( 'INVP', 'delete_attachments' ), 10, 1 );
// Change messages in the dashboard when updating vehicles.
add_filter( 'post_updated_messages', array( $this, 'change_post_updated_messages' ) );
// Change links to our taxonomy terms to insert /inventory/.
add_filter( 'pre_term_link', array( $this, 'change_term_links' ), 10, 2 );
// Allow users to set the Inventory listing page as the home page.
if ( class_exists( 'Inventory_Presser_Allow_Inventory_As_Home_Page' ) ) {
$page = new Inventory_Presser_Allow_Inventory_As_Home_Page();
$page->add_hooks();
}
// Add all our shortcodes.
if ( class_exists( 'Inventory_Presser_Shortcode_Grid' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Grid();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Iframe' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Iframe();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Slider' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Slider();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Single_Vehicle' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Single_Vehicle();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Archive' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Archive();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Archive_Vehicle' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Archive_Vehicle();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Attribute_Table' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Attribute_Table();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Hours_Today' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Hours_Today();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Photo_Slider' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Photo_Slider();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Price' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Price();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Vin' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Vin();
$shortcodes->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Shortcode_Sort_By' ) ) {
$shortcodes = new Inventory_Presser_Shortcode_Sort_By();
$shortcodes->add_hooks();
}
/**
* When the active theme isn't prepared to display vehicles, insert
* our archive and single vehicle shortcodes.
*/
if ( class_exists( 'Inventory_Presser_Template_Provider' ) ) {
$template_provider = new Inventory_Presser_Template_Provider();
$template_provider->add_hooks();
}
// Add blocks.
if ( class_exists( 'Inventory_Presser_Blocks' ) ) {
$blocks = new Inventory_Presser_Blocks();
$blocks->add_hooks();
}
/**
* Add photo number meta values to vehicle photos uploaded in the
* dashboard
*/
if ( class_exists( 'Inventory_Presser_Photo_Numberer' ) ) {
$photo_numberer = new Inventory_Presser_Photo_Numberer();
$photo_numberer->add_hooks();
}
// Allow additional vehicle archives to be created.
if ( class_exists( 'Inventory_Presser_Additional_Listings_Pages' ) ) {
$additional_archives = new Inventory_Presser_Additional_Listings_Pages();
$additional_archives->add_hooks();
}
// Add menus to the admin bar.
if ( class_exists( 'Inventory_Presser_Admin_Bar' ) ) {
$bar = new Inventory_Presser_Admin_Bar();
$bar->add_hooks();
}
if ( is_admin() ) {
// Initialize our Settings page in the Dashboard.
if ( class_exists( 'Inventory_Presser_Admin_Options' ) ) {
$options = new Inventory_Presser_Admin_Options();
$options->add_hooks();
}
// Add columns to the vehicle posts list.
if ( class_exists( 'Inventory_Presser_Admin_Posts_List' ) ) {
$posts_list = new Inventory_Presser_Admin_Posts_List();
$posts_list->add_hooks();
}
// Add a sidebar to the editor when editing vehicles.
if ( class_exists( 'Inventory_Presser_Admin_Editor_Sidebar' ) ) {
$sidebar = new Inventory_Presser_Admin_Editor_Sidebar();
$sidebar->add_hooks();
}
// Allow more than 30 meta keys in the Custom Fields editor panel.
add_filter( 'postmeta_form_limit', array( $this, 'custom_fields_key_limit' ) );
}
if ( class_exists( 'Inventory_Presser_Taxonomy_Overlapper' ) ) {
$overlapper = new Inventory_Presser_Taxonomy_Overlapper();
$overlapper->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Schema_Org_Generator' ) ) {
$schema_generator = new Inventory_Presser_Schema_Org_Generator();
$schema_generator->add_hooks();
}
// Adds the "View Details" button to each vehicle in archive loops.
add_action( 'invp_archive_buttons', array( $this, 'add_view_details_button' ), 20 );
// Embeds a contact form on vehicle singles if one is chosen at Vehicles → Options.
add_action( 'invp_single_sections', array( $this, 'single_sections_add_form' ) );
add_action( 'plugins_loaded', array( $this, 'loaded' ) );
if ( class_exists( 'Inventory_Presser_REST' ) ) {
$rest = new Inventory_Presser_REST();
$rest->add_hooks();
}
if ( class_exists( 'Inventory_Presser_Admin_Photo_Arranger' ) ) {
$photo_arranger = new Inventory_Presser_Admin_Photo_Arranger();
$photo_arranger->add_hooks();
}
// Change archive page titles.
add_filter( 'document_title_parts', array( $this, 'change_archive_title_tags' ) );
// Add a link to the Settings page on the plugin management page.
add_filter( 'plugin_action_links_' . INVP_PLUGIN_BASE, array( $this, 'insert_settings_link' ), 2, 2 );
// Add tests to the Site Health Status page.
if ( class_exists( 'Inventory_Presser_Site_Health' ) ) {
$health = new Inventory_Presser_Site_Health();
$health->add_hooks();
}
add_action( 'plugins_loaded', array( $this, 'load_integrations' ) );
}
Expand full source codeCollapse full source codeView on Github