Gerar automaticamente o título do post personalizado com base no meta

4

Estou trabalhando com tipos de postagem personalizados para criar um tipo de "revisão de produto" personalizado. Estou personalizando a interface do usuário para ter campos para o "Revisor", "Produto" e sua "Revisão". No entanto, isso não exige um título de postagem, então removi esse campo.

Isso tudo está funcionando bem, mas quando vou olhar todos os Reveiws de Produtos, os títulos são completamente inúteis (Rascunho Automático, Rascunho Automático 2, etc.). O que eu quero fazer é definir automaticamente o título da postagem como uma combinação do nome do Revisor e do produto que eles revisaram; algo ao longo das linhas de "John Smith, Car Radio".

Eu tenho uma função que engloba a ação save_post e atualiza os meta campos customizados que eu configurei. Eu acho que preciso adicionar algo aqui para realizar o que estou tentando fazer, mas não tenho certeza de qual função ou processo isso requer.

Obrigado antecipadamente!

    
por Jeremy 23.08.2011 / 00:15

1 resposta

5

Jeremy,

Excelente trabalho não apenas deixando-o em "Auto Draft". É complicado quando esses tipos de CPTs não têm títulos. Aqui está algum código que usei para realizar uma tarefa semelhante.

Você precisará ajustar isso para sua situação, mas isso mostra uma maneira de fazer isso. Em particular, você pode usar o filtro wp_insert_post_data para alterar o título antes de adicioná-lo ao banco de dados. Agora, um dos maiores erros que você pode cometer aqui é filtrar TODOS os títulos dos posts. Se você não tiver o cuidado de testar o contexto correto (por exemplo, quando estiver salvando e / ou editando o CPT de "revisão do produto", descobrirá que TODOS os títulos do seu site são destroçados. Minha recomendação é fazer uso de campos nonce em suas caixas meta para detectar quando o formulário correto é enviado.

Aqui está o meu código:

add_filter('wp_insert_post_data', 'change_title', 99, 2);

function change_title($data, $postarr)
{    
    // If it is our form has not been submitted, so we dont want to do anything
    if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // Verify this came from the our screen and with proper authorization because save_post can be triggered at other times
    if(!isset($_POST['my_nonce_field'])) return;

    // If nonce is set, verify it
    if(isset($_POST['my_nonce_field']) && !wp_verify_nonce($_POST['my_nonce_field'], plugins_url(__FILE__))) return;

    // Get the associated term name
    foreach($_POST['tax_input']['complaint-type'] as $term) {$term_id = $term;}

    // Get name of term
    $term = get_term_by('id', $term_id, 'complaint-type');

    // Combine address with term
    $title = $_POST['address']['address1'].' ('.$term->name.')';
    $data['post_title'] = $title;

    return $data;
}

Não seja pego em minhas manipulações do título. Basta perceber que você precisa definir $data['post_title'] e retornar $data .

    
por tollmanz 23.08.2011 / 00:31