我有一个没有标题支持的自定义帖子类型,我正在尝试从帖子的分类法和自定义字段生成一个。为此,我使用以下代码:
function custom_post_type_title_filter( $data , $postarr )
{
if ($postarr[\'post_type\'] == \'cars\'){
$id = get_the_ID();
$engine= \', \'.get_post_meta($id, \'Engine\', true).\'l\';
$terms = wp_get_object_terms($id, \'brand\');
$abrand= \' \'.$terms[0]->name;
$amodel = \' \'.$terms[1]->name;
$data[\'post_title\'] = $id.$abrand.$amodel.$engine;
}
return $data;
}
add_filter( \'wp_insert_post_data\' , \'custom_post_type_title_filter\' , 99, 2 );
问题是,为了让它发挥作用,我必须重新发布我的帖子。它不适用于新帖子(我想它还没有ID),如果我在帖子中更改自定义字段值,它还不会从中生成名称,我必须保存两次才能完成。
是否有人可以分享一个解决方案,举例说明如何正确完成?
此外,如果能够设置自定义slug也会很好(与标题不同)。
最合适的回答,由SO网友:Hameedullah Khan 整理而成
您可以尝试以下代码。
function custom_post_type_title ( $post_id ) {
global $wpdb;
if ( get_post_type( $post_id ) == \'cars\' ) {
$engine= \', \'.get_post_meta($post_id, \'Engine\', true).\'l\';
$terms = wp_get_object_terms($post_id, \'brand\');
$abrand= \' \'.$terms[0]->name;
$amodel = \' \'.$terms[1]->name;
$title = $post_id.$abrand.$amodel.$engine;
$where = array( \'ID\' => $post_id );
$wpdb->update( $wpdb->posts, array( \'post_title\' => $title ), $where );
}
}
add_action( \'save_post\', \'custom_post_type_title\' );