SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Kürzlich hochgeladen (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Advanced Wordpress Queries

  • 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)