Ao editar um dos meus tipos de postagem personalizados, desejo listar todas as entradas por um campo personalizado, em vez da data em que são publicadas (o que, para um tipo de postagem personalizado, provavelmente não é relevante). Eu recebi uma vantagem dos comentários de uma postagem de blog sobre tipos de postagem personalizados e o autor disse que era possível e que ele chegou até você para que você pudesse clicar nos nomes das colunas para obter uma classificação personalizada. Ele mencionou a posts_orderby
função que observei em meus próprios comentários, mas agora posso encontrar mais o post do blog. Alguma sugestão? Eu vi uma solução que usava
add_action('wp', 'check_page');
E a check_page
função usada add_filter
para alterar a consulta, mas tenho certeza de que funcionaria apenas nos arquivos de tema, não na área de administração.
fonte
Respostas:
Como você provavelmente pode imaginar pela falta de respostas fornecidas, a solução não é exatamente trivial. O que eu fiz foi criar um exemplo um pouco independente que pressupõe um tipo de postagem personalizado de "
movie
" e uma chave de campo personalizada de " Gênero ".Isenção de responsabilidade : isso funciona com o WP3.0, mas não tenho certeza se ele funcionará com versões anteriores.
Você basicamente precisa conectar dois (2) ganchos para fazê-lo funcionar e outros dois (2) para torná-lo óbvio e útil.
O primeiro gancho é '
restrict_manage_posts
', que permite emitir um HTML<select>
na área acima da lista de postagens em que os filtros " Ações em massa " e " Mostrar datas ". O código fornecido gerará a funcionalidade " Classificar por: ", como visto neste snippet da tela:(fonte: mikeschinkel.com )
O código usa o SQL direto porque não há uma função da API do WordPress para fornecer a lista de todas as meta_keys para tipos de postagens (parece um ticket trac futuro para mim ...) De qualquer forma, aqui está o código. Observe que ele pega o tipo de postagem
$_GET
e valida para garantir que seja um tipo de postagem válidopost_type_exists()
e também ummovie
tipo de postagem (essas duas verificações são um exagero, mas eu fiz isso para mostrar a você como se você não quiser codifique o tipo de postagem.) Por fim, uso osortby
parâmetro URL, pois não entra em conflito com mais nada no WordPress:A segunda etapa necessária é usar o
parse_query
gancho chamado depois que o WordPress decidir um que consulta deve ser executada, mas antes de executá-la. Aqui, podemos definir valores deorderby
emeta_key
naquery_var
matriz da consulta que estão documentados no Codex noorderby
parâmetro forquery_posts()
. Testamos para garantir que:is_admin()
),$pagenow=='edit.php'
),post_type
parâmetro de URL igual amovie
, esortby
parâmetro de URL e não recebeu um valor de ' Nenhum 'Se todos esses testes forem aprovados, definiremos o
query_vars
(como documentado aqui ) comometa_value
e nossosortby
valor para ' Gênero ':E é tudo o que você precisa fazer; não são necessários ganchos "
posts_order
" ou "wp
"! Claro que você realmente precisa fazer mais; você precisa adicionar algumas colunas em sua página que listam as postagens, para que você possa realmente ver os valores pelos quais está classificando, caso contrário os usuários ficarão confusos. Portanto, adicione ummanage_{$post_type}_posts_columns
gancho, neste casomanage_movie_posts_columns
. Esse gancho é passado na matriz padrão de colunas e, por simplicidade, substituí-o por duas colunas padrão; uma caixa de seleção (cb
) e um nome de postagem (title
). (Você pode inspecionarposts_columns
com aprint_r()
para ver o que mais está disponível por padrão.)Decidi adicionar um " Ordenado por: " para quando houver um
sortby
parâmetro de URL e quando não houverNone
:Finalmente, usamos o
manage_pages_custom_column
gancho para realmente exibir o valor quando há uma postagem do tipo de postagem apropriada e com o teste provavelmente redundante parais_admin()
e$pagenow=='edit.php'
. Quando existe umsortby
parâmetro de URL, extraímos o valor do campo personalizado que está sendo classificado por um exibi-lo em nossa lista. Aqui está o que parece (lembre-se, são dados de teste, portanto, não há comentários da galeria de amendoins nas classificações de filmes! :):(fonte: mikeschinkel.com )
E aqui está o código:
Observe que isso seleciona apenas o primeiro " Gênero " para a
movie
, ou seja, o primeiro meta_value no caso de vários valores para uma determinada chave. Mas, novamente, não tenho certeza de como isso funcionaria de outra maneira!E para aqueles que não estão familiarizados com onde colocar esse código, você pode colocá-lo em um plug-in ou, mais provavelmente, para o iniciante no
functions.php
arquivo em seu tema atual.Como isso ajuda.
fonte
'months_dropdown_results'
e'restrict_manage_posts'
. Upvotes PS são sempre apreciados. :)A partir do WordPress 3.1 (estou usando a versão beta), as colunas agora podem ser classificadas por meio de seus títulos.
A postagem a seguir detalha como implementá-los.
http://scribu.net/wordpress/custom-sortable-columns.html
fonte
Aqui está uma solução simples:
Apenas substitua SEU POST TYPE e 'your_custom_field'
fonte