SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
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->update( $wpdb->posts, array("post_title" => "Manhê modifiquei"),
array("ID" => 5), array("%s"), array("%d") );

/*
$wpdb->update( $table, $data, $where, $format = null, $where_format = null );
*/
?>
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 ... ] );
*/
?>
7 masters   wordpress - advanced queries

Mais conteúdo relacionado

Mais de Suissa

Be MEAN
Be MEANBe MEAN
Be MEANSuissa
 
Be mean
Be meanBe mean
Be meanSuissa
 
Devcast node.js e mongo db o casamento perfeito
Devcast   node.js e mongo db o casamento perfeitoDevcast   node.js e mongo db o casamento perfeito
Devcast node.js e mongo db o casamento perfeitoSuissa
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código abertoSuissa
 
Flisol - Nodejs e MongoDb o casamento perfeito
Flisol - Nodejs e MongoDb o casamento perfeitoFlisol - Nodejs e MongoDb o casamento perfeito
Flisol - Nodejs e MongoDb o casamento perfeitoSuissa
 
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafosPh pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafosSuissa
 
Javascript moderno
Javascript modernoJavascript moderno
Javascript modernoSuissa
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 
DevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesDevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesSuissa
 
Javascript moderno
Javascript modernoJavascript moderno
Javascript modernoSuissa
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código abertoSuissa
 
Mongo db no mundo real slides
Mongo db no mundo real   slidesMongo db no mundo real   slides
Mongo db no mundo real slidesSuissa
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage apiSuissa
 
Palestra sobre MongoDB com PHP no PHP'n'Rio
Palestra sobre MongoDB com PHP no PHP'n'Rio Palestra sobre MongoDB com PHP no PHP'n'Rio
Palestra sobre MongoDB com PHP no PHP'n'Rio Suissa
 
Diagrama de classe
Diagrama de classeDiagrama de classe
Diagrama de classeSuissa
 
J query aula_02
J query aula_02J query aula_02
J query aula_02Suissa
 
Cluster e replicação em banco de dados
Cluster e replicação em banco de dadosCluster e replicação em banco de dados
Cluster e replicação em banco de dadosSuissa
 
J query aula01
J query aula01J query aula01
J query aula01Suissa
 
Tabelas
TabelasTabelas
TabelasSuissa
 

Mais de Suissa (20)

Be MEAN
Be MEANBe MEAN
Be MEAN
 
Be mean
Be meanBe mean
Be mean
 
Devcast node.js e mongo db o casamento perfeito
Devcast   node.js e mongo db o casamento perfeitoDevcast   node.js e mongo db o casamento perfeito
Devcast node.js e mongo db o casamento perfeito
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código aberto
 
Flisol - Nodejs e MongoDb o casamento perfeito
Flisol - Nodejs e MongoDb o casamento perfeitoFlisol - Nodejs e MongoDb o casamento perfeito
Flisol - Nodejs e MongoDb o casamento perfeito
 
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafosPh pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
 
Javascript moderno
Javascript modernoJavascript moderno
Javascript moderno
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
DevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesDevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slides
 
Javascript moderno
Javascript modernoJavascript moderno
Javascript moderno
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
 
Mongo db no mundo real slides
Mongo db no mundo real   slidesMongo db no mundo real   slides
Mongo db no mundo real slides
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
 
Palestra sobre MongoDB com PHP no PHP'n'Rio
Palestra sobre MongoDB com PHP no PHP'n'Rio Palestra sobre MongoDB com PHP no PHP'n'Rio
Palestra sobre MongoDB com PHP no PHP'n'Rio
 
Diagrama de classe
Diagrama de classeDiagrama de classe
Diagrama de classe
 
J query aula_02
J query aula_02J query aula_02
J query aula_02
 
Cluster e replicação em banco de dados
Cluster e replicação em banco de dadosCluster e replicação em banco de dados
Cluster e replicação em banco de dados
 
J query aula01
J query aula01J query aula01
J query aula01
 
Tabelas
TabelasTabelas
Tabelas
 

7 masters wordpress - advanced 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->update( $wpdb->posts, array("post_title" => "Manhê modifiquei"), array("ID" => 5), array("%s"), array("%d") ); /* $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); */ ?>
  • 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.
  • 25. 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 ... ] ); */ ?>