Статьи

Создание пользовательских таблиц в WordPress

Если вы создаете свой собственный плагин WordPress , вы можете хранить данные в базе данных WordPress. Для этого есть несколько опций: вы можете создать пользовательскую страницу настроек с помощью API настроек , сохранить данные непосредственно в таблице опций с помощью set_option () и get_option () или создать свои собственные таблицы базы данных и сохранить ваши данные там.

В этом уроке мы рассмотрим процесс создания пользовательских таблиц в вашем плагине WordPress.

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

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

Создать таблицу при активации плагина

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

Если вы поместите это в основной файл плагина, то вы можете использовать следующий код:

register_activation_hook( __FILE__, 'pu_create_plugin_tables' );

function pu_create_plugin_tables()
{
    // enter code to create tables
}

Когда вы создаете новую таблицу в базе данных, важно соблюдать стандарты кодирования других таблиц. Когда WordPress устанавливает свои таблицы, он по умолчанию ставит таблицы перед wp_ . Вы можете изменить это внутри файла wp-config.php . Чтобы убедиться, что вы используете правильный префикс базы данных, вы можете получить доступ к этому значению внутри объекта $ wpdb .

function pu_create_plugin_tables()
{
    global $wpdb;

    // current blog table prefix
    echo $wpdb->prefix . 'tablename';

    // multisite blog, original table prefix
    echo $wpdb->base_prefix . 'tablename';
]

Разница между префиксом и свойством base_prefix используется, когда у вас включен мультисайт . Если вы используете префикс $ wpdb-> , вы получите префикс текущего сайта, на котором вы находитесь. Если вы находитесь в многосайтовом блоге, это может вернуть wp_2_ . Использование $ wpdb-> base_prefix вернет префикс, определенный в wp-config.php.

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

function pu_create_plugin_tables()
{
    global $wpdb;

    $table_name = $wpdb->prefix . 'tablename';

    $sql = "CREATE TABLE $table_name (
      id int(11) NOT NULL AUTO_INCREMENT,
      name varchar(255) DEFAULT NULL,
      UNIQUE KEY id (id)
    );";

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

Функция dbDelta () проверит текущую базу данных и сравнит ее со структурой таблицы, которая будет создана из вашего SQL. Это означает, что если вы используете SQL для создания новой таблицы, и таблица уже существует, она не будет выполнять ваш запрос SQL.

Функция dbDelta () недоступна на данном этапе приложения, поэтому вам необходимо убедиться, что вы включили файл /wp-admin/includes/upgrade.php, прежде чем вызывать функцию dbDelta () .

В следующий раз, когда вы активируете плагин, он запустит эту функцию, и в вашей базе данных будет создана новая таблица.

Добавление данных в пользовательскую таблицу

Чтобы добавить данные в ваши пользовательские таблицы, вы снова используете объект $ wpdb . У него есть метод insert () , который позволяет вам добавлять данные в выбранную вами таблицу.

Метод вставки имеет три параметра: имя таблицы, массив данных для добавления в таблицу и формат указанных параметров.

function pu_insert_custom_table()
{
    global $wpdb;

    $wpdb->insert( 
        'table', 
        array( 
            'id' => 1, 
            'name' => 'John' 
        ), 
        array( 
            '%d', 
            '%s' 
        ) 
    );
}

Получение данных из пользовательской таблицы

Чтобы извлечь данные из пользовательских таблиц базы данных, вы снова можете использовать объект $ wpdb. Есть два метода, которые вы можете использовать для получения результатов из пользовательского запроса: вы можете использовать $ wpdb-> get_row () или $ wpdb-> get_results ().

Метод get_row () вернет только одну строку, поэтому его следует использовать при запросе первичного ключа таблицы.

function pu_get_by_id( $id )
{
    global $wpdb;

    $table_name = $wpdb->prefix . 'tablename';

    $row = $wpdb->get_row( $wpdb->prepare('SELECT * FROM '.$table_name.' WHERE id = %d', $id) );

    return $row;
}

Метод get_results () возвращает все строки, которые возвращаются из запроса.

function pu_get_by_name( $name )
{
    global $wpdb;

    $table_name = $wpdb->prefix . 'tablename';

    $results = $wpdb->get_results( $wpdb->prepare('SELECT * FROM '.$table_name.' WHERE name = %s', $name) );

    return $results;
}