phpwordpresssalesforcecustom-post-type

Add wordpress custom post type data to an external db


This function adds custom post 'event' data into a Salesforce db. I've tested the function outside of Wordpress and it works flawlessly. When I test it inside Wordpress by adding a new event, no error is generated and a the data is not inserted into the SF db. I've also tested this by printing out the $_POST and saw that the data is being collected. How can I get this display some errors so that I can trouble shoot this?

function add_campaign_to_SF( $post_id) {
    global $SF_USERNAME;
    global $SF_PASSWORD;

    if ('event' == $_POST['post-type']) {
        try {
              $mySforceConnection = new SforceEnterpriseClient();
              $mySoapClient = $mySforceConnection->createConnection(CD_PLUGIN_PATH . 'Toolkit/soapclient/enterprise.wsdl.xml');
              $mySFlogin = $mySforceConnection->login($SF_USERNAME, $SF_PASSWORD);

              $sObject = new stdclass();
              $sObject->Name = get_the_title( $post_id );
              $sObject->StartDate = date("Y-m-d", strtotime($_POST["events_startdate"]));
              $sObject->EndDate = date("Y-m-d", strtotime($_POST["events_enddate"]));
              $sObject->IsActive = '1';

              $createResponse = $mySforceConnection->create(array($sObject), 'Campaign');

              $ids = array();
                    foreach ($createResponse as $createResult) {
                        error_log($createResult);
                        array_push($ids, $createResult->id);
                    }

                } catch (Exception $e) {
                        error_log($mySforceConnection->getLastRequest());
                        error_log($e->faultstring);
                        die;
                    }
    }
 }

 add_action( 'save_post', 'add_campaign_to_SF');

Solution

  • I would use get_post_type() to check for "event" posts. Use error_log() to write to the PHP error log for additional debugging - check the status of your Salesforce login, etc.

    Keep in mind that save_post will run every time a post is saved - created or updated - so you might want to do some additional checking (like setting a meta value) before creating a new Campaign in Salesforce, otherwise you will end up with duplicates.

    function add_campaign_to_SF( $post_id ) {
        $debug = true;
        if ($debug) error_log("Running save_post function add_campaign_to_SF( $post_id )");
        if ( 'event' == get_post_type( $post_id ) ){
            if ($debug) error_log("The post type is 'event'");
            if ( false === get_post_meta( $post_id, 'sfdc_id', true ) ){
                if ($debug) error_log("There is no meta value for  'sfdc_id'");
                // add to Salesforce, get back the ID of the new Campaign object
                if ($debug) error_log("The new object ID is $sfdc_id");
                update_post_meta( $post_id, 'sfdc_id', $sfdc_id );
            }
        }
    }
    add_action( 'save_post', 'add_campaign_to_SF' );