Сохранить пользовательский тип записи во внешней базе данных

Вопрос или проблема

Я создаю рекламный портал для небольшой сети с использованием пользовательского типа постов. Чтобы предотвратить порчу базы данных WordPress или несанкционированный доступ к информации о пользователе, мне нужно отделить данные от рекламного приложения, дублируя данные пользовательского типа постов в внешнюю базу данных при создании и обновлении рекламного поста. Я использую хук save_post, чтобы обработать, когда должна выполняться функция, и wp_insert_post(), чтобы отправить все данные поста в базу данных. Я хочу, чтобы пост сохранялся в базе данных WordPress по умолчанию, а также сохранялся в внешнюю базу данных с помощью функции моего плагина.

Проблема, которую я не могу решить, заключается в том, как сказать wp_insert_post(), чтобы использовать внешнюю базу данных вместо переменной global $wpdb, которую она использует по умолчанию, как указано в справочнике кода WP.

Как я могу использовать пользовательскую базу данных с wp_insert_post? Или есть лучший метод?

Моя функция, основанная на кодексе WordPress и примерах Stack Exchange:

// Функция для отправки данных при обновлении
function my_data_push ($post_id) {
    // Проверить тип пользовательского поста
    if (get_post_type($post_id) == 'ads'):
        // Настроить соединение с базой данных для внешнего хранения рекламы
        $push_to_db = new wpdb('username','password','database','host');
        // Вставить данные поста во внешнюю базу данных
            wp_insert_post($post_id, $wp_error = true);
    endif;
}
// Добавить функцию в хук сохранения поста
add_action('save_post', 'my_data_push');

Я искал ответ на этот вопрос более месяца – я не думаю, что WordPress подходит для любого сайта, который имеет защищённую внешнюю БД или для кого-либо, кто не хочет хранить данные клиентов в основной базе данных WordPress, что странно, так как это кажется высоко ценимой функцией.

В любом случае, я наткнулся на этот код во время своих исследований, который может вам помочь – это глобальная переменная для внешней БД… согласно автору, она может использоваться так же, как используется глобальная переменная $wpdb.

Если вы хотите полный текст автора, перейдите по ссылке https://bavotasan.com/2011/access-another-database-in-wordpress/

Код такой:
$newdb = new wpdb($DB_USER, $DB_PASSWORD, $DB_NAME, $DB_HOST);
$newdb->show_errors();

Надеюсь, это будет вам полезно…

wp_insert_post работает только для базы данных WordPress.

Вам нужно написать собственный запрос с использованием класса $wpdb.

Класс $wpdb позволяет вам взаимодействовать с несколькими базами данных в WordPress.

global $wpdb;

// Определите учетные данные для другой базы данных
$other_db_name="other_database_name";
$other_db_user="other_database_user";
$other_db_password = 'other_database_password';
$other_db_host="other_database_host";

// Подключитесь к другой базе данных
$other_db = new wpdb($other_db_user, $other_db_password, $other_db_name, $other_db_host);

// Определите таблицы для доступа
$posts_table = $other_db->prefix . 'posts'; 

// Запрос данных
$insert = $other_db->insert().

Используйте $wpdb->insert().

$other_db->insert($posts_table, array(
    'post_title' => 'title',
    'post_name' => 'post-slug', // ... и так далее
));

.

Ответ или решение

Чтобы сохранить данные кастомного типа поста в внешней базе данных, вы можете использовать хук save_post в сочетании с классом wpdb. Подход заключается в том, чтобы сначала сохранить пост в стандартной базе данных WordPress, а затем продублировать его в вашу внешнюю базу данных. Следующие шаги помогут вам организовать этот процесс:

1. Подключение к внешней базе данных

Для начала необходимо установить соединение с вашей внешней базой данных. Это можно сделать с использованием класса wpdb, который позволяет работать с несколькими базами данных. Вам понадобится указать учетные данные для подключения к новой базе данных:

function my_data_push($post_id) {
    // Проверка, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // Проверка, что это ваш кастомный тип поста
    if (get_post_type($post_id) !== 'ads') return;

    // Подключение к внешней базе данных
    $push_to_db = new wpdb('username', 'password', 'database', 'host');

    // Получение данных поста
    $post_data = get_post($post_id);

    // Подготовка данных для вставки
    $data = array(
        'post_title' => $post_data->post_title,
        'post_content' => $post_data->post_content,
        'post_status' => $post_data->post_status,
        'post_type' => $post_data->post_type,
    );

    // Вставка данных в таблицу экстернл БД
    $table_name = $push_to_db->prefix . 'posts';
    $push_to_db->insert($table_name, $data);
}

// Добавление функции в хук save_post
add_action('save_post', 'my_data_push');

2. Получение данных поста

Функция get_post($post_id) позволяет получить все необходимые данные о посте, который был сохранен. Это станет основой для вставки данных в вашу внешнюю базу данных.

3. Вставка записей в внешнюю базу данных

После получения данных необходимо подготовить массив параметров, который будет вставлен в таблицу внешней базы данных. Важно использовать метод $wpdb->insert() для осуществления вставки:

$push_to_db->insert($table_name, $data);

Этот метод является простым и эффективным способом добавить данные в таблицу. Он также принимает дополнительные аргументы, такие как формат полей.

4. Вывод ошибок и отладка

Для понимания, что именно происходит при попытке подключения и вставки данных, вы можете активировать отображение ошибок:

$push_to_db->show_errors();

Это поможет вам отследить возможные проблемы на этапе выполнения операций с базой данных.

Заключение

С вышеуказанным подходом вы сможете обеспечить сохранение кастомного типа поста как в стандартной базе данных WordPress, так и в вашей внешней базе данных. Использование класса wpdb для работы с несколькими базами данных — это безопасный и эффективный метод, который уменьшит риск повреждения вашей основной базы данных и гарантирует безопасность пользовательских данных.

Рекомендуется также позаботиться о настройках безопасности при работе с внешней базой данных, такие как шифрование соединений и ограничение доступа к базе данных. Такие меры значительно улучшат защищенность вашего решения.

Оцените материал
Добавить комментарий

Капча загружается...