Custom B2B functionality

An automated new pending custom post type from user filled form

This project was done for EnergyComIL, to build a companies database. 

When a user fills the form to join the database – a new post is created automatically with the details entered in via the joining form. The post is created with a “pending approval” status. The details includes custom fields, the post thumbnail image and the post category.

After manual approval (as asked for by the client), the company is added to the database.

The database is searchable and filtered with Ajax.

This post is a custom post type, with custom taxonomies (non-hierarchal).

Here is some of the code i’ve written to create this:

				
					
//Handle the form after it is sent with  Elementor API webhook
function send_custom_webhook( $record, $handler ) {
    
// Check that this is the right form on the site
	if ( 'b2bform' !== $form_name ) {
		return;
	}
$raw_fields = $record->get( 'fields' );
	$fields = [];
	foreach ( $raw_fields as $id => $field ) {
		$fields[ $id ] = $field['value'];
	}

	// Create post object
	$my_post = array(
	  'post_author'   => 1,
	  'post_content'  => $fields['tech_description'],
	  'post_type'   => 'company',
	  'post_title'    => $fields['company_name'],
	  'tax_input' =>  array('company_category' => $fields['company_category']),
	  'post_status'   => 'pending',

	);
	
	//create the post
	$postID = wp_insert_post( $my_post ); 
	
//create post thumbnail 
	$image_url        = $fields['logo']; // Define the image URL here
	$image_name       = str_replace('https://energycom.org.il/wp-content/uploads/elementor/forms/', '', $fields['logo']);
	$upload_dir       = wp_upload_dir(); // Set upload folder
	$image_data       = file_get_contents($image_url); // Get image data
	$unique_file_name = wp_unique_filename( $upload_dir['path'], $image_name ); 

// Generate unique name
	$filename         = basename( $unique_file_name ); // Create image file name

	// Check folder permission and define file location
	if( wp_mkdir_p( $upload_dir['path'] ) ) {
	    $file = $upload_dir['path'] . '/' . $filename;
	} else {
	    $file = $upload_dir['basedir'] . '/' . $filename;
	}

	// Create the image  file on the server
	file_put_contents( $file, $image_data );

	// Check image file type
	$wp_filetype = wp_check_filetype( $filename, null );

	// Set attachment data
	$attachment = array(
	    'post_mime_type' => $wp_filetype['type'],
	    'post_title'     => sanitize_file_name( $filename ),
	    'post_content'   => '',
	    'post_status'    => 'inherit'
	);

	// Create the attachment
	$attach_id = wp_insert_attachment( $attachment, $file, $postID );

	// Include image.php
	require_once(ABSPATH . 'wp-admin/includes/image.php');

	// Define attachment metadata
	$attach_data = wp_generate_attachment_metadata( $attach_id, $file );

	// Assign metadata to attachment
	wp_update_attachment_metadata( $attach_id, $attach_data );

	// And finally assign featured image to post
	set_post_thumbnail( $postID, $attach_id );

}
add_action( 'elementor_pro/forms/new_record', 'send_custom_webhook' , 10, 2);
				
			

Some More Cool Projects