Agenten automatisch anlegen

Standardmäßig ist beim Import mit OpenImmo2WP nur die automatisierte Zuordnung vorhandener, aber nicht die Erstellung neuer Agenten möglich.

Diese Funktion kann aber über den Action-Hook immonex_oi2wp_property_imported ergänzt werden.

Folgend ein Beispiel für das Houzez-Theme (anpassbar an andere Themes):

/**
 * [immonex OpenImmo2WP] Prüfen, ob der Name des zugeordneten Objekt-Ansprechpartners
 * mit den übermittelten Angaben übereinstimmt - falls nicht: Neuen Ansprechpartner
 * anlegen und mit Objekt und Agentur verknüpfen (Houzez-Theme).
 */
function mysite_maybe_add_property_agent( $property_id, $immobilie ) {
  $xml_contact_name = (string) $immobilie->kontaktperson->vorname . ' ' .
    $immobilie->kontaktperson->name;
  $current_agent_id = get_post_meta( $property_id, 'fave_agents', true );
  if ( $current_agent_id ) {
    $current_agent = get_post( $current_agent_id );
    if ( $current_agent ) {
      if ( $current_agent->post_title === $xml_contact_name ) {
        // Passender Ansprechpartner bereits verknüpft: hier abbrechen.
        return;
      }
    }
  }
  /**
   * Kein passender Ansprechpartner verknüpft: Neuen Agenten anlegen
   * und aktueller Agentur zuordnen.
   */
  $xml_email = (string) $immobilie->kontaktperson->email_direkt;
  if ( ! $xml_email ) {
    $xml_email = (string) $immobilie->kontaktperson->email_zentrale;
  }
  $xml_phone = (string) $immobilie->kontaktperson->tel_durchw;
  if ( ! $xml_phone ) {
    (string) $immobilie->kontaktperson->tel_zentrale;
  }
  $xml_phone_mobile = (string) $immobilie->kontaktperson->tel_handy;
  $xml_company      = (string) $immobilie->kontaktperson->firma;
  $agent = array(
    'post_type'   => 'houzez_agent',
    'post_status' => 'publish',
    'post_title'  => $xml_contact_name
  );
  $agent_id = wp_insert_post( $agent );
  if ( is_wp_error( $agent_id ) ) {
    // Fehler beim Anlegen des neuen Ansprechpartners: hier aussteigen!
    return;
  } else {
    add_post_meta( $agent_id, 'fave_agent_email', $xml_email );
    add_post_meta( $agent_id, 'fave_agent_office_num', $xml_phone );
    add_post_meta( $agent_id, 'fave_agent_company', $xml_company );
    if ( $xml_phone_mobile ) {
      add_post_meta( $agent_id, 'fave_agent_mobile', $xml_phone_mobile );
    }
    if ( $immobilie->kontaktperson->foto->daten->pfad ) {
      // Foto ergänzen.
      mysite_add_agent_photo(
        $agent_id,
        $immobilie->kontaktperson->foto,
        $xml_contact_name
      );
    }
  }
  $agency_id = false;
  $property  = get_post( $property_id );
  $author_id = $property && $property->post_author ? $property->post_author : false;
  if ( $author_id ) {
    // Agentur-ID des WP-Benutzers übernehmen, sofern vorhanden.
    $agency_id = get_user_meta( $author_id, 'fave_author_agency_id', true );
  }
  if ( ! $agency_id ) {
    // Agentur (WP) anhand angegebener Firma ermitteln.
    if ( ! empty( $xml_company ) ) {
      $agencies = get_posts( array(
        'post_type'   => 'houzez_agency',
        'post_title'  => $xml_company,
        'numberposts' => -1
      ) );
      if ( count( $agencies ) > 0 ) {
        $agency_id = $agencies[0]->ID;
      }
    }
  }
  if ( $agency_id ) {
    // Agentur-ID neuem Ansprechpartner und aktuellem Objekt zuordnen.
    update_post_meta( $agent_id, 'fave_agent_agencies', $agency_id );
    update_post_meta( $property_id, 'fave_property_agency', $agency_id );
  }
  // Neuen Ansprechpartner aktuellem Objekt zuordnen und entspr. Display-Option aktivieren.
  update_post_meta( $property_id, 'fave_agents', $agent_id );
  update_post_meta( $property_id, 'fave_agent_display_option', 'agent_info' );
}
add_action( 'immonex_oi2wp_property_imported', 'mysite_maybe_add_property_agent', 90, 2 );
function mysite_add_agent_photo( $agent_post_id, $foto, $name ) {
  global $immonex_openimmo2wp;
  $dir = $immonex_openimmo2wp->current_import_status['dir'];
  if ( is_object( $foto ) ) {
    $path_or_url = (string) $foto->daten->pfad;
    $is_remote   = 'REMOTE' === strtoupper( (string) $foto['location'] )
      || false !== strpos( $path_or_url, '://' );
  } else {
    $path_or_url = $foto;
    $is_remote   = false !== strpos( $path_or_url, '://' );
  }
  if ( ! $is_remote ) {
    $path_or_url = "{$dir}/{$path_or_url}";
    if ( ! file_exists( $path_or_url ) ) {
      // Lokale Bilddatei nicht verfügbar.
      return;
    }
  }
  if ( $is_remote ) {
    $temp = download_url( $path_or_url );
    if ( is_wp_error( $temp ) ) {
      return;
    }
    $file_data = array(
      'name'     => basename( $path_or_url ),
      'tmp_name' => $temp,
    );
  } else {
    $temp = tmpfile();
    fwrite( $temp, file_get_contents( $path_or_url ) );
    $file_data = array(
      'name'     => basename( $path_or_url ),
      'tmp_name' => stream_get_meta_data( $temp )['uri'],
    );
  }
  $photo_id = media_handle_sideload( $file_data, $agent_post_id, $name );
  if ( $photo_id && ! is_wp_error( $photo_id ) ) {
    set_post_thumbnail( $agent_post_id, $photo_id );
  }
  if ( ! empty( $temp ) && is_string( $temp ) && file_exists( $temp ) ) {
    @unlink( $temp );
  }
}