Adicionar uma visualização personalizada à tela de todas as postagens
TL;DR: Vou trabalhar em uma série que analisa como realizar uma tarefa útil com taxonomias, categorias prováveis, e então refatorá-la em um plug-in orientado a objetos que servirá como um plug-in utilitário para taxonomias, em geral .
Uma Breve História das Postagens OOP
Algum tempo atrás, fiz uma longa série sobre os princípios da programação orientada a objetos (e tentei compartilhar uma boa quantidade de como alcançar certas coisas dentro do contexto do WordPress).
Eu também escrevi vários artigos sobre todo o paradigma ao longo dos anos para aqueles que estão interessados em atualizar alguns desses artigos.
E eu seria negligente se não compartilhasse que um bom amigo meu literalmente escreveu um livro sobre o assunto também.
E assim, como estive pensando em vários tópicos para escrever (depois de ter um período de tempo reconhecidamente mais longo do que o planejado), pensei que poderia valer a pena falar sobre coisas práticas que podemos fazer com APIs e ganchos normais e, em seguida, refatore isso em um tipo de plugin utilitário.
Adicionar uma visualização personalizada
Para o propósito do trabalho que vou compartilhar nesta demonstração, estou usando o seguinte:
- Local por Flywheel com um
https://sandbox.localdomínio - TablePlus para acesso ao banco de dados
- Código do Visual Studio como meu IDE
- E os padrões de codificação PHP do WDS para todo o PHP que você verá.
Se você quiser acompanhar o que estou acontecendo, use todos os itens acima (não sei se compartilharei tudo, mas se você vir capturas de tela e trechos de código, saberá de onde vem ).
Com isso, aqui está uma pequena digressão viewsno WordPress (e não é como Views no sentido de MVC ou MVVM ).
Visualizações do WordPress
No momento da redação deste artigo, não parece haver uma declaração clara e concisa sobre o que é uma visão do WordPress. Em termos de gancho disponível, temos views_edit-post.
Então, se pegarmos esse gancho em particular e o que ele faz, talvez algo assim seja suficiente:
Uma visualização do WordPress é uma página onde podemos visualizar todas as postagens que estão em conformidade com um conjunto de critérios especificados.
Fora da caixa, esse critério geralmente inclui postagens como:
- Publicados,
- Rascunhos,
- Lixo,
- Agendado,
- E assim por diante.
Mas e se você tiver outro post que tenha outros critérios pelos quais deseja filtrar? Claro, você pode filtrar pela caixa suspensa que está presente na tela (digamos, por categoria), e tudo bem, mas e se você quiser usar um critério personalizado para [qualquer motivo]?
Por exemplo, e se você não quiser clicar em um determinado elemento, filtrar e visualizar as postagens? Em vez disso, você deseja ver um link para os critérios, o número de postagens que atendem aos critérios e depois filtrar por eles?
É aqui que a capacidade de editar visualizações entra em jogo.
E para os propósitos deste post, vou abordar como introduzir uma nova âncora no topo da página que listará o número de posts para uma categoria específica.
Qual é a nossa visão?
Nesse caso, usaremos Sem categoria porque uma instalação padrão já possui uma postagem sem categoria disponível e podemos ajustar facilmente algumas alterações em torno disso.
Para fazer isso, vamos escrever um mu-pluginpara que ele seja colocado no mu-pluginsdiretório. Se sua instalação não tiver um, adicione o diretório e adicione add-custom-view.phpao diretório:
A partir daí, o arquivo de plug-in inicial pode ser algo assim:
Inicialmente, estamos fazendo o seguinte:
- Definindo um namespace,
- Adicionando um filtro,
- Em seguida, configurando a função que aceitará o conjunto padrão de
$viewse retornará o array de$viewsdepois que eles forem alterados.
Então, o que precisamos fazer a partir daqui?
O conjunto de requisitos
Para alcançar o que desejamos, precisamos ser capazes de:
- Especifique o nome da categoria,
- Adicione o link para a categoria junto com o número de postagens com essa categoria na lista de visualizações,
- A capacidade de determinar se estamos na página da categoria para estilizar corretamente a lista
- A capacidade de filtrar por tipo de postagem,
- E uma forma de testar.
Todos os itens acima serão abordados no código posteriormente neste artigo, mas a quinta etapa exige que você crie manualmente uma categoria para que possamos testar facilmente se o restante do código está funcionando.
Então vá em frente e faça isso. A categoria pode ser nomeada qualquer coisa (eu usei Categoria de Amostra). Uma vez feito, vamos escrever o código do resto do plugin.
Determinar nossa visão
Primeiro, vou compartilhar uma função que determinará em qual página estamos e fará uma das duas coisas:
- Se estivermos em uma página que tenha o mesmo parâmetro de string de consulta para o ID de nossa categoria, fornecerei um nome de classe; caso contrário, retornaremos uma string vazia.
Para isso, a função deve:
- Aceite um nome de categoria,
- Inicialize uma variável para atributos,
- Compare as variáveis da string de consulta
- Determine se o nome da categoria e o ID da categoria são iguais,
- E retorne o valor adequado, se não.
Esta é a aparência da minha função:
Isso também pode ser simplificado com um operador ternário, mas para mantê-lo o mais legível possível, estou deixando-o como está por enquanto.
Determine o nome da categoria
Esse recurso específico é realmente muito fácil e, embora estejamos acostumados a receber informações dos usuários em grande parte do que fazemos, vamos codificar esse valor.
Para fazer isso, vamos simplesmente armazenar isso em uma variável que é passada pelo resto do código.
Você viu a variável anteriormente passada para a função acima e verá isso usado na versão final do código-fonte também.
Recuperar resultados de postagens com a categoria
Para isso, precisamos fazer duas coisas:
- Recupere todos os
object_idregistros que possuem o ID desta categoria, - Filtre o conteúdo que não é para essas postagens.
Há algumas coisas que quero mencionar aqui: Primeiro, usaremos a get_cat_IDfunção que o WordPress fornece. Isso recupera o ID da categoria com base no nome de entrada.
Em segundo lugar, estou usando duas funções – uma das quais é um loop – para examinar o status de postagem de um elemento. Esta não é a maneira mais eficiente de fazer isso. Em vez disso, poderíamos usar uma consulta mais elegante para recuperar apenas as postagens; no entanto, a primeira iteração disso destina-se a mostrar não apenas como fazer isso desde o início, mas também para um público que pode não estar tão confortável com outros aspectos da escrita de código.
Com isso, veja como obtemos todos os registros no WordPress que estão marcados como Sem categoria.
E com isso, pegamos os resultados e os enviamos para esta função que retornará a quantidade de elementos que são apenas posts.
Com isso, temos a maior parte do que precisamos para começar a montar nossa âncora de visão.
Gerar uma âncora de visualização
Agora que temos todas as funções necessárias para gerar uma âncora de visualização, precisamos juntá-las no lugar de sprintfformatação segura de strings.
O objetivo é gerar uma âncora que:
- Parece com o resto das âncoras,
- Mostra o número de postagens,
- Fica em negrito sempre que você está visualizando essas postagens.
Para fazer isso, precisamos construir o link e adicionar os argumentos de string de consulta apropriados. Isso significa que vamos configurar um link para edit.phpcom argumentos para:
- o ID da categoria,
- o tipo de postagem de postagem,
- e todas as postagens que possuem essa categoria.
Em seguida, precisaremos incluir:
- quaisquer atributos para estilizar o link,
- o nome da categoria,
- e apenas o conteúdo do post
post_type.
Para isso, podemos usar a seguinte função:
Isso faz várias coisas:
- Aceita a matriz padrão
$viewsdo WordPress, - Adiciona nossa âncora personalizada conforme descrito acima,
- Empurra-o para a
$viewsmatriz, - Retorna ao WordPress para renderizar.
E é isso!
Testando
Para testar isso, carregue seu navegador e você deverá ver um novo link Sem categoria ao lado do restante das âncoras, como Todos, Publicado, Meu, Lixo, Agendado, etc.
Depois disso, altere uma categoria de postagens e remova Sem categoria e, em seguida, revisite ou atualize a página Todas as postagens e você verá que o link está ativo e com estilo, dependendo de como você o está visualizando, e inclui o número de postagens categorizadas como tal, também.
Agora, para o GitHub
Carreguei a primeira iteração deste plugin no GitHub para que você possa baixá-lo e colocá-lo em seu mu-pluginsdiretório para teste.
Nos próximos posts, eu gostaria de começar mudando isso para um paradigma orientado a objetos, então essas são as mudanças que estão chegando ao plugin e o conteúdo que vem em posts futuros.






