Ansprachpartner (Agenten) / Benutzer beim Import automatisch anlegen

Standardmäßig werden beim Import nur vorhandene Benutzer und/oder Ansprechpartner (Agenten) anhand der E-Mail-Adressen bzw. Namen automatisch zugeordnet.

Das automatische Anlegen von Ansprechpartnern kann aber mit einem Action-Hook realisiert werden:

/**
 * Objekt-Ansprechpartner (Agent) automatisch anlegen und zuordnen, sofern noch nicht vorhanden.
 */
function mysite_save_agent( $post_id, $immobilie ) {
  global $immonex_openimmo2wp;
 
  $property_contact = mysite_get_agent_data( $immobilie );
 
  // Ansprechpartner anhand des Namens suchen.
  $args = array(
    'post_type' => 'estate_agent',
    'numberposts' => -1,
    'title' => $property_contact['name']
  );
 
  $agents = get_posts( $args );
 
  if ( 0 === count( $agents ) ) {
    // Kein Ansprechpartner mit dem betr. Namen gefunden:
    // Neuen Ansprechpartner anlegen...
    $post_data = array(
      'post_type' => 'estate_agent',
      'post_status' => 'publish',
      'post_title' => $property_contact['name']
    );
 
    $agent_id = wp_insert_post( $post_data );
 
    if ( is_wp_error( $agent_id ) ) {
      if ( isset( $immonex_openimmo2wp ) ) $immonex_openimmo2wp->log->add( wp_sprintf( 'Neuer Ansprechpartner konnte nicht angelegt werden, Fehler: %s', $agent_id->get_error_message() ), 'debug' );
    } else {
      add_post_meta( $agent_id, 'agent_email', $property_contact['email'], true );
      add_post_meta( $agent_id, 'agent_phone', $property_contact['phone'], true );
      add_post_meta( $agent_id, 'agent_mobile', $property_contact['mobile'], true );
      add_post_meta( $agent_id, 'agent_website', $property_contact['url'], true );
 
      // ...und dem aktuellen Objekt zuweisen
      update_post_meta( $post_id, 'property_agent', $agent_id );
 
      if ( isset( $immonex_openimmo2wp ) ) $immonex_openimmo2wp->log->add( wp_sprintf( 'Neuer Ansprechpartner angelegt: %s (ID: %s)', $property_contact['name'], $agent_id ), 'debug' );
    }
  }
}
add_action( 'immonex_oi2wp_property_imported', 'mysite_save_agent', 90, 2 );
/**
 * Agent-Daten ermitteln.
 */
function mysite_get_agent_data( $immobilie ) {
  $name_contact_temp = '';
  if ( isset( $immobilie->kontaktperson->titel ) )   $name_contact_temp .= (string) $immobilie->kontaktperson->titel . ' ';
  if ( isset( $immobilie->kontaktperson->vorname ) ) $name_contact_temp .= (string) $immobilie->kontaktperson->vorname . ' ';
  if ( isset( $immobilie->kontaktperson->name ) )    $name_contact_temp .= (string) $immobilie->kontaktperson->name;
  $name_contact = trim( $name_contact_temp );
 
  $email_company = isset( $immobilie->kontaktperson->email_zentrale ) ? strtolower( $immobilie->kontaktperson->email_zentrale ) : '';
 
  if ( isset( $immobilie->kontaktperson->email_direkt ) )
    $email_contact = strtolower( $immobilie->kontaktperson->email_direkt );
  elseif ( $email_company )
    $email_contact = $email_company;
  else
    $email_contact = '';
 
  if ( isset( $immobilie->kontaktperson->tel_durchw ) )
    $phone_contact = strtolower( $immobilie->kontaktperson->tel_durchw );
  elseif ( isset( $immobilie->kontaktperson->tel_handy ) )
    $phone_contact = strtolower( $immobilie->kontaktperson->tel_handy );
  elseif ( isset( $immobilie->kontaktperson->tel_zentrale ) )
    $phone_contact = strtolower( $immobilie->kontaktperson->tel_zentrale );
  else
    $phone_contact = '';
 
  $mobile = isset( $immobilie->kontaktperson->tel_handy ) ? $immobilie->kontaktperson->tel_handy : '';
 
  if ( isset( $immobilie->kontaktperson->url ) ) {
    $url = str_replace( 'http://', '', $immobilie->kontaktperson->url );
    $url = trim( str_replace( 'https://', '', $url ) );
  } else {
    $url = '';
  }
 
  return array(
    'name' => $name_contact,
    'email' => $email_contact,
    'email_company' => $email_company,
    'phone' => $phone_contact,
    'mobile' => $mobile,
    'url' => $url
  );
}

Für Theme WP Residence.

Natürlich ist hier noch viel Spielraum für individuelle Anpassungen. Anstatt des Namens könnte z. B. auch die Mailadresse des Ansprechpartners als Abfragekriterium verwendet werden. Es kann auch Fälle geben, bei denen mehreren Ansprechpartnern die gleiche Mailadresse zugewiesen ist, deswegen wurde dieses Merkmal im obigen Snippet nicht berücksichtigt.