1. 程式人生 > >wordpress添加文章固定字段

wordpress添加文章固定字段

.com span section clas comm des attr word where

讓wordpress的文章數據表 增加一個字段,使其能在文章編輯頁能編輯,並能通過rest api 獲取出來。

例:給文章加一個縮略圖字段 litpic

首先 通過mysql 給文章表 wp_posts 加一個字段 litpic

然後在主題的function.php 後面添加如下代碼:

add_action( ‘add_meta_boxes‘, ‘myplugin_add_custom_box‘);
 

add_action( ‘save_post‘, ‘myplugin_save_postdata‘);

function myplugin_add_custom_box() {
add_meta_box(
‘myplugin_sectionid‘, ‘設置縮略圖‘, // 可自行修改標題文字 ‘myplugin_inner_custom_box‘, ‘post‘ ); } function myplugin_inner_custom_box( $post ) { global $wpdb; // Use nonce for verification wp_nonce_field( plugin_basename( __FILE__ ), ‘myplugin_noncename‘ ); // 獲取固定字段litpic的值,用於顯示之前保存的值 // 此處wp_posts新添加的字段為litpic,多個用半角逗號隔開
$date = $wpdb->get_row( $wpdb->prepare( "SELECT litpic FROM $wpdb->posts WHERE ID = %d", $post->ID) ); // litpic 字段輸入框的HTML代碼 echo ‘<label for="litpic_new_field">圖片url </label>‘; echo ‘<input type="text" id="litpic_new_field" name="litpic_new_field" value="‘.$date->litpic.‘" size="28" />‘;
// 多個字段依此類推 } function myplugin_save_postdata( $post_id ) { // verify if this is an auto save routine. // If it is our form has not been submitted, so we dont want to do anything if ( defined( ’DOING_AUTOSAVE’ ) && DOING_AUTOSAVE ) return; // verify this came from the our screen and with proper authorization, // because save_post can be triggered at other times if ( !wp_verify_nonce( $_POST[‘myplugin_noncename‘], plugin_basename( __FILE__ ) ) ) return; // 權限驗證 if ( ‘post‘ == $_POST[‘post_type‘] ) { if ( !current_user_can( ‘edit_post‘, $post_id ) ) return; } // 獲取編寫文章時填寫的固定字段的值,多個字段依此類推 $litpic = $_POST[‘litpic_new_field‘]; global $wpdb; $wpdb->update( "$wpdb->posts", // 以下一行代碼,多個字段的話參照下面的寫法,單引號中是字段名,右邊是變量值。半角逗號隔開 array( ‘litpic‘ => $litpic), array( ‘ID‘ => $post_id ), // 添加了多少個新字段就寫多少個%s,半角逗號隔開 array( ‘%s‘), array( ‘%d‘) ); }

添加後,文章頁會顯示litpic字段的輸入框,如圖:

技術分享圖片

但此時 rest api還不會把litpic字段輸出。

打開 /wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php 文件。

添加如下代碼:

if ( ! empty( $schema[‘properties‘][‘litpic‘] ) ) {
            $data[‘litpic‘] = $post->litpic;
        }
‘litpic‘        => array(
                    ‘description‘ => __( ‘A litpic to protect access to the content and excerpt.‘ ),
                    ‘type‘        => ‘string‘,
                    ‘context‘     => array( ‘view‘, ‘edit‘, ‘embed‘ ),
                ),
$post_type_attributes = array(
            ‘title‘,
            ‘editor‘,
            ‘author‘,
            ‘excerpt‘,
            ‘thumbnail‘,
            ‘comments‘,
            ‘revisions‘,
            ‘page-attributes‘,
            ‘post-formats‘,
            ‘custom-fields‘,
            ‘litpic‘,
        );
        $fixed_schemas = array(
            ‘post‘ => array(
                ‘title‘,
                ‘editor‘,
                ‘author‘,
                ‘excerpt‘,
                ‘thumbnail‘,
                ‘comments‘,
                ‘revisions‘,
                ‘post-formats‘,
                ‘custom-fields‘,
                ‘litpic‘,
            ),
case ‘litpic‘:
                    $schema[‘properties‘][‘litpic‘] = array(
                        ‘description‘ => __( ‘The ID for the litpic of the object.‘ ),
                        ‘type‘        => ‘string‘,
                        ‘context‘     => array( ‘view‘, ‘edit‘, ‘embed‘ ),
                    );
                    break;

現在,rest api 就可以把litpic 字段輸出了。

wordpress添加文章固定字段