具有自定义标题的自定义帖子类型

时间:2011-06-13 作者:Kovas

我有一个没有标题支持的自定义帖子类型,我正在尝试从帖子的分类法和自定义字段生成一个。为此,我使用以下代码:

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也会很好(与标题不同)。

2 个回复
最合适的回答,由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\' );

SO网友:fuxia

加入行动\'save_post\' (example). 您可以将post ID作为一个参数,然后可以执行以前执行的所有操作。使用一个保存操作。:)

结束

相关推荐

要在条件标记内的h2中包含_title_属性吗?

我有以下几点很好用。。elseif( get_post_type($post->ID) == \'press\' ){the_title_attribute();} 但是,我需要前面提到的标题用h2标记包装。尝试了这个,但它只是把h2放在标题后面。。。elseif( get_post_type($post->ID) == \'press\' ){echo\'<h2>\'. the_title_attribute() .\'</h2>\';} 有什么想