SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Advanced Wordpress
           Queries
Jean Carlo Nascimento aka SUISSA   Nodeware
Líder Técnico                      http://www.nodeware.com.br
Email: suissa@nodeware.com.br      Twitter:@nodeware
Twitter: @osuissa
http://about.me/suissa
Sobre o autor
Desenvolvedor Web há 8 anos
Formado pela UTF-PR em SI
Especialista em Desenvolvimento Web
Criador do Sampa.js e FrontinSampa
Evangelista Node.js e NoSQL
nosqlbr.com.br
javascriptbrasil.com
jquerybrasil.org
Vantagens
Por exemplo, a API do WordPress facilita a consulta para o
número de comentários por post, mas o que acontece se
você quiser puxar para trás o número de comentários para
cada usuário por mensagem (ou por página) e ordená-los
por data ou pelo número de vezes que eles comentaram?
Obviamente, você precisa escrever uma consulta
avançada.
Tabelas
wp_comments: dados dos Comentários
wp_commentmeta: meta data de cada Comentário
wp_links: dados do Links
wp_options: todas as opções de Administration > Settings
wp_posts: dados dos Posts e Páginas
wp_postmeta: meta data de cada Post
wp_terms: dados das Categorias e Tags de Posts e Páginas
wp_term_relationships: dados dos relacionamentos entre Posts, categories,
and tags
wp_term_taxonomy: descrições das Tags, Links e/ou Categorias gravadas em
wp_terms
wp_users: dados dos Usuários
wp_usermeta: meta data de cada usuário
Table: wp_commentmeta
                                                                                               Campos       Keyname         Type          Cardinality      Field
Field         Type          Null             Key        Default     Extra                                   PRIMARY         PRIMARY 7                     link_ID
meta_id       bigint(20) unsigned                       PRI         NULL      auto_increment                link_category   INDEX         None            link_category
comment_id    bigint(20) unsigned                       IND         0         FK->wp_comments.comment_id    link_visible    INDEX         None            link_visible
meta_key      varchar(255) YES               IND        NULL                                                Table: wp_options
meta_value    longtext      YES                         NULL                                                Field           Type          Null            Key         Default         Extra
Indexes                                                                                                     option_id       bigint(20) unsigned                       PRI Pt1         NULL        auto_increment
                                                                                                            option_name     varchar(64)                   PRI Pt3 & IND
Keyname        Type          Cardinality    Field                                                           option_value    longtext
PRIMARY        PRIMARY 0                   meta_ID                                                          autoload        varchar(20)                                   yes
comment_id     INDEX         none          comment_id                                                       Indexes
meta_key       INDEX         none          meta_key
Table: wp_comments                                                                                          Keyname        Type          Cardinality      Field
Field          Type          Null          Key          Default     Extra                                   PRIMARY        PRIMARY 184                    option_id
comment_ID     bigint(20) unsigned                      PRI         NULL      auto_increment                blog_id
comment_post_ID              bigint(20) unsigned                    IND       0           FK->wp_posts.ID   option_name
comment_author tinytext                                                                                     option_name    UNIQUE        184              option_name
comment_author_email         varchar(100)                                                                   Table: wp_postmeta
comment_author_url           varchar(200)                                                                   Field          Type          Null             Key             Default     Extra
comment_author_IP            varchar(100)                                                                   meta_id        bigint(20) unsigned                            PRI         NULL        auto_increment
comment_date datetime                                   0000-00-00 00:00:00                                 post_id        bigint(20) unsigned                            IND         0           FK->wp_posts.ID
comment_date_gmt             datetime                   IND & IND Pt2         0000-00-00 00:00:00           meta_key       varchar(255) YES               IND             NULL
comment_content              text                                                                           meta_value     longtext      YES                              NULL
comment_karma int(11)                                   0                                                   Indexes
comment_approved             varchar(20)                IND & Ind Pt1         1
comment_agent varchar(255)                                                                                  Keyname           Type          Cardinality   Field
comment_type varchar(20)                                                                                    PRIMARY           PRIMARY 13                  meta_ID
comment_parent bigint(20) unsigned                                  0         FK->wp_comments.ID            post_id           INDEX         15            post_id
user_id        bigint(20) unsigned                                  0         FK->wp_users.ID               meta_key          INDEX         7             meta_key
Indexes                                                                                                     Table: wp_posts
                                                                                                            Field             Type          Null          Key         Default         Extra
Keyname          Type          Cardinality    Field                                                         ID bigint(20) unsigned                        PRI & IND Pt4                           auto_increment
PRIMARY          PRIMARY 1                   comment_ID                                                     post_author       bigint(20) unsigned                                     0           FK->wp_users.ID
comment_post_ID                INDEX         None       comment_post_ID                                     post_date         datetime                    IND Pt3         0000-00-00 00:00:00
comment_approved_date_gmt INDEX              None       comment_approved                                    post_date_gmt datetime                                        0000-00-00 00:00:00
comment_date_gmt                                                                                            post_content      longtext
comment_date_gmt               INDEX         None       comment_date_gmt                                    post_title        text
comment_parent INDEX           None          comment_parent                                                 post_excerpt      text
Table: wp_links                                                                                             post_status       varchar(20)                 IND PT2         publish
Field            Type          Null          Key        Default     Extra                                   comment_status varchar(20)                                    open
link_id          bigint(20) unsigned                    PRI         NULL      auto_increment                ping_status       varchar(20)                                 open
link_url         varchar(255)                                                                               post_password varchar(20)
link_name        varchar(255)                                                                               post_name         varchar(200)                IND
link_image       varchar(255)                                                                               to_ping           text
link_target      varchar(25)                                                                                pinged            text
link_description varchar(255)                                                                               post_modified datetime                                        0000-00-00 00:00:00
link_visible     varchar(20)                 IND        Y                                                   post_modified_gmt               datetime                                  0000-00-00 00:00:00
link_owner       bigint(20) unsigned                                1                                       post_content_filtered           longtext
link_rating      int(11)                                0                                                   post_parent       bigint(20) unsigned                                     0           FK->wp_posts.ID
link_updated     datetime                               0000-00-00 00:00:00                                 guid              varchar(255)
link_rel         varchar(255)                                                                               menu_order        int(11)                                     0
link_notes       mediumtext                                                                                 post_type         varchar(20)                 IND Pt1         post
link_rss         varchar(255)                                                                               post_mime_type varchar(100)
Indexes                                                                                                     comment_count bigint(20)                                      0
                                                                                                            Indexes
Classe Wpdb
Prove uma interface de acesso ao banco de dados
vagamente baseado na classe ezSQL.
Classe Wpdb - API
   get_row    query
    get_col   insert
   get_var    update
get_results   prepare

              insert_id

              show_errors
Classe Wpdb - get_row
<?php
 $posts = $wpdb->get_row("SELECT ID, post_title FROM wp_posts WHERE
post_status = 'publish'
 AND post_type='post' ORDER BY comment_count DESC LIMIT 0,1")

 // Título do post mais comentado
 echo $posts->post_title;
?>
Classe Wpdb - get_col
<?php
  $posts = $wpdb->get_col("SELECT ID FROM wp_posts WHERE post_status
= 'publish'
  AND post_type='post' ORDER BY comment_count DESC LIMIT 0,10")

 // Quarto comentário mais comentado
 echo $posts[3]->ID;
?>
Classe Wpdb - get_var
<?php
  $email = $wpdb->get_var("SELECT user_email FROM wp_users WHERE
user_login = manolo ")

 // email do manolo
 echo $email;
?>
Classe Wpdb - get_results
<?php
 $posts = $wpdb->get_results("SELECT ID, post_title FROM wp_posts
WHERE post_status = 'future'
 AND post_type='post' ORDER BY post_date ASC LIMIT 0,4")

 // Título do primeiro post agendado
 echo $posts[0]->post_title;
?>
Classe Wpdb - query
<?php
   $wpdb->query("DELETE FROM wp_usermeta WHERE meta_key =
'first_login' OR meta_key = 'security_key' ");

?>
Classe Wpdb - insert
<?php
/*
$wpdb->insert( $table, $data, $format);
*/
   $wpdb->insert($wpdb->usermeta, array("user_id" => 1, "meta_key" =>
"bazinga", "meta_value" => 10), array("%d", %s", "%d"));

  // INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (1,
"bazinga", 10);
?>
Classe Wpdb - update
<?php
/*
$wpdb->update( $table, $data, $where, $format = null, $where_format = null );
*/

  $wpdb->update( $wpdb->posts, array("post_title" => "Manhê modifiquei"),
array("ID" => 5), array("%s"), array("%d") );

?>
E a segurança disso tudo?
Classe Wpdb - prepare
<?php
 $sql = $wpdb->prepare( "INSERT INTO $wpdb->postmeta (post_id,
meta_key, meta_value ) VALUES ( %d, %s, %d )", 3342, 'post_views', 2290 );

 $wpdb->query($sql);

/*
$sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] );
*/
?>
Classe Wpdb - insert_id
<?php
 $sql = $wpdb->prepare( "INSERT INTO $wpdb->postmeta (post_id,
meta_key, meta_value ) VALUES ( %d, %s, %d )", 3342, 'post_views', 2290 );

 $wpdb->query($sql);
 $meta_id = $wpdb->insert_id;

/*
$sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] );
*/
?>
Classe Wpdb - show_errors
$wpdb->show_errors();
 $wpdb->query("DELETE FROM wp_posts WHERE post_id = 554 ");


  // A mensagem de erro irá dizer-lhe que o campo "post_id" é um campo
 // desconhecido nesta tabela (já que o campo correto é ID)
Advanced Wordpress Queries Tabelas

Contenu connexe

Plus de iMasters

O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudiMasters
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesiMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeiMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiiMasters
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisiMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoiMasters
 
Clean Architecture - Elton Minetto
Clean Architecture - Elton MinettoClean Architecture - Elton Minetto
Clean Architecture - Elton MinettoiMasters
 
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos - Let...
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos - Let...Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos - Let...
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos - Let...iMasters
 
A nova geração de persistência de dados com grafos - Otávio Santana
A nova geração de persistência de dados com grafos - Otávio SantanaA nova geração de persistência de dados com grafos - Otávio Santana
A nova geração de persistência de dados com grafos - Otávio SantanaiMasters
 
Navegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosNavegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosiMasters
 
Automatizando Visual Regression Testing - Samanta Cicilia
Automatizando Visual Regression Testing - Samanta CiciliaAutomatizando Visual Regression Testing - Samanta Cicilia
Automatizando Visual Regression Testing - Samanta CiciliaiMasters
 
Design UX - Quanto isso influencia seu projeto - Guilherme Sester Araujo
Design UX - Quanto isso influencia seu projeto - Guilherme Sester AraujoDesign UX - Quanto isso influencia seu projeto - Guilherme Sester Araujo
Design UX - Quanto isso influencia seu projeto - Guilherme Sester AraujoiMasters
 
Como criar um mundo autônomo e conectado - Jomar Silva
Como criar um mundo autônomo e conectado - Jomar SilvaComo criar um mundo autônomo e conectado - Jomar Silva
Como criar um mundo autônomo e conectado - Jomar SilvaiMasters
 

Plus de iMasters (20)

O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 
Clean Architecture - Elton Minetto
Clean Architecture - Elton MinettoClean Architecture - Elton Minetto
Clean Architecture - Elton Minetto
 
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos - Let...
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos - Let...Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos - Let...
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos - Let...
 
A nova geração de persistência de dados com grafos - Otávio Santana
A nova geração de persistência de dados com grafos - Otávio SantanaA nova geração de persistência de dados com grafos - Otávio Santana
A nova geração de persistência de dados com grafos - Otávio Santana
 
Navegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosNavegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza Bastos
 
Automatizando Visual Regression Testing - Samanta Cicilia
Automatizando Visual Regression Testing - Samanta CiciliaAutomatizando Visual Regression Testing - Samanta Cicilia
Automatizando Visual Regression Testing - Samanta Cicilia
 
Design UX - Quanto isso influencia seu projeto - Guilherme Sester Araujo
Design UX - Quanto isso influencia seu projeto - Guilherme Sester AraujoDesign UX - Quanto isso influencia seu projeto - Guilherme Sester Araujo
Design UX - Quanto isso influencia seu projeto - Guilherme Sester Araujo
 
Como criar um mundo autônomo e conectado - Jomar Silva
Como criar um mundo autônomo e conectado - Jomar SilvaComo criar um mundo autônomo e conectado - Jomar Silva
Como criar um mundo autônomo e conectado - Jomar Silva
 

Advanced Wordpress Queries Tabelas

  • 1. Advanced Wordpress Queries Jean Carlo Nascimento aka SUISSA Nodeware Líder Técnico http://www.nodeware.com.br Email: suissa@nodeware.com.br Twitter:@nodeware Twitter: @osuissa http://about.me/suissa
  • 2. Sobre o autor Desenvolvedor Web há 8 anos Formado pela UTF-PR em SI Especialista em Desenvolvimento Web Criador do Sampa.js e FrontinSampa Evangelista Node.js e NoSQL nosqlbr.com.br javascriptbrasil.com jquerybrasil.org
  • 3. Vantagens Por exemplo, a API do WordPress facilita a consulta para o número de comentários por post, mas o que acontece se você quiser puxar para trás o número de comentários para cada usuário por mensagem (ou por página) e ordená-los por data ou pelo número de vezes que eles comentaram? Obviamente, você precisa escrever uma consulta avançada.
  • 4.
  • 5.
  • 6. Tabelas wp_comments: dados dos Comentários wp_commentmeta: meta data de cada Comentário wp_links: dados do Links wp_options: todas as opções de Administration > Settings wp_posts: dados dos Posts e Páginas wp_postmeta: meta data de cada Post wp_terms: dados das Categorias e Tags de Posts e Páginas wp_term_relationships: dados dos relacionamentos entre Posts, categories, and tags wp_term_taxonomy: descrições das Tags, Links e/ou Categorias gravadas em wp_terms wp_users: dados dos Usuários wp_usermeta: meta data de cada usuário
  • 7.
  • 8. Table: wp_commentmeta Campos Keyname Type Cardinality Field Field Type Null Key Default Extra PRIMARY PRIMARY 7 link_ID meta_id bigint(20) unsigned PRI NULL auto_increment link_category INDEX None link_category comment_id bigint(20) unsigned IND 0 FK->wp_comments.comment_id link_visible INDEX None link_visible meta_key varchar(255) YES IND NULL Table: wp_options meta_value longtext YES NULL Field Type Null Key Default Extra Indexes option_id bigint(20) unsigned PRI Pt1 NULL auto_increment option_name varchar(64) PRI Pt3 & IND Keyname Type Cardinality Field option_value longtext PRIMARY PRIMARY 0 meta_ID autoload varchar(20) yes comment_id INDEX none comment_id Indexes meta_key INDEX none meta_key Table: wp_comments Keyname Type Cardinality Field Field Type Null Key Default Extra PRIMARY PRIMARY 184 option_id comment_ID bigint(20) unsigned PRI NULL auto_increment blog_id comment_post_ID bigint(20) unsigned IND 0 FK->wp_posts.ID option_name comment_author tinytext option_name UNIQUE 184 option_name comment_author_email varchar(100) Table: wp_postmeta comment_author_url varchar(200) Field Type Null Key Default Extra comment_author_IP varchar(100) meta_id bigint(20) unsigned PRI NULL auto_increment comment_date datetime 0000-00-00 00:00:00 post_id bigint(20) unsigned IND 0 FK->wp_posts.ID comment_date_gmt datetime IND & IND Pt2 0000-00-00 00:00:00 meta_key varchar(255) YES IND NULL comment_content text meta_value longtext YES NULL comment_karma int(11) 0 Indexes comment_approved varchar(20) IND & Ind Pt1 1 comment_agent varchar(255) Keyname Type Cardinality Field comment_type varchar(20) PRIMARY PRIMARY 13 meta_ID comment_parent bigint(20) unsigned 0 FK->wp_comments.ID post_id INDEX 15 post_id user_id bigint(20) unsigned 0 FK->wp_users.ID meta_key INDEX 7 meta_key Indexes Table: wp_posts Field Type Null Key Default Extra Keyname Type Cardinality Field ID bigint(20) unsigned PRI & IND Pt4 auto_increment PRIMARY PRIMARY 1 comment_ID post_author bigint(20) unsigned 0 FK->wp_users.ID comment_post_ID INDEX None comment_post_ID post_date datetime IND Pt3 0000-00-00 00:00:00 comment_approved_date_gmt INDEX None comment_approved post_date_gmt datetime 0000-00-00 00:00:00 comment_date_gmt post_content longtext comment_date_gmt INDEX None comment_date_gmt post_title text comment_parent INDEX None comment_parent post_excerpt text Table: wp_links post_status varchar(20) IND PT2 publish Field Type Null Key Default Extra comment_status varchar(20) open link_id bigint(20) unsigned PRI NULL auto_increment ping_status varchar(20) open link_url varchar(255) post_password varchar(20) link_name varchar(255) post_name varchar(200) IND link_image varchar(255) to_ping text link_target varchar(25) pinged text link_description varchar(255) post_modified datetime 0000-00-00 00:00:00 link_visible varchar(20) IND Y post_modified_gmt datetime 0000-00-00 00:00:00 link_owner bigint(20) unsigned 1 post_content_filtered longtext link_rating int(11) 0 post_parent bigint(20) unsigned 0 FK->wp_posts.ID link_updated datetime 0000-00-00 00:00:00 guid varchar(255) link_rel varchar(255) menu_order int(11) 0 link_notes mediumtext post_type varchar(20) IND Pt1 post link_rss varchar(255) post_mime_type varchar(100) Indexes comment_count bigint(20) 0 Indexes
  • 9.
  • 10.
  • 11. Classe Wpdb Prove uma interface de acesso ao banco de dados vagamente baseado na classe ezSQL.
  • 12.
  • 13. Classe Wpdb - API get_row query get_col insert get_var update get_results prepare insert_id show_errors
  • 14. Classe Wpdb - get_row <?php $posts = $wpdb->get_row("SELECT ID, post_title FROM wp_posts WHERE post_status = 'publish' AND post_type='post' ORDER BY comment_count DESC LIMIT 0,1") // Título do post mais comentado echo $posts->post_title; ?>
  • 15. Classe Wpdb - get_col <?php $posts = $wpdb->get_col("SELECT ID FROM wp_posts WHERE post_status = 'publish' AND post_type='post' ORDER BY comment_count DESC LIMIT 0,10") // Quarto comentário mais comentado echo $posts[3]->ID; ?>
  • 16. Classe Wpdb - get_var <?php $email = $wpdb->get_var("SELECT user_email FROM wp_users WHERE user_login = manolo ") // email do manolo echo $email; ?>
  • 17. Classe Wpdb - get_results <?php $posts = $wpdb->get_results("SELECT ID, post_title FROM wp_posts WHERE post_status = 'future' AND post_type='post' ORDER BY post_date ASC LIMIT 0,4") // Título do primeiro post agendado echo $posts[0]->post_title; ?>
  • 18. Classe Wpdb - query <?php $wpdb->query("DELETE FROM wp_usermeta WHERE meta_key = 'first_login' OR meta_key = 'security_key' "); ?>
  • 19. Classe Wpdb - insert <?php /* $wpdb->insert( $table, $data, $format); */ $wpdb->insert($wpdb->usermeta, array("user_id" => 1, "meta_key" => "bazinga", "meta_value" => 10), array("%d", %s", "%d")); // INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (1, "bazinga", 10); ?>
  • 20. Classe Wpdb - update <?php /* $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); */ $wpdb->update( $wpdb->posts, array("post_title" => "Manhê modifiquei"), array("ID" => 5), array("%s"), array("%d") ); ?>
  • 21. E a segurança disso tudo?
  • 22.
  • 23. Classe Wpdb - prepare <?php $sql = $wpdb->prepare( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value ) VALUES ( %d, %s, %d )", 3342, 'post_views', 2290 ); $wpdb->query($sql); /* $sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] ); */ ?>
  • 24. Classe Wpdb - insert_id <?php $sql = $wpdb->prepare( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value ) VALUES ( %d, %s, %d )", 3342, 'post_views', 2290 ); $wpdb->query($sql); $meta_id = $wpdb->insert_id; /* $sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] ); */ ?>
  • 25.
  • 26. Classe Wpdb - show_errors $wpdb->show_errors(); $wpdb->query("DELETE FROM wp_posts WHERE post_id = 554 "); // A mensagem de erro irá dizer-lhe que o campo "post_id" é um campo // desconhecido nesta tabela (já que o campo correto é ID)