解决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 作为标题显示在页面中。