Shortcode zur Ausgabe einzelner Detailangaben

/**
 * immonex Kickstart Shortcodes registrieren
 */
function mysite_register_property_shortcodes() {
  add_shortcode( 'mysite-property-detail', 'mysite_shortcode_property_detail' );
  add_shortcode( 'mysite-property-gallery', 'mysite_shortcode_property_gallery' );
}
add_action( 'after_setup_theme', 'mysite_register_property_shortcodes' );
/**
 * Shortcode zum Einbinden einzelner Detailangaben
 * Beispiel: [mysite-property-detail name="flaechen.wohnflaeche"]
 */
function mysite_shortcode_property_detail( $atts ) {
  if ( empty( $atts['name'] ) ) {
    return '';
  }
 
  $name        = sanitize_key( $atts['name'] );
  $property_id = apply_filters( 'inx_current_property_post_id', false );
  $args        = [
    'name'       => $name,
    'value_only' => true,
  ];
 
  if ( ! empty( $atts['group'] ) ) {
    $args['group'] = sanitize_key( $atts['group'] );
  }
 
  // OpenImmo-Angabe anhand des Namens in der Mapping-Tabelle abrufen
  $value = apply_filters(
    'inx_get_property_detail_item',
    false,
    $property_id,
    $args
  );
 
  if ( ! $value ) {
    // alternativ: Wert eines Kickstart-spezifischen Custom Fields abrufen
    $value = get_post_meta( $property_id, "_inx_{$name}", true );
  }
 
  if ( ! $value ) {
    // Alternativ: Wert eines allgemeinen Custom Fields abrufen.
    $value = get_post_meta( $property_id, $name, true );
 
    if ( $value && '_inx_' === substr( $value, 0, 5 ) ) {
      // Eigentlichen Wert aus ermitteltem Custom Field abrufen.
      $value = get_post_meta( $property_id, $value, true );
    }
  }
 
  if ( $value && ! empty( $atts['format'] ) ) {
    $format = explode( ',', $atts['format'] );
 
    foreach ( $format as $key ) {
      $key = trim( strtolower( $key ) );
 
      switch ( $key ) {
        case 'number' :
          if ( is_numeric( $value ) ) {
            $value = number_format( $value, 2, ',', '.' );
          }
          break;
        case 'currency' :
          if ( is_numeric( $value ) ) {
            $value = number_format( $value, 2, ',', '.' ) . ' €';
          }
          break;
        // bei Bedarf weitere Formatierungsmöglichkeiten hier ergänzen...
      }
    }
  }
 
  return $value;
}
/**
 * Shortcode zum Einbinden einer Gallerie des aktuellen Posts
 * Beispiel: [mysite_shortcode_property_gallery]
 */
function mysite_shortcode_property_gallery( $atts ) {
  $property_id = apply_filters( 'inx_current_property_post_id', false );
 
  $atts_string = '';
  if ( ! empty( $atts ) ) {
    foreach ( $atts as $key => $value ) {
      $atts_string .= wp_sprintf( '%s="%s" ', $key, $value );
    }
 
    $atts_string = trim( $atts_string );
  }
 
  $shortcode = wp_sprintf(
    '',
    $property_id,
    $atts_string ? ' ' . $atts_string : ''
  );
 
  return do_shortcode( $shortcode );
}