diff --git a/css/style.css b/css/style.css
new file mode 100644
index 00000000..cc1b961c
--- /dev/null
+++ b/css/style.css
@@ -0,0 +1,25 @@
+.likeImg{
+ display: inline-block;
+ width: 25px;
+ cursor: pointer;
+ transition: transform 0.6s ease-in-out;
+}
+
+.likeImg:hover {
+ transform: scale(1.6);
+}
+
+.alert{
+ position: relative;
+ padding: 0.75rem 1.25rem;
+ margin-bottom: 1rem;
+ border: 1px solid transparent;
+ border-radius: 0.25rem;
+}
+
+.alert-warning{
+ color: #145275;
+ background-color: #fff3cd;
+ border-color: #231d5c;
+}
+
diff --git a/img/star-active.svg b/img/star-active.svg
new file mode 100644
index 00000000..d55308fb
--- /dev/null
+++ b/img/star-active.svg
@@ -0,0 +1,11 @@
+
+
+
\ No newline at end of file
diff --git a/img/star.svg b/img/star.svg
new file mode 100644
index 00000000..81a4d42f
--- /dev/null
+++ b/img/star.svg
@@ -0,0 +1,12 @@
+
+
+
+
\ No newline at end of file
diff --git a/includes/functions.php b/includes/functions.php
new file mode 100644
index 00000000..a64fe2ab
--- /dev/null
+++ b/includes/functions.php
@@ -0,0 +1,76 @@
+prefix . 'liked';
+
+ // Consulta para verificar se o usuário já curtiu o post.
+ $query = $wpdb->prepare("SELECT * FROM $table_name WHERE id_post = %d AND id_user = %d", $post_id, $user_id);
+ $already_liked = $wpdb->get_row($query);
+
+ $active = '';
+ $liked = 'false';
+ if($already_liked){
+ $active = '-active';
+ $liked = 'true';
+ }
+
+ if (is_singular('post')) {
+ if(!is_user_logged_in()){
+ $content .= "
Funcionalidade de like somente para usuários cadastrados
";
+ return $content;
+ }
+
+ $img_url = plugin_dir_url(dirname(__FILE__)) . "img/star$active.svg";
+ $img_html = '';
+ $content .= $img_html;
+ }
+
+ return $content;
+}
+add_filter('the_content', 'add_text_after_content');
+
+// Função para registrar endpoints personalizados da REST API.
+add_action('rest_api_init', function () {
+ register_rest_route('favorites/v1', '/toggle/', [
+ 'methods' => 'POST',
+ 'callback' => 'toggle_favorite',
+ 'permission_callback' => function () {
+ return is_user_logged_in(); // Garante que apenas usuários logados possam acessar.
+ },
+ ]);
+});
+
+// Função de callback para o endpoint da REST API.
+function toggle_favorite(WP_REST_Request $request) {
+ global $wpdb;
+
+ $user_id = get_current_user_id();
+ $post_id = $request->get_param('post_id');
+
+ if (!$user_id || !$post_id) {
+ return new WP_REST_Response(['success' => false, 'message' => 'Dados inválidos'], 400);
+ }
+
+ $table_name = $wpdb->prefix . 'liked';
+
+ // Verifica se o post já foi favoritado pelo usuário.
+ $favorite = $wpdb->get_row($wpdb->prepare(
+ "SELECT * FROM $table_name WHERE id_post = %d AND id_user = %d",
+ $post_id, $user_id
+ ));
+
+ if ($favorite) {
+ // Se já estiver favoritado, remove.
+ $wpdb->delete($table_name, ['id_user' => $user_id, 'id_post' => $post_id]);
+ return new WP_REST_Response(['success' => true, 'message' => 'disliked'], 200);
+ } else {
+ // Caso contrário, adiciona como favorito.
+ $wpdb->insert($table_name, ['id_post' => $post_id, 'id_user' => $user_id]);
+ return new WP_REST_Response(['success' => true, 'message' => 'liked'], 200);
+ }
+}
diff --git a/includes/install.php b/includes/install.php
new file mode 100644
index 00000000..5ee4d03c
--- /dev/null
+++ b/includes/install.php
@@ -0,0 +1,23 @@
+prefix . 'liked';
+
+ $charset_collate = $wpdb->get_charset_collate();
+
+ $sql = "CREATE TABLE IF NOT EXISTS $nome_tabela (
+ id BIGINT(20) NOT NULL AUTO_INCREMENT,
+ id_post BIGINT(20) NOT NULL,
+ id_user BIGINT(20) NOT NULL,
+ PRIMARY KEY (id),
+ UNIQUE KEY user_post (id_user, id_post)
+ ) $charset_collate;";
+
+ require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
+
+ dbDelta($sql);
+}
+
+register_activation_hook(__FILE__, 'create_custom_table');
diff --git a/js/script.js b/js/script.js
new file mode 100644
index 00000000..a0fc1aab
--- /dev/null
+++ b/js/script.js
@@ -0,0 +1,37 @@
+jQuery(document).ready(function ($) {
+ $(".likeImg").click(function () {
+ let postID = $(this).data("post-id");
+ let userID = $(this).data("user-id");
+ let liked = $(this).data("liked");
+
+ let data = {
+ post_id: postID,
+ user_id: userID,
+ };
+
+ $.ajax({
+ url: '/wp-json/favorites/v1/toggle/', // Usando o endpoint da REST API.
+ method: 'POST',
+ data: data,
+ beforeSend: function (xhr) {
+ xhr.setRequestHeader('X-WP-Nonce', myAjax.restNonce); // Incluindo o nonce.
+ },
+ success: function (response) {
+ if (response.success) {
+ if (response.message === "disliked") {
+ $(".likeImg").attr("src", myAjax.imgUrl + "star.svg");
+ $(".likeImg").data("liked", "false");
+ } else if (response.message === "liked") {
+ $(".likeImg").attr("src", myAjax.imgUrl + "star-active.svg");
+ $(".likeImg").data("liked", "true");
+ }
+ } else {
+ alert(response.message);
+ }
+ },
+ error: function (response) {
+ alert('Ocorreu um erro ao processar sua solicitação.');
+ }
+ });
+ });
+});
diff --git a/like.php b/like.php
new file mode 100644
index 00000000..9b845882
--- /dev/null
+++ b/like.php
@@ -0,0 +1,31 @@
+ admin_url('admin-ajax.php'),
+ 'imgUrl' => $plugin_dir . "img/",
+ 'restNonce' => wp_create_nonce('wp_rest') // Gera o nonce para REST API.
+ );
+ wp_localize_script('like-js', 'myAjax', $paths);
+}
+add_action('wp_enqueue_scripts', 'enqueue_scripts');
+
+require_once plugin_dir_path(__FILE__) . 'includes/functions.php';