/** * Exclui um conteúdo gerado * * @param int $content_id ID do conteúdo a ser excluído * @return bool True se a exclusão foi bem-sucedida, false caso contrário */ function adbloom_delete_content($content_id) { global $wpdb; $table_name = $wpdb->prefix . 'adbloom_generated_content'; // Obter informações do conteúdo antes de excluir $content = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$table_name} WHERE id = %d", $content_id)); if (!$content) { return false; } // Se o conteúdo estiver associado a um post, excluir o post também if (!empty($content->post_id)) { wp_delete_post($content->post_id, true); } // Excluir imagens associadas if (!empty($content->images)) { $images = maybe_unserialize($content->images); if (is_array($images)) { foreach ($images as $image_id) { if (is_numeric($image_id)) { wp_delete_attachment($image_id, true); } } } } // Excluir o conteúdo do banco de dados $result = $wpdb->delete( $table_name, ['id' => $content_id], ['%d'] ); return $result !== false; } /** * Adiciona uma notificação administrativa * * @param string $type Tipo de notificação (success, error, warning, info) * @param string $message Mensagem a ser exibida * @param bool $dismissible Se a notificação pode ser descartada */ function adbloom_add_admin_notice($type, $message, $dismissible = true) { $notices = get_option('adbloom_admin_notices', []); $notices[] = [ 'type' => $type, 'message' => $message, 'dismissible' => $dismissible ]; update_option('adbloom_admin_notices', $notices); } /** * Exibe notificações administrativas */ function adbloom_display_admin_notices() { $notices = get_option('adbloom_admin_notices', []); if (empty($notices)) { return; } foreach ($notices as $notice) { $dismissible = !empty($notice['dismissible']) ? 'is-dismissible' : ''; printf( '

%s

', esc_attr($notice['type']), esc_attr($dismissible), wp_kses_post($notice['message']) ); } // Limpar notificações após exibi-las update_option('adbloom_admin_notices', []); } add_action('admin_notices', 'adbloom_display_admin_notices'); /** * Verificar se o usuário atual tem permissão para acessar o plugin * * @return bool */ function adbloom_current_user_can_access() { return current_user_can('edit_posts'); } /** * Verificar se a API do OpenAI está configurada * * @return bool */ function adbloom_is_openai_api_configured() { $api_key = get_option('adbloom_openai_api_key', ''); return !empty($api_key); } /** * Registra erros em um arquivo de log * * @param string $message Mensagem de erro * @param mixed $data Dados adicionais para o log */ function adbloom_log_error($message, $data = null) { $log_entry = date('[Y-m-d H:i:s]') . ' ' . $message; if ($data !== null) { if (is_array($data) || is_object($data)) { $log_entry .= ' - ' . print_r($data, true); } else { $log_entry .= ' - ' . $data; } } // Criar pasta de logs se não existir $upload_dir = wp_upload_dir(); $log_dir = trailingslashit($upload_dir['basedir']) . 'adbloom-logs'; if (!file_exists($log_dir)) { wp_mkdir_p($log_dir); } $log_file = $log_dir . '/error.log'; // Adicionar entrada ao log file_put_contents($log_file, $log_entry . PHP_EOL, FILE_APPEND); } /** * Processa dados de teste para a API * * @param string $test_data Dados de teste * @return array|WP_Error Resultado do processamento ou objeto de erro */ function adbloom_process_test_data($test_data) { // Instanciar a classe OpenAI $openai = adbloom_get_openai_instance(); // Verificar se a API está configurada if (!$openai->is_configured()) { return new WP_Error('api_not_configured', __('API não configurada. Por favor, configure a API nas configurações.', 'adbloom')); } // Tentar fazer uma requisição simples para testar a API $data = array( 'model' => adbloom_get_default_openai_model(), 'messages' => array( array( 'role' => 'system', 'content' => 'Você é um assistente útil.' ), array( 'role' => 'user', 'content' => 'Olá! Este é um teste de conexão. Por favor, responda apenas com "Conexão estabelecida com sucesso!"' ) ), 'temperature' => 0.7, 'max_tokens' => 50 ); // Fazer a requisição $response = $openai->make_api_request('chat/completions', $data); // Verificar se houve erro if (is_wp_error($response)) { return $response; } // Retornar resultado do processamento return array( 'status' => 'success', 'message' => __('Conexão com a API estabelecida com sucesso!', 'adbloom') ); } /** * Obter modelos OpenAI disponíveis * * @return array Lista de modelos disponíveis */ function adbloom_get_openai_models() { $models = array( 'gpt-3.5-turbo' => __('GPT-3.5 Turbo', 'adbloom'), 'gpt-4' => __('GPT-4', 'adbloom'), 'gpt-4-turbo' => __('GPT-4 Turbo', 'adbloom') ); return apply_filters('adbloom_openai_models', $models); } /** * Obter modelos de imagem disponíveis * * @return array Lista de modelos disponíveis */ function adbloom_get_image_models() { $models = array( 'dall-e-2' => __('DALL-E 2', 'adbloom'), 'dall-e-3' => __('DALL-E 3', 'adbloom') ); return apply_filters('adbloom_image_models', $models); } /** * Obter nichos predefinidos * * @return array Lista de nichos predefinidos */ function adbloom_get_predefined_niches() { $niches = array( 'tecnologia' => __('Tecnologia', 'adbloom'), 'saude' => __('Saúde e Bem-estar', 'adbloom'), 'financas' => __('Finanças Pessoais', 'adbloom'), 'marketing' => __('Marketing Digital', 'adbloom'), 'educacao' => __('Educação', 'adbloom'), 'viagens' => __('Viagens', 'adbloom'), 'gastronomia' => __('Gastronomia', 'adbloom'), 'entretenimento' => __('Entretenimento', 'adbloom'), 'esportes' => __('Esportes', 'adbloom'), 'moda' => __('Moda e Beleza', 'adbloom') ); return apply_filters('adbloom_predefined_niches', $niches); } /** * Obter o modelo de imagem padrão * * @return string Nome do modelo */ function adbloom_get_default_image_model() { $model = get_option('adbloom_image_model', 'dall-e-2'); return $model; } comidinhascriativas.space

Blog