Estou tentando configurar um tipo de postagem personalizado seguindo este tutorial . No entanto, estou um pouco confuso quanto a como / onde implementar update_post_meta()
. O tutorial sugere este padrão:
add_action('save_post', 'save_my_metadata');
function save_my_metadata()
{
global $post;
update_post_meta($post->ID, 'my_metadata', $_POST['my_metadata']);
}
O que funciona, mas tem o efeito infeliz de adicionar esses metadados a cada postagem, independentemente de pertencer a esse tipo personalizado ou não.
Eu coloquei o exposto acima functions.php
e acho que isso pode fazer parte do problema. Acho que preciso restringir a ação 'save_post' para acionar apenas postagens do meu tipo personalizado.
custom-post-types
Bobby Jack
fonte
fonte
Respostas:
Isso deve funcionar. Apenas substitua 'your_post_type' pelo nome do tipo de postagem. Além disso, pouco se sabe: o gancho 'save_post' passa o ID da postagem como argumento.
EDITAR
Atualizei a função para refletir o comentário de Jan. Obrigado Jan!
fonte
Se você deseja lidar com vários tipos de postagem, recomendo uma declaração básica de troca:
Os casos são basicamente os mesmos de
if($post->post_type) == 'post_type_1') {}
Mas não exigem vários blocos if-else. Odefault
bloco no comutador lida com casos em que o tipo de postagem não está no seu conjunto personalizado.fonte
@ John P Bloch e @EAMann já deram ótimas respostas, então a minha é além disso:
Obviamente, isso significa que você precisaria de uma metabox personalizada para poder editar os campos também. Aqui está uma tela de edição para o contexto:
save_{$post_type}_post
"; para ummovie
tipo de postagem, seriasave_movie_post
. Aqui está o que você teria que adicionar aofunctions.php
arquivo do seu tema ou em um plugin em algum lugar:Com isso, você poderá reescrever seu código original assim (incluindo o truque de sublinhado do item 1 acima):
fonte
Pessoalmente, prefiro seguir o padrão abaixo para adicionar manipuladores de meta personalizados aos tipos de postagem. Com o abaixo, você pode adicionar o meta suporte a um tipo de postagem apenas adicionando a chave de suporte ('subtítulo' no exemplo abaixo) à matriz de suportes para o tipo de postagem chamando add_post_type_support ('my_post_type', 'subtitle');
Esperamos que algo assim em breve seja adicionado ao núcleo.
fonte
Atualização anterior verifique se a postagem atual é ou não do seu tipo de postagem. Isso garantiria que você não o salve em todas as postagens.
Você também deve verificar a entrada (que está faltando no seu exemplo) e, ao lado dela, lembre-se de que você só pode adicionar a ação quando esse tipo de postagem estiver ativo. Se for esse o caso, não será necessário verificar mais tarde esse tipo de post.
Obtendo um tipo de postagem:
get_post_type()
ou$post->post_type;
fonte
Não consigo fazer isso funcionar - não tenho certeza do que estou fazendo de errado - mas estou tentando usar o gancho post_updated em vez do save_post - pois quero que esses valores sejam inseridos após a atualização da postagem, para que eu possa recuperar valores dos outros campos personalizados .
fonte