使用SAVE_POST替换帖子的标题

时间:2012-11-21 作者:Tsahi Levent-Levi

我使用自定义帖子,在这些帖子中,我不需要标题。

这导致Wordpress将我的帖子标题设置为“自动草稿”。

我想将标题的值更改为其他值,根据我帖子中的其他字段计算。

我该如何使用save\\u post或其他方法来实现这一点?

4 个回复
最合适的回答,由SO网友:SinisterBeard 整理而成

最简单的方法是在数据插入时编辑数据,而不是在插入后使用wp_insert_post_data 而不是save_post. 这可以在不更改的情况下创建新帖子或更新现有帖子。它还避免了通过触发update_post 在内部save_post.

add_filter( \'wp_insert_post_data\' , \'modify_post_title\' , \'99\', 1 ); // Grabs the inserted post data so you can modify it.

function modify_post_title( $data )
{
  if($data[\'post_type\'] == \'rating\' && isset($_POST[\'rating_date\'])) { // If the actual field name of the rating date is different, you\'ll have to update this.
    $date = date(\'l, d.m.Y\', strtotime($_POST[\'rating_date\']));
    $title = \'TV ratings for \' . $date;
    $data[\'post_title\'] =  $title ; //Updates the post title to your new title.
  }
  return $data; // Returns the modified data.
}

SO网友:Biranit Goren

我也有同样的需求,所以我写了这个函数——它可以工作。根据您的需要进行修改。希望这有帮助。

// set daily rating title
function set_rating_title ($post_id) {
    if ( $post_id == null || empty($_POST) )
        return;

    if ( !isset( $_POST[\'post_type\'] ) || $_POST[\'post_type\']!=\'rating\' )  
        return; 

    if ( wp_is_post_revision( $post_id ) )
        $post_id = wp_is_post_revision( $post_id );

    global $post;  
    if ( empty( $post ) )
        $post = get_post($post_id);

    if ($_POST[\'rating_date\']!=\'\') {
        global $wpdb;
        $date = date(\'l, d.m.Y\', strtotime($_POST[\'rating_date\']));
        $title = \'TV ratings for \' . $date;
        $where = array( \'ID\' => $post_id );
        $wpdb->update( $wpdb->posts, array( \'post_title\' => $title ), $where );
    }
}
add_action(\'save_post\', \'set_rating_title\', 12 );

SO网友:Kellen Mace

这里有一个使用静态变量来防止无限循环的解决方案。这允许您安全地呼叫wp_update_post() 连接到的函数的内部save_post.

function km_set_title_on_save( $post_id ) {

    // Set this variable to false initially.
    static $updated = false;

    // If title has already been set once, bail.
    if ( $updated ) {
        return;
    }

    // Since we\'re updating this post\'s title, set this
    // variable to true to ensure it doesn\'t happen again.
    $updated = true;

    $date           = get_post_meta( $post_id, \'rating_date\', true );
    $date_formatted = date( \'l, d.m.Y\', strtotime( $date ) );

    // Update the post\'s title.
    wp_update_post( [
        \'ID\'         => $post_id,
        \'post_title\' => \'TV ratings for \' . $date_formatted,
    ] );
}
add_action( \'save_post\', \'km_set_title_on_save\' );
注意:要将此功能限制为特定的帖子类型,请使用save_post_{$post->post_type}钩住而不是save\\u post。

SO网友:Ralf912

尝试过滤器default_title:

add_filter( \'default_title\', \'my_default_title\', 10, 2 );

function my_default_title( $post_title, $post ){

  $custom_post_type = \'my_awesome_cpt\';

  // do it only on your custom post type(s)
  if( $post->post_type !== $custom_post_type )
    return $post_title;

  // create your preferred title here
  $post_title = $custom_post_type . date( \'Y-m-d :: H:i:s\', time() );

  return $post_title;
}

结束

相关推荐