解决WordPress标题为空的显示问题

前边刚 折腾一下wordpress的文章形式,以后可以通过 wordpress 来分享一些比如心情、图片、说说等碎语类的小玩意了,并可同步到微博。

问题也来了,这些碎语类的东西,一般都用不着添加标题,但对搜索引擎及前台一些随机调用的地方非常不友好,于是这篇 解决WordPress标题为空的显示问题 就诞生了。

这里我的方法是在发布内容的时候,后台自动添加一个标题给这些不需要标题的文章,这里是将 post_format @ post_time 的形式作为标题的。

将以下内容添加到主题函数 functions.php 中:

<?php
/**
  * 其它形式的文章,如果标题为空,则自动使用 post_format @ post_time 作为标题
  * https://yangjunwei.com
  */
add_action( 'save_post', 'post_format_as_title', 10, 2 );
function post_format_as_title($post_id, $post){
 	global $post_type;
 	if($post_type=='post'){ //只对文章生效
 		// 如果是文章的版本,不生效
 		if (wp_is_post_revision($post_id))
 			return false;
 		// 取消挂载该函数,防止无限循环
 		remove_action('save_post', 'post_format_as_title' ); 

		// 替换空标题 开始
 		$title = get_post($post_id)->post_title; //获取文章标题
		if($title == ''){
			$format = get_post_format($post_id); //获取文章形式
			$time = get_post($post_id)->post_date; //获取文章发布时间
			//$time = get_the_time('Y-m-d H:i:s');
			$title = get_post_format_string($format).' @ '.$time;
		}
		wp_update_post(array('ID' => $post_id, 'post_title' => $title ));
		// 替换空标题 结束

		// 重新挂载该函数
		add_action('save_post', 'post_format_as_title' );
	}
}

当然,还有一些其它方法,比如这个,只是在前台 loop 过程中显示个标题,并非写入数据库,也是一种懒人的办法:

function filter_post_empty_title($title){
    $format = get_post_format();
    if($title == $post_id || $title == ''){
        $time = get_the_time('Y-m-d H:i:s');
        $title = get_post_format_string($format).' @ '.$time;
    }
    return $title;
}
add_filter('the_title','filter_post_empty_title');
add_filter('get_the_title','filter_post_empty_title');

使用方法:在主题LOOP中使用the_title、get_the_title两个函数将 post_format @ post_time 作为标题显示在页面中。