关于这个主题的说说功能,起初觉得没标题还挺好的,在前台写段话放几张图片,点击发布就完事儿了,根本用不到什么后台管理。但最近用说说多了后,看着邮件通知中那醒目的《无标题》三个字怎么看怎么别扭。
起初想的解决办法是增加一个给说说自动添加标题的功能,标题生成的格式就按《话题:话题名称-年月日》的形式体现出来,废了半天劲实现后,起初觉得还不错,起码邮件通知中再也不是千篇一律的无标题那三字了。
搞定自动命名说说标题后,没一会儿又想干嘛不让 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' );