Addsynapse_Search_Api_Client::settings(). Σε * αποτυχία εμφανίζεται καθαρό μήνυμα σφάλματος, όχι ψεύτικο «αποθηκεύτηκε». * * @package Addsynapse_Search_Filter */ if ( ! defined( 'ABSPATH' ) ) { exit; } // Το view αυτό γίνεται πάντα include() μέσα από μέθοδο της Addsynapse_Search_Admin // (βλ. admin/class-addsynapse-search-admin.php), άρα οι παρακάτω μεταβλητές είναι ήδη // τοπικές στην πράξη -- ποτέ πραγματικά globals. Το closure εδώ το κάνει // αληθές και για το static analysis (WordPress.NamingConventions. // PrefixAllGlobals), χωρίς να αλλάζει καμία συμπεριφορά. ( function () { $local_text = ( class_exists( 'Addsynapse_Search_Settings' ) && method_exists( 'Addsynapse_Search_Settings', 'get' ) ) ? (string) Addsynapse_Search_Settings::get( 'synonyms', '' ) : ''; $local_groups = Addsynapse_Search_Admin::parse_synonyms_text( $local_text ); // 🔴 Η αλήθεια είναι ο ΔΕΙΚΤΗΣ, όχι το τοπικό option — μπορεί να έχουν // αποκλίνει (π.χ. αν απέτυχε ένα προηγούμενο settings() κάπου στο παρελθόν). // Δείχνουμε την απόκλιση αντί να την κρύβουμε (βλ. CLAUDE.md). $is_active = ( class_exists( 'Addsynapse_Search_License' ) && method_exists( 'Addsynapse_Search_License', 'is_active' ) ) ? (bool) Addsynapse_Search_License::is_active() : false; $server_groups = null; $server_error = null; if ( $is_active && class_exists( 'Addsynapse_Search_Api_Client' ) && method_exists( 'Addsynapse_Search_Api_Client', 'get_settings' ) ) { try { $server_result = Addsynapse_Search_Api_Client::get_settings(); } catch ( \Throwable $e ) { $server_result = new WP_Error( 'addsynapse_search_settings_fetch_exception', $e->getMessage() ); } if ( is_wp_error( $server_result ) ) { $server_error = $server_result; } elseif ( is_array( $server_result ) && isset( $server_result['synonyms'] ) && is_array( $server_result['synonyms'] ) ) { // Το backend γυρίζει τη ΦΥΣΙΚΗ μορφή Meilisearch (term => [σχετικοί // όροι], αμφίδρομα) — όχι λίστα από γραμμές. Ανακατασκευάζουμε τις // ομάδες από αυτόν τον γράφο (βλ. Addsynapse_Search_Admin::synonyms_map_to_groups()). $server_groups = Addsynapse_Search_Admin::synonyms_map_to_groups( $server_result['synonyms'] ); } else { $server_groups = array(); // Έγκυρη απάντηση, απλώς άδειος δείκτης συνωνύμων. } } if ( null !== $server_groups ) { $groups = $server_groups; $diverged = ! Addsynapse_Search_Admin::synonyms_groups_equal( $server_groups, $local_groups ); } else { $groups = $local_groups; $diverged = false; } $prefill_term = isset( $_GET['add_synonym'] ) ? sanitize_text_field( wp_unslash( $_GET['add_synonym'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended $prefill_value = $prefill_term ? $prefill_term . ', ' : ''; $post_url = esc_url( admin_url( 'admin-post.php' ) ); ?>

get_error_message() ) ); ?>

$terms ) : ?>

' . esc_html__( 'Settings', 'addsynapse-search-filter' ) . '' ); ?>