這篇文章主要介紹了關於wordpress添加文章固定欄位的介紹,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
讓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 verificationwp_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 anythingif ( 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 timesif ( !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 欄位輸出了。
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!