/**
* 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
Avoiding Issues: Mostbet bonus qaydalar? pozularsa n?tic? Explained - Biotin Tablets
Avoiding Issues: Mostbet bonus qaydalar? pozularsa n?tic? Explained
Mostbet, müasir onlayn m?rc platformas?d?r v? istifad?çil?r? müxt?lif bonus imkanlar? il? geni?l?nmi?dir. Lakin, bu bonuslardan faydalanark?n mü?yy?n qaydalar?n pozulmas? ciddi n?tic?l?r? s?b?b ola bil?r. Bu m?qal?d?, Mostbet bonus qaydalar?n?n pozulmas?n?n mümkün n?tic?l?rini v? bu v?ziyy?td?n nec? qaç?naca??n?z? müzakir? ed?c?yik.
Mostbet Bonus Qaydalar?: N?d?n ?bar?tdir?
Mostbet platformas?nda bonus t?klifl?ri müxt?lif ??kild? t?qdim edilir. Bu t?klifl?rin tam ??kild? anlamas? v? t?dbiq edilm?si, oyunçular?n qazanc ?ld? etm?si üçün son d?r?c? vacibdir. Bel?likl?, Mostbet bonus qaydalar? ?sas?n a?a??dak?lard?r:
Bonus qeydiyyat zaman? verilir, ?g?r qeydiyyatdan keç?n ??xs t?l?b olunan ??rtl?ri yerin? yetirirs?.
Bonusdan istifad? etm?zd?n ?vv?l sah? il? ?laq?dar mü?yy?n ??rtl?r v? müdd?tl?r mövcuddur.
H?r hans? bir m?rcl?rd? istifad?si mütl?qdir, aksi halda bonus itiril?c?kdir.
Bonus yaln?z ?m?liyyatlar zaman? aktiv olmayan hesablar üçün etibars?zd?r.
Bonus m?bl??i verildikd?n sonra mü?yy?n bir müdd?t ?rzind? istifad? edilm?lidir.
Qaydalar?n Pozulmas?: N?tic?l?r N?l?rdir?
Mostbet bonus qaydalar?n?n pozulmas? mü?yy?n probleml?r? yol aça bil?r. Bu s?b?bl?, oyunçular bu qaydalar? diqq?tl? oxumal? v? anlamal?d?r. Qaydalar?n pozulmas? a?a??dak?larla n?tic?l?n? bil?r:
Bonusun tamamil? itirilm?si.
Hesab?n müv?qq?ti v? ya daimi ba?lanmas?.
Qazanc? bir vaxtda itirm?k.
F?r?ldaqç?l?q ?übh?si il? hüquqi add?mlar.
Bonus m?rcl?rin? dair x?b?rl?rin verilm?si.
Qaydalar?n Pozulmas?n?n Qar??s?n? Nec? Almal??
Mostbet bonus qaydalar?n? pozmamaq üçün b?zi add?mlar atmaq vacibdir. Bu add?mlar?n h?r biri, platformadan daha s?m?r?li istifad? etm?k v? daha az probleml?rl? qar??la?maq m?qs?dini güdür:
Qaydalar? Dikkatli Oxuyun: H?r zaman bonus t?klifind?ki ??rtl?ri diqq?tl? oxuyun. Bunu etm?kl?, h?r hans? bir anla??lmazl?qdan qaç?nars?n?z.
Aktiv Hesab?n?z? Qoruyun: Hesab?n?z?n aktiv oldu?unu t?min edin, y?ni heç bir aktiv m?rcl?r etm?diyiniz zaman bonuslar?n?z etibars?z olacaq.
?laq? Saxlay?n: ?g?r h?r hans? bir sual?n?z varsa, Mostbet mü?t?ri xidm?tin? müraci?t edin. Onlar siz? m?lumat verm?kd? köm?k ed?c?kl?r.
Qaydalar? Yenid?n Gözd?n Keçirin: Münt?z?m olaraq qaydalar? yenil?yin, çünki platformalar?n t?klifl?ri d?yi?? bil?r.
N?tic?
Mostbet bonus qaydalar? pozuldu?unda ciddilikl? qar??la?a bil?rsiniz. Yuxar?da müzakir? olunan qaydalarla günlük h?yat?n?zda bu v?ziyy?td?n qaça bil?rsiniz. Gözl?nil?n n?tic?l?ri bilm?k, oyunçular üçün vacibdir, bel?likl?, riskl?ri minimuma endir? bil?rl?r. Unutmay?n, müvafiq qaydalar oyunçular?n t?hlük?sizliyi v? firavanl??? üçün n?z?rd? tutulmu?dur. Bu s?b?bd?n qaidalar? pozmama?? seçin v? rahat bir m?rcl?m? t?crüb?si ya?ay?n.
Tez-tez Veril?n Suallar (FAQ)
Mostbet bonus qaydalar?n? nec? öyr?n? bil?r?m? – Mostbet sayt?nda ‘Bonuslar’ bölm?sind? detallar mövcuddur.
Bonusun vaxt? n? q?d?rdir? – Bonusu ald?qdan sonra ad?t?n 30 gün ?rzind? istifad? etm?lisiniz.
Hesab?m ba?lansa, bonusu geri ala bil?r?mmi? – ?g?r hesab?n?z ba?lanarsa, bonus itiril?c?kdir.
Bonusun istifad?si üçün minimum m?rcl?r n?dir? – Minimum m?rcl?r bonusun növün? gör? d?yi?ir.
?ikay?t ed?c?yim zaman kiml? ?laq? saxlamal?yam? – Mostbet mü?t?ri xidm?ti il? ?laq? saxlamal?s?n?z.
Post navigation