// ─── PREIS-KING AUTO-INDEXING: GOOGLE + BING/YANDEX (VOLLSTÄNDIG) ─── // 1. INDEXNOW (Bing, Yandex, Naver) – Euer Key function pk_indexnow_auto( $post_id ) { if ( wp_is_post_revision( $post_id ) || get_post_status( $post_id ) !== 'publish' || wp_doing_cron() ) return; $url = get_permalink( $post_id ); $key = 'd7ad2a899b6445649695a71486a968f0'; $host = parse_url( home_url(), PHP_URL_HOST ); $key_loc = "https://preis-king.com/{$key}.txt"; $data = [ 'host' => $host, 'key' => $key, 'url' => $url, 'keyLocation' => $key_loc ]; $response = wp_remote_post( 'https://api.indexnow.org/IndexNow/UrlSubmit', [ 'timeout' => 10, 'headers' => [ 'Content-Type' => 'application/json; charset=utf-8' ], 'body' => wp_json_encode( $data ) ] ); $code = wp_remote_retrieve_response_code( $response ); error_log( "PK IndexNow {$url}: HTTP {$code}" ); } add_action( 'publish_post', 'pk_indexnow_auto', 10, 1 ); add_action( 'post_updated', 'pk_indexnow_auto', 10, 1 ); // ─── GOOGLE INDEXING API (VOLL FUNKTIONAL – JWT + PUSH) ─── function pk_google_stable_index( $post_id ) { if ( wp_is_post_revision( $post_id ) || get_post_status( $post_id ) !== 'publish' ) return; $json_path = get_stylesheet_directory() . '/preis-king-google.json'; if ( ! file_exists( $json_path ) ) { error_log( 'PK Google: JSON fehlt → ' . $json_path ); return; } $creds = json_decode( file_get_contents( $json_path ), true ); if ( ! $creds || empty( $creds['client_email'] ) || empty( $creds['private_key'] ) ) { error_log( 'PK Google: Ungültige JSON' ); return; } $url = get_permalink( $post_id ); error_log( 'PK Google: Start für Post ' . $post_id . ' → ' . $url ); // 1. JWT Token generieren $token = pk_create_google_jwt( $creds ); if ( ! $token ) { error_log( 'PK Google: JWT Token fehlgeschlagen' ); return; } // 2. REAL Google Indexing API Push $body = wp_json_encode( [ 'url' => $url, 'type' => 'URL_UPDATED' ] ); $response = wp_remote_post( 'https://indexing.googleapis.com/v3/urlNotifications:publish', [ 'timeout' => 15, 'headers' => [ 'Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json' ], 'body' => $body ] ); $code = wp_remote_retrieve_response_code( $response ); $body_resp = wp_remote_retrieve_body( $response ); error_log( "PK Google PUSH {$url}: HTTP {$code} → {$body_resp}" ); } add_action( 'publish_post', 'pk_google_stable_index', 15, 1 ); add_action( 'post_updated', 'pk_google_stable_index', 15, 1 ); // ─── GOOGLE JWT TOKEN GENERATOR ─── function pk_create_google_jwt( $creds ) { $header = pk_jwt_base64( [ 'alg' => 'RS256', 'typ' => 'JWT' ] ); $now = current_time( 'timestamp' ); $claim = [ 'iss' => $creds['client_email'], 'scope' => 'https://www.googleapis.com/auth/indexing', 'aud' => 'https://oauth2.googleapis.com/token', 'exp' => $now + 3600, 'iat' => $now ]; $payload = pk_jwt_base64( $claim ); $signature_input = "$header.$payload"; // Private Key Signatur $private_key = $creds['private_key']; if ( strpos( $private_key, '-----BEGIN PRIVATE KEY-----' ) === false ) { $private_key = "-----BEGIN PRIVATE KEY-----\n" . wordwrap( $private_key, 64, "\n", true ) . "\n-----END PRIVATE KEY-----\n"; } $signature = ''; if ( ! openssl_sign( $signature_input, $signature, $private_key, 'SHA256' ) ) { return false; } $sig = pk_jwt_base64( $signature ); $jwt = "$header.$payload.$sig"; // Token austauschen $token_response = wp_remote_post( 'https://oauth2.googleapis.com/token', [ 'timeout' => 10, 'headers' => [ 'Content-Type' => 'application/x-www-form-urlencoded' ], 'body' => 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=' . $jwt ] ); $token_body = json_decode( wp_remote_retrieve_body( $token_response ), true ); return isset( $token_body['access_token'] ) ? $token_body['access_token'] : false; } // JWT Base64 Helper function pk_jwt_base64( $data ) { return rtrim( strtr( base64_encode( json_encode( $data ) ), '+/', '-_' ), '=' ); }