Извините, если этот вопрос тривиален. Я только начинаю разрабатывать плагины в WordPress.
Во всех уроках я нашел это: при создании пользовательских таблиц $wpdb->prefix
используется.
Пример:
$table_name = $wpdb->prefix . "liveshoutbox";
Мой вопрос:
Обязательно ли использовать
$wpdb->prefix
? Что произойдет, если я не использую префикс для своих пользовательских таблиц?
источник
Учтите следующее:
Ваш плагин используется в сети WordPress, которая использует разные префиксы таблиц для каждого сайта. Ваш плагин может работать одновременно на 836 разных сайтах, все в одной базе данных.
wp_385677_liveshoutbox
это совершенно разумное имя таблицы.Ваш плагин установлен пользователем, который имеет некоторую концепцию безопасности, и изменил префикс таблицы, чтобы блокировать ботов, которые пытаются внедрить
select * from wp_users
в систему. Даже если они найдут новую уязвимость, она не сработает.Использование ярлыков, таких как жесткое кодирование имен таблиц, - это хороший способ запустить продукт в эксплуатацию, но не хороший способ его выпуска. в очень короткое время плагин будет иметь кучу комментариев «не работает», в худшем случае вы взломаете чужой сайт.
Если у меня сложный запрос, и я не хочу иметь дело с болью написания
'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id ....
вы можете использовать заменители. Например:Wordpress постоянно меняется. То, что «работает» сегодня, может не работать завтра. Вот почему есть функции API. Разработчики Wordpress позаботятся о том, чтобы поведение общедоступного API было согласованным (или они не будут использовать эту функцию). Если вы начнете использовать внутренние вызовы методов, потому что это «быстрее», то, как правило, вы снова будете кусать вас. В программном обеспечении очень мало настоящих ярлыков - они просто переносят требуемую работу с настоящего момента на потом, и, как и ваша кредитная карта, «позже» обычно стоит дороже.
источник
$wpdb->prefix . "users"
приведет к неверной таблице в мультисайтовой установке. Это потому, что он прикрепит префикс db к таблице. Однако в мультисайтах используется только одна пользовательская таблица, поскольку все пользователи являются пользователями сети. Поэтому, если запрос включает таблицы wp_users или wp_usermeta, вы должны использовать$wpdb->users
или$wpdb->usermeta
соответственно.