/** * Plugin Name: Auto SEO Meta * Description: Автогенерация SEO meta через Groq API. Multi-geo. * Version: 1.0 */ if (!defined('ABSPATH')) exit; if (!defined('AUTO_SEO_GROQ_KEY')) define('AUTO_SEO_GROQ_KEY', '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'); if (!defined('AUTO_SEO_MODEL')) define('AUTO_SEO_MODEL', 'llama-3.3-70b-versatile'); if (!defined('AUTO_SEO_PLUGIN')) define('AUTO_SEO_PLUGIN', 'yoast'); if (!defined('AUTO_SEO_LANG')) define('AUTO_SEO_LANG', 'English'); if (!function_exists('auto_seo_meta_keys')) { add_action('save_post', 'auto_seo_on_save', 20, 3); function auto_seo_meta_keys() { $map = [ 'rankmath' => ['title' => 'rank_math_title', 'desc' => 'rank_math_description'], 'yoast' => ['title' => '_yoast_wpseo_title', 'desc' => '_yoast_wpseo_metadesc'], 'seopress' => ['title' => '_seopress_titles_title', 'desc' => '_seopress_titles_desc'], 'aioseo' => ['title' => '_aioseo_title', 'desc' => '_aioseo_description'], ]; return $map[AUTO_SEO_PLUGIN] ?? $map['rankmath']; } function auto_seo_on_save($post_id, $post, $update) { if (wp_is_post_revision($post_id) || wp_is_post_autosave($post_id)) return; if ($post->post_status !== 'publish') return; if (!in_array($post->post_type, ['post', 'page'])) return; $keys = auto_seo_meta_keys(); $existing_t = get_post_meta($post_id, $keys['title'], true); $existing_d = get_post_meta($post_id, $keys['desc'], true); if (!empty($existing_t) && !empty($existing_d)) return; $seo = auto_seo_generate($post); if (!$seo) return; if (empty($existing_t)) update_post_meta($post_id, $keys['title'], $seo['title']); if (empty($existing_d)) update_post_meta($post_id, $keys['desc'], $seo['description']); } function auto_seo_generate($post) { $title = $post->post_title; $content = wp_strip_all_tags($post->post_content); $content = mb_substr($content, 0, 3000); if (empty($content) && empty($title)) return false; $site_name = get_bloginfo('name'); $site_desc = get_bloginfo('description'); $domain = parse_url(home_url(), PHP_URL_HOST); $lang = AUTO_SEO_LANG; $prompt = "You are an SEO expert. Generate SEO meta title (max 60 chars) and description (max 155 chars) for this webpage.\n\n"; $prompt .= "Output language: {$lang}\n"; $prompt .= "Site: {$site_name} ({$domain})\n"; if ($site_desc) $prompt .= "Site tagline: {$site_desc}\n"; $prompt .= "\nPage title: {$title}\n\n"; $prompt .= "Content:\n{$content}\n\n"; $prompt .= "Rules:\n- Title max 60 chars, includes main keyword\n- Description max 155 chars, compelling\n- Output in {$lang} only\n- No quotes\n- Output ONLY valid JSON:\n"; $prompt .= '{"title":"...","description":"..."}'; $response = wp_remote_post('https://api.groq.com/openai/v1/chat/completions', [ 'timeout' => 30, 'headers' => [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . AUTO_SEO_GROQ_KEY, ], 'body' => json_encode([ 'model' => AUTO_SEO_MODEL, 'messages' => [['role' => 'user', 'content' => $prompt]], 'temperature' => 0.7, 'max_tokens' => 300, 'response_format' => ['type' => 'json_object'], ]) ]); if (is_wp_error($response)) { error_log('Auto SEO error: ' . $response->get_error_message()); return false; } $code = wp_remote_retrieve_response_code($response); $body = json_decode(wp_remote_retrieve_body($response), true); if ($code !== 200) { error_log('Auto SEO HTTP ' . $code . ': ' . wp_remote_retrieve_body($response)); return false; } $text = $body['choices'][0]['message']['content'] ?? ''; if (empty($text)) return false; $text = preg_replace('/^```json\s*|\s*```$/m', '', trim($text)); $seo = json_decode($text, true); if (!isset($seo['title']) || !isset($seo['description'])) return false; return [ 'title' => mb_substr($seo['title'], 0, 60), 'description' => mb_substr($seo['description'], 0, 155), ]; } add_action('add_meta_boxes', function() { add_meta_box('auto_seo', 'Auto SEO', 'auto_seo_metabox', ['post', 'page'], 'side'); }); function auto_seo_metabox($post) { $keys = auto_seo_meta_keys(); $t = get_post_meta($post->ID, $keys['title'], true); $d = get_post_meta($post->ID, $keys['desc'], true); echo '

Title:
' . esc_html($t ?: '—') . '

'; echo '

Description:
' . esc_html($d ?: '—') . '

'; $url = wp_nonce_url(admin_url('admin-post.php?action=auto_seo_regen&post_id=' . $post->ID), 'auto_seo_' . $post->ID); echo '

Regenerate

'; } add_action('admin_post_auto_seo_regen', function() { $post_id = intval($_GET['post_id'] ?? 0); if (!current_user_can('edit_post', $post_id)) wp_die('No permission'); check_admin_referer('auto_seo_' . $post_id); $keys = auto_seo_meta_keys(); delete_post_meta($post_id, $keys['title']); delete_post_meta($post_id, $keys['desc']); auto_seo_on_save($post_id, get_post($post_id), true); wp_redirect(get_edit_post_link($post_id, 'raw')); exit; }); } // end function_exists guard ?????? ? X Media452426 - Biotin Tablets
  • Home
    • The Benefits of Biotin Supplements
    • Biotin for Hair Loss Treatment
    • Importance of Biotin
  • Contact Us
  • About Us

Biotin Tablets

?????? ? X Media452426

May 5, 2026Uncategorizedadmlnlx
 

????? ? ?????? ? Up X Media ??

???? ?? ????? ???????? ????????? ??? ??????????? ?????? ??????? ??? ??????? ??????, ??, ??????????, ????????????? ???????? ? Up X Media. ? ???? ?????? ?? ???????? ????????, ??? ????? Up X Media ?????? ? ?????? ??? ???????? ?????????? ????????????? ????? ?????????????.

This entry was posted in Uncategorized. Bookmark the permalink.

Related posts

Understanding Payment Methods at Casino Online Non AAMS Sicuri

Urz?dzenia Hazardowe Przez internet Za pobierz Spinsamurai apk Spinsamurai app Pieni?dze ?TOP dwie stówy na Lipiec 2025?

Leprechaun Happens odds of successful gorgeous sync Egypt Status Review 2026 Totally Casitabi casino best free Delight in Demonstration

Post navigation

← Firestorm Pokie Wager Free & Comprehend Review
Verantwortungsvolles Spielen So behalten Sie die Kontrolle im Casino →

Menu Links

  • Biotin Tablets
    • The Benefits of Biotin Supplements
    • Biotin for Hair Loss Treatment
    • Importance of Biotin
  • Contact Us
  • About Us
  • Site Map

Return to the top

Copyright © 2026 Biotin Tablets

Proudly powered by WordPress | Theme: StrapVert by WP Strap Code.