关于这个主题的说说功能,起初觉得没标题还挺好的,在前台写段话放几张图片,点击发布就完事儿了,根本用不到什么后台管理。但最近用说说多了后,看着邮件通知中那醒目的《无标题》三个字怎么看怎么别扭。
起初想的解决办法是增加一个给说说自动添加标题的功能,标题生成的格式就按《话题:话题名称-年月日》的形式体现出来,废了半天劲实现后,起初觉得还不错,起码邮件通知中再也不是千篇一律的无标题那三字了。
搞定自动命名说说标题后,没一会儿又想干嘛不让 WordPress 后台来管理说说的标题,这样不就可以随便起名字了嘛!手动添加标题虽然麻烦一点,但好处是可以自定义。折腾了好一会儿发现其实只要把 core-notes.php 中的 show_ui 设置为 ture,后台就可以看到说说的内容了,但还是没有标题,应该是代码中没有将标题名称加进去,研究了好一会儿,总算搞定。
现将修改后的 core-notes.php 代码记录如下:
<?php
function note_custom_init() {
// 注册Note类型
register_post_type( 'note', [
'labels' => [
'name' => __( '笔记' ),
'singular_name' => __( '笔记' ),
'add_new' => __( '新的笔记' ),
'add_new_item' => __( '笔记' ),
'edit_item' => __( '编辑' ),
'new_item' => __( '新笔记' ),
'view_item' => __( '查看' ),
'search_items' => __( '搜索' ),
'not_found' => __( '暂无笔记' ),
'not_found_in_trash' => __( '没有已遗弃的笔记' ),
'parent_item_colon' => __( '' ),
'menu_name' => __( '笔记' )
],
'public' => true, // 公开
'capability_type' => 'post', // 指定权限类型
'map_meta_cap' => true, // 允许编辑器设置
'menu_icon' => 'dashicons-edit-page', // 图标
'hierarchical' => false, // 是否为级联
'query_var' => true, // 可通过query_var获取
'delete_with_user' => true, // 删除时同时删除文章
'supports' => [ 'title', 'editor', 'author', 'custom-fields', 'trackbacks', 'comments' ], // 支持的功能
'show_ui' => true, // 在后台显示管理界面
'exclude_from_search' => true, // 搜索结果中排出
'show_in_nav_menus' => false, // 导航菜单中不显示
'show_in_rest' => true, // 在REST API中显示
'menu_position' => 5, // 在后台菜单中的位置
'rest_base' => 'notes', // REST API中的路由
'publicly_queryable' => true, // 允许查看
'rewrite' => [ 'slug' => 'note' ],
] );
// 话题
register_taxonomy( 'topic', 'note', [
'labels' => [
'name' => __( '话题' ),
'singular_name' => __( '话题' ),
'search_items' => __( '搜索话题' ),
'all_items' => __( '所有话题' ),
'parent_item' => __( '该话题的上级话题' ),
'parent_item_colon' => __( '该话题的上级话题:' ),
'edit_item' => __( '编辑话题' ),
'update_item' => __( '更新话题' ),
'add_new_item' => __( '添加新的话题' ),
'new_item_name' => __( '新话题' ),
'menu_name' => __( '话题' ),
],
'hierarchical' => false, // 是否为级联
'show_ui' => true, // 后台显示
'update_count_callback' => '_update_post_term_count', // 更新计数
'publicly_queryable' => false, // 允许查看
'exclude_from_search' => false, // 搜索结果中排出
'query_var' => false, // 可通过query_var获取
'show_in_rest' => true, // 在REST API中显示
] );
}
add_action( 'init', 'note_custom_init' );
// 控制管理页面字段
function note_custom_columns( $column, $post_id ) {
switch ( $column ) {
case 'content':
$post = get_post( $post_id );
echo wp_trim_words( $post->post_content, 20 ); // 显示前 20 个单词
break;
}
}
function note_edit_columns( $columns ) {
$columns = [
'cb' => '<input type="checkbox" />', // 复选框
'title' => '标题',
'content' => '内容',
'author' => '作者',
'comments' => '评论',
'date' => '日期',
];
return $columns;
}
add_filter( 'manage_note_posts_columns', 'note_edit_columns' );
add_action( 'manage_note_posts_custom_column', 'note_custom_columns', 10, 2 );
// 保存笔记时支持自定义字段
function set_custom_fields( \WP_Post $post, $request, $creating ) {
// 自定义字段
$fields = $request->get_param( 'fields' );
if ( is_array( $fields ) ) {
foreach ( $fields as $field ) {
update_post_meta( $post->ID, $field['name'], $field['value'] );
}
}
// 处理话题
$topics = $request->get_param( 'topics' );
if ( is_array( $topics ) ) {
wp_set_post_terms( $post->ID, $topics, 'topic' );
}
}
add_action( 'rest_insert_note', 'set_custom_fields', 10, 3 );
// 笔记注入到订阅源中
function feed_filter_notes( $query ) {
if ( get_theme_mod( 'biji_setting_note_feed', false ) && $query->is_feed ) {
$query->set( 'post_type', [ 'note', 'post' ] );
$query->set( 'post_status', 'publish' );
$query->set( 'has_password', false );
}
return $query;
}
add_filter( 'pre_get_posts', 'feed_filter_notes' );