◆ 需求场景

如上图,网格内容并非一成不变,直接镶入php文件页面,对于非开发人员修改文本内容不太方便,为此,应该把这些文本内容抽取出来,放置后台编辑。便于后台管理人员维护数据变更。由于不确定到底需要多少个网格,所以在网页编辑页面《 详情参见:利用自定义字段实现网页静态数据后台编辑 》就不太合适了。这时可以利用自定义文章类型和其自定义字段,统一管理上述电视剧【繁花】制作历程网格内容。
◆ 创建自定义文章类型
// 创建自定义文章类型
function create_fanhua_history_post_type() {
$args = array(
'labels' => array(
'name' => '繁花历史物件',
'singular_name' => '繁花历史物件'
),
'public' => true,
'show_ui' => true, // 确保显示管理界面
'show_in_menu' => true, // 确保在菜单中显示
'has_archive' => false,
'supports' => array('title', 'custom-fields')
);
register_post_type('fanhua_history', $args);
}
//add_action('init', [ $this, 'create_fanhua_history_post_type']);

如上,在后台左侧菜单出现自定义文章类型菜单。
◆ 创建文章时自动创建自定义字段
每次创建文章时,在其编辑页面手动创建自定义字段,这样太麻烦了,这时可以创建一个自动创建自定义字段的函数功能,在创建文章页面时调用该函数。
// 新增文章时,添加自定义默认字段
function add_default_custom_fields($post_ID) {
if (get_post_type($post_ID) === 'fanhua_history') {
add_post_meta($post_ID, 'img', '0', true);
add_post_meta($post_ID, 'label', '0', true);
add_post_meta($post_ID, 'number', '0', true);
add_post_meta($post_ID, 'value', '0', true);
}
}
//add_action('wp_insert_post', [ $this,'add_default_custom_fields']);
◆ 问题:文章未保存的自定义字段造成的数据冗余
创建一篇文章时,数据库posts表会自动生成一条记录,字段【post_status】状态为:auto-draft,即【自动草稿】状态。如果创建文章后,不想要了,没有保存直接退出。他就不会在前台文章列表显示。而且自动创建的【自定义字段】也会随着一起保留在【postmeta】表中,造成数据冗余。为了解决这个问题,我直接思路是想办法在文章列表页面也把自动草稿状态的文章一起显示出来,经测试,删除自动草稿状态的文章也会把postmeta的包括自定义字段的相关数据一起删除。
// 选择草稿时,更改文章状态条件,把【自动草稿状态】也筛选出来。
function show_auto_drafts_in_all_lists( $query ) {
if ( is_admin() && $query->is_main_query() ) {
$post_types = array( 'post', 'fanhua_history' ); // 可添加更多文章类型
$current_post_type = $query->get( 'post_type' );
if ( in_array( $current_post_type, $post_types ) ) {
$post_status = $query->get( 'post_status' );
if ( $post_status === 'draft') {
$query->set( 'post_status', array( 'draft', 'auto-draft','publish' ) );
}
}
}
}
//add_action('pre_get_posts', [ $this,'show_auto_drafts_in_all_lists']);
如上代码,在查询文章列表时,修改文章状态查询条件。增加状态为【auto-draft】where条件判断即可。
如下图,这时点击页面菜单【草稿】时一并带出自动草稿。
