Как добавить запись в избранное в WordPress?

Как в WordPress реализовать функцию, позволяющую пользователям добавлять записи в избранное?
  • 26 января 2025 г. 14:24
Ответы на вопрос 2
Чтобы реализовать функцию добавления записей в избранное в WordPress, вам понадобятся несколько шагов. Вот руководство, как это сделать:

### 1. Создайте таблицу для избранных записей

Первым делом вам нужно создать таблицу в базе данных для хранения избранных записей пользователей. Для этого вы можете использовать функцию `dbDelta()`, чтобы создать таблицу при активации плагина. 

Пример кода, который можно добавить в файл вашего плагина:

```php
function create_favorites_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'favorites'; // Имя таблицы
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        user_id mediumint(9) NOT NULL,
        post_id mediumint(9) NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_favorites_table');
```

### 2. Добавьте кнопку "Добавить в избранное"

Теперь вам нужна кнопка, которая позволит пользователям добавлять записи в избранное. Вы можете добавить это в шаблон вывода записи. Пример кода для кнопки:

```php
function favorites_button($post_id) {
    if (is_user_logged_in()) {
        echo '<button class="add-to-favorites" data-postid="' . esc_attr($post_id) . '">Добавить в избранное</button>';
    }
}

add_action('the_content', 'favorites_button');
```

### 3. Обработайте AJAX-запрос для добавления в избранное

Теперь вам нужно добавить функционал, который будет обрабатывать добавление записи в избранное. Это можно сделать с помощью AJAX.

Пример кода для обработки AJAX-запроса:

```php
function add_to_favorites() {
    if (!is_user_logged_in()) {
        wp_send_json_error('Пожалуйста, войдите в систему.');
    }

    $user_id = get_current_user_id();
    $post_id = intval($_POST['post_id']);

    global $wpdb;
    $table_name = $wpdb->prefix . 'favorites';

    $wpdb->insert($table_name, array(
        'user_id' => $user_id,
        'post_id' => $post_id
    ));

    wp_send_json_success('Запись добавлена в избранное.');
}

add_action('wp_ajax_add_to_favorites', 'add_to_favorites');
```

### 4. Добавьте JavaScript для обработки клика по кнопке

Теперь необходимо добавить JavaScript, который будет отправлять AJAX-запрос на сервер при нажатии на кнопку.

```html
<script type="text/javascript">
jQuery(document).ready(function($) {
    $('.add-to-favorites').on('click', function() {
        var postId = $(this).data('postid');
        
        $.ajax({
            url: '<?php echo admin_url('admin-ajax.php'); ?>',
            type: 'POST',
            data: {
                action: 'add_to_favorites',
                post_id: postId
            },
            success: function(response) {
                if (response.success) {
                    alert(response.data);
                } else {
                    alert(response.data);
                }
            }
        });
    });
});
</script>
```

### 5. Отображение избранных записей

Чтобы пользователи могли видеть свои избранные записи, вы можете создать новую страницу и вывести записи из таблицы `favorites`. Используйте следующий код для выборки данных:

```php
function display_favorites() {
    if (!is_user_logged_in()) {
        echo 'Пожалуйста, войдите в систему.';
        return;
    }

    $user_id = get_current_user_id();
    global $wpdb;
    $table_name = $wpdb->prefix . 'favorites';

    $favorites = $wpdb->get_results($wpdb->prepare("SELECT post_id FROM $table_name WHERE user_id = %d", $user_id));

    // Отображение избранных записей
    if ($favorites) {
        foreach ($favorites as $favorite) {
            $post = get_post($favorite->post_id);
            echo '<a href="' . get_permalink($post) . '">' . esc_html($post->post_title) . '</a><br>';
        }
    } else {
        echo 'У вас нет избранных записей.';
    }
}
```

### Заключение

Эти шаги дают вам базовую реализацию функции добавления записей в избран
https://wordpress.org/plugins/tags/bookmark/ 
Где-то тут должен быть ответ.
Похожие вопросы