Desculpe se esta pergunta é trivial. Estou apenas começando a desenvolver plugins no WordPress.
Em todos os tutoriais, encontrei o seguinte: ao criar as tabelas personalizadas, $wpdb->prefix
é usado.
Exemplo:
$table_name = $wpdb->prefix . "liveshoutbox";
Minha pergunta:
É obrigatório usar
$wpdb->prefix
? O que acontece Se eu não usar o prefixo para minhas tabelas personalizadas?
fonte
Considere o seguinte:
Seu plugin é usado em uma rede wordpress, que usa prefixos de tabela diferentes para cada site. Seu plugin pode estar sendo executado simultaneamente em 836 sites diferentes, todos no mesmo banco de dados.
wp_385677_liveshoutbox
é um nome de tabela perfeitamente razoável.Seu plug-in é instalado por um usuário com algum conceito de segurança e alterou o prefixo da tabela para bloquear bots que tentam injetar
select * from wp_users
no sistema. Mesmo se eles encontrarem uma nova vulnerabilidade, ela não funcionará.Usar atalhos como nomes de tabelas codificados é uma boa maneira de colocar um produto em funcionamento, mas não é uma boa maneira de liberá-lo. em pouco tempo, o plug-in terá uma pilha de comentários "não funciona", no pior caso, você quebrará o site de outra pessoa.
Se eu tiver uma consulta complexa e não quiser lidar com a dificuldade de escrever,
'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id ....
você pode usar substitutos. Por exemplo:Wordpress está mudando constantemente. O que "funciona" hoje pode não funcionar amanhã. É por isso que existem funções de API. Os desenvolvedores do Wordpress garantirão que o comportamento da API pública seja consistente (ou depreciarão a função). Se você começar a usar chamadas de método internas porque é "mais rápido assim", ele geralmente voltará a morder você. Existem muito poucos atalhos verdadeiros no software - eles apenas transferem o trabalho necessário de agora para mais tarde e, como o cartão de crédito "mais tarde", geralmente custa mais.
fonte
$wpdb->prefix . "users"
resultará em uma tabela inválida em uma instalação multisite. Isso ocorre porque ele afixará o prefixo db na tabela. No entanto, o multisite usa apenas uma tabela de usuários, pois todos os usuários são usuários da rede. Portanto, se a consulta envolver as tabelas wp_users ou wp_usermeta, você deverá usar$wpdb->users
ou$wpdb->usermeta
respectivamente.