WordPress后台无插件添加速编辑自定义字段

本文以一个自定义文章类型“product”为例,把字段product_subtitle放到快速编辑栏里,下面直接上代码:

1. 先在列表中增加一栏subtitle

add_filter( 'manage_edit-product_columns', 'brain1981_add_product_columns' );
function brain1981_add_product_columns( $columns ) {
    $columns['product_subtitle'] = 'Subtitle';
    return $columns;
}

add_action( 'manage_posts_custom_column', 'brain1981_set_product_populate_columns' );
function brain1981_set_product_populate_columns( $column ) {
    if( get_post_type() == "product"){
        if ( 'product_subtitle' == $column ) {
            echo get_post_meta( get_the_ID(), 'product_subtitle', true );
        }
    }
}

这一栏既用来显示数据,也用来获取数据,后文会有说明:

2. 在快速编辑栏中添加表单项:


add_action('quick_edit_custom_box',  'brain1981_quick_edit_fields_product', 10, 2);
function brain1981_quick_edit_fields_product( $column_name, $post_type ) {
    if($post_type=="product" && $column_name=="product_subtitle" ) {
    ?>
        <fieldset class="inline-edit-col-right">
            <div class="inline-edit-col">
                <div class="inline-edit-group wp-clearfix">
                    <label class="alignleft">
                        <span class="title">SubTitle</span>
                        <span class="input-text-wrap"><input type="text" name="product_subtitle" value=""></span>
                    </label>
                </div>
            </div>
        </fieldset>
    <?php
    }
}

3. 保存这个字段

add_action( 'save_post', 'brain1981_add_product_fields', 10, 2 );
function brain1981_add_product_fields( $product_id, $product ) {
    if ( isset( $_POST['product_subtitle'] ) ) {
        update_post_meta( $product_id, 'product_subtitle', $_POST['product_subtitle'] );
    }
}

4. 给列表页添加一个JS脚本,此脚本用来及时刷新保存的快速编辑字段

add_action( 'admin_enqueue_scripts', 'brain1981_enqueue_quick_edit_population' );
function brain1981_enqueue_quick_edit_population( $pagehook ) {
    if ( 'edit.php' != $pagehook ) {
        return;
    }
    wp_enqueue_script( 'populatequickedit', get_stylesheet_directory_uri() . '/js/quickedit.js', array( 'jquery' ) );
}

同时新建一个js文件放于主题的/js/quickedit.js路径:

jQuery(function($){
    var wp_inline_edit_function = inlineEditPost.edit;
    inlineEditPost.edit = function( post_id ) {
        wp_inline_edit_function.apply( this, arguments );
        var id = 0;
        if ( typeof( post_id ) == 'object' ) {
            id = parseInt( this.getId( post_id ) );
        }
        if ( id > 0 ) {
            // add rows to variables
            var specific_post_edit_row = $( '#edit-' + id ),
                specific_post_row = $( '#post-' + id ),
                product_subtitle = $( '.product_subtitle', specific_post_row ).text();
            $( ':input[name="product_subtitle"]', specific_post_edit_row ).val( product_subtitle );
        }
    }
});

这个js脚本从列表中读取更新的变量值重新写入快速编辑的表单里,从而保障更新的数据不需要刷新页面及时反映在当前列表中。

猜你喜欢

转载自blog.csdn.net/qq_39339179/article/details/130314090
今日推荐