Genera automáticamente un título de publicación personalizado basado en meta

4

Estoy trabajando con tipos de publicaciones personalizadas para crear un tipo de "revisión de producto" personalizado. Estoy personalizando la interfaz de usuario para tener campos para el "Revisor", "Producto" y su "Revisión". Sin embargo, esto no requiere un título de publicación, así que he eliminado ese campo.

Todo esto funciona bien, pero cuando miro todas las Revelaciones de Producto, los títulos son completamente inútiles (Auto Draft, Auto Draft 2, etc.) Lo que quiero hacer es establecer automáticamente el título de la publicación como una combinación del nombre del Revisor y el producto que revisaron; algo en la línea de "John Smith, Car Radio".

Tengo una función que se enlaza con la acción save_post y actualiza los metacampos personalizados que he establecido. Me imagino que debo agregar algo aquí para lograr lo que estoy tratando de hacer, pero no estoy seguro de qué función o proceso requiere esto.

Gracias de antemano!

    
pregunta Jeremy 23.08.2011 - 00:15

1 respuesta

5

Jeremy,

Excelente trabajo, no solo dejándolo en "Auto Draft". Es complicado cuando estos tipos de CPT no tienen títulos. Aquí hay un código que he usado para realizar una tarea similar.

Necesitará ajustar esto para su situación, pero le muestra una manera de hacerlo. En particular, puede usar el filtro wp_insert_post_data para cambiar el título antes de agregarlo a la base de datos. Ahora, uno de los mayores errores que puede cometer aquí es filtrar TODOS los títulos de publicaciones. Si no tiene la precaución de probar el contexto correcto (por ejemplo, cuando está guardando y / o editando su CPT de "revisión de producto", encontrará que TODOS los títulos de su sitio se dañan. Mi recomendación es utilizar los campos de nonce en sus meta cajas para detectar cuándo se envía el formulario correcto.

Aquí está mi 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;
}

No te dejes atrapar por mis manipulaciones del título. Solo tenga en cuenta que necesita establecer $data['post_title'] y devolver $data .

    
respondido por el tollmanz 23.08.2011 - 00:31

Lea otras preguntas en las etiquetas