feat: kein interner-name-feld mehr - ID automatisch aus anbietername
- Dienst-Zeile zeigt/erfordert nur noch den Anbietername. - Interne ID wird beim Speichern aus dem Namen abgeleitet (sanitize_title), bestehende IDs bleiben via Hidden-Field stabil; Eindeutigkeit erzwungen. - Shortcode-Hilfe erklaert: ID = Anbietername in Kleinbuchstaben mit Bindestrichen. - EN-Uebersetzung (120) aktualisiert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -104,17 +104,36 @@ class CB_Settings {
|
||||
: [];
|
||||
|
||||
$services = [];
|
||||
$used_ids = [];
|
||||
foreach ( $raw_services as $item ) {
|
||||
if ( ! is_array( $item ) ) {
|
||||
continue;
|
||||
}
|
||||
$name = sanitize_text_field( $item['name'] ?? '' );
|
||||
if ( $name === '' ) {
|
||||
continue; // a service needs at least a provider name
|
||||
}
|
||||
|
||||
// Keep the existing id stable (hidden field); derive from the name
|
||||
// for new services. Ensure uniqueness.
|
||||
$id = sanitize_key( $item['id'] ?? '' );
|
||||
if ( $id === '' ) {
|
||||
continue;
|
||||
$id = sanitize_title( $name );
|
||||
}
|
||||
if ( $id === '' ) {
|
||||
$id = 'dienst';
|
||||
}
|
||||
$base_id = $id;
|
||||
$n = 2;
|
||||
while ( in_array( $id, $used_ids, true ) ) {
|
||||
$id = $base_id . '-' . $n;
|
||||
$n++;
|
||||
}
|
||||
$used_ids[] = $id;
|
||||
|
||||
$services[] = [
|
||||
'id' => $id,
|
||||
'name' => sanitize_text_field( $item['name'] ?? '' ),
|
||||
'name' => $name,
|
||||
'enabled' => ! empty( $item['enabled'] ),
|
||||
'match_pattern' => sanitize_text_field( $item['match_pattern'] ?? '' ),
|
||||
'recipient' => sanitize_text_field( $item['recipient'] ?? '' ),
|
||||
@@ -530,8 +549,8 @@ class CB_Settings {
|
||||
$name = $svc['name'] ?? '';
|
||||
$id = $svc['id'] ?? '';
|
||||
$enabled = $svc['enabled'] ?? true; // default ON (new + legacy services)
|
||||
// Header label: "interner-name — Anbietername"
|
||||
$headname = trim( ( $id !== '' ? $id : __( 'neu', 'gdpr-content-blocker' ) ) . ( $name !== '' ? ' — ' . $name : '' ) );
|
||||
// Header shows just the provider name (internal id is auto-derived).
|
||||
$headname = $name !== '' ? $name : __( 'Neuer Dienst', 'gdpr-content-blocker' );
|
||||
?>
|
||||
<div class="cb-service-box" data-cb-index="<?php echo $idx; ?>">
|
||||
<div class="cb-service-head">
|
||||
@@ -548,13 +567,10 @@ class CB_Settings {
|
||||
<span class="dashicons dashicons-trash"></span>
|
||||
</button>
|
||||
</div>
|
||||
<?php // Internal id is kept stable for existing services and auto-derived
|
||||
// from the name for new ones (no separate field). ?>
|
||||
<input type="hidden" class="cb-input-id" name="cb_services[<?php echo $idx; ?>][id]" value="<?php echo $f( 'id' ); ?>">
|
||||
<div class="cb-service-grid" style="display:none;">
|
||||
<div class="cb-field">
|
||||
<label><?php esc_html_e( 'Interner Name (Slug)', 'gdpr-content-blocker' ); ?> *</label>
|
||||
<input type="text" name="cb_services[<?php echo $idx; ?>][id]"
|
||||
value="<?php echo $f( 'id' ); ?>" required
|
||||
placeholder="google-maps" pattern="[a-z0-9\-]+" class="cb-input-id">
|
||||
</div>
|
||||
<div class="cb-field">
|
||||
<label><?php esc_html_e( 'Anbietername', 'gdpr-content-blocker' ); ?> *</label>
|
||||
<input type="text" name="cb_services[<?php echo $idx; ?>][name]"
|
||||
@@ -650,7 +666,7 @@ class CB_Settings {
|
||||
<tr>
|
||||
<td style="vertical-align:top;"><strong><?php esc_html_e( 'Inhalt manuell blockieren', 'gdpr-content-blocker' ); ?></strong><br>
|
||||
<?php echo $code( '[content_blocker id="google-maps"]…iframe…[/content_blocker]' ); ?></td>
|
||||
<td><?php esc_html_e( 'Umschließt ein iframe und ersetzt es durch den Platzhalter des angegebenen Dienstes. Verwenden Sie den internen Namen aus dem Tab „Dienste".', 'gdpr-content-blocker' ); ?></td>
|
||||
<td><?php esc_html_e( 'Umschließt ein iframe und ersetzt es durch den Platzhalter des angegebenen Dienstes. Die ID ist der Anbietername in Kleinbuchstaben mit Bindestrichen (z. B. „Google Maps" → google-maps).', 'gdpr-content-blocker' ); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:top;"><strong><?php esc_html_e( 'Dienste-Übersicht (Datenschutzerklärung)', 'gdpr-content-blocker' ); ?></strong><br>
|
||||
|
||||
Reference in New Issue
Block a user