WordPress开发笔记

WordPress为文章添加复选框自定义字段并在后台列表显示其值的实现代码

WordPress为所有文章类型添加统一的复选框自定义字段并在后台列表显示其值的实现代码:

(注意这里包括系统默认和自定义文章类型)

//添加自定义字段,这里是使用ACF插件
add_action( 'acf/include_fields', function() {
    if ( ! function_exists( 'zzw_acf_add_local_field_group' ) ) {
        return;
    }

    zzw_acf_add_local_field_group( array(
    'key' => 'group_68ba5bb04fa38',
    'title' => '所有文章-自定义字段',
    'fields' => array(
        array(
            'key' => 'field_68ba5bb008504',
            'label' => '显示到主站首页',
            'name' => 'art_show_index',
            'aria-label' => '',
            'type' => 'checkbox',
            'instructions' => '返回的是选项值,模板调取(字段名):art_show_index 。“三栏块”是指主站的三栏部分中本站块的推荐部分。',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '100',
                'class' => 'art-show-index',
                'id' => 'art-show-index',
            ),
            'choices' => array(
                'indexfz' => '推至方阵',
                'indexjn' => '推至胶囊',
                'indexsl' => '推至三栏',
            ),
            'default_value' => array(
            ),
            'return_format' => 'value',
            'allow_custom' => 0,
            'allow_in_bindings' => 1,
            'layout' => 'horizontal',
            'toggle' => 1,
            'save_custom' => 0,
            'custom_choice_button_text' => '添加新选择',
        ),
    ),
    'location' => array(
        array(
            array(
                'param' => 'post_type',
                'operator' => '!=',
                'value' => 'post',
            ),
        ),
        array(
            array(
                'param' => 'post_type',
                'operator' => '==',
                'value' => 'post',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'acf_after_title',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => '',
    'active' => true,
    'description' => '',
    'show_in_rest' => 1,
) );
} );



/**
 * 为文章列表添加自定义列
 */
function zzw_add_art_show_index_column($columns) {
    // 在“标题”列后插入“推荐索引”列
    $new_columns = array();
    foreach ($columns as $key => $value) {
        $new_columns[$key] = $value;
        if ($key === 'title') {
            $new_columns['art_show_index'] = '推至主站首页';
        }
    }
    // 如果想直接加在最后,也可以使用:$columns['art_show_index'] = '推荐索引';
    return $new_columns;
}
add_filter('manage_posts_columns', 'zzw_add_art_show_index_column');

/**
 * 填充自定义列的值
 */
function zzw_manage_art_show_index_column($column_name, $post_id) {
    if ($column_name == 'art_show_index') {
        $values = get_post_meta($post_id, 'art_show_index', true);
        if (empty($values)) {
            // echo '<span aria-hidden="true">—</span><span class="screen-reader-text">未设置</span>';
            echo '';
        } else {
            // 将存储的值映射为可读的标签
            $value_labels = array();
            $option_mappings = array(
                'indexfz' => '推至方阵块',
                'indexjn' => '推至胶囊块',
                'indexsl' => '推至三栏块'
            );
            foreach ((array)$values as $value) {
                if (isset($option_mappings[$value])) {
                    $value_labels[] = $option_mappings[$value];
                }
            }
            echo esc_html(implode(', ', $value_labels));
        }
    }
}
add_action('manage_posts_custom_column', 'zzw_manage_art_show_index_column', 10, 2);