> WordPress中文手册 > wordpress进阶教程(四十一):在文章快速编辑中添加字段

本工作室发布的后台框架中,可以很方便的给文章编辑页面添加字段。可是有的时候,修改一个字段总是要点击进入编辑页面很麻烦,如果能在快速编辑里面快速修改则方便很多。刚好之前给客户做了一个网站,于是干脆给客户做了这个功能:让客户可以给每个页面选择单独的菜单,能够在快速编辑页面快速选择。

效果如下1:wordpress进阶教程(四十一):在文章快速编辑中添加字段
效果2:

wordpress进阶教程(四十一):在文章快速编辑中添加字段

文章参考自:Http://shiBashake.com/WordPress-theme/expand-the-wordpress-quick-edit-menu

你可以将以下代码放入functions.PHP文件中,也可以将下列所有代码单独放一个文件,然后在functions.php中require该文件即可:比如阿树将所有代码放在了主题的include/page-quick-edit.php文件中,则在functions.php中加入以下代码即可:

require get_template_directory() . '/include/page-quick-edit.php'; // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?> <?php // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?>

注意:我使用了阿树工作室提供的类文件为单页面添加一个名为"_left_menu"的字段。

第一步:在页面快速编辑页面添加列,相关教程请参考:wordpress进阶教程(四):在文章管理列表添加自定义列

require get_template_directory() . '/include/page-quick-edit.php'; // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?> <?php // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?>

添加完以上代码,则能实现文章开头效果1的效果,在文章管理页面可以看到设置的值

第二步:在快速编辑里面增加表单项

require get_template_directory() . '/include/page-quick-edit.php'; // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?> <?php // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?>

添加完步骤三的代码,在后台快速编辑页面你就能看到菜单选择的表单项,也就是教程开头效果2的效果。

此时虽然显示可以,但是还没发保存和更新数据。

步骤三:保存和更新数据

require get_template_directory() . '/include/page-quick-edit.php'; // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?> <?php // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?>

此时保存数据也有了,但是还不够,如果仅仅做到这一步,你会发现,当你点击”快速编辑“,菜单选择的表单项没有任何选项被选中,也就是没有默认值,而在前面步骤二中代码也提到,下拉框并不能输出一个默认的选中项。

下面是原文中的方法,此方法暂时有缺陷,不过也能用。

步骤四:输出js

require get_template_directory() . '/include/page-quick-edit.php'; // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?> <?php // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?>

步骤五:更改“快速编辑”的a标签

require get_template_directory() . '/include/page-quick-edit.php'; // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?> <?php // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?>

至此,我们可以在快速编辑页面快速的设置字段。此教程并没有普适性,请看客根据注释自行修改。
下面是整个的代码

完整代码:

require get_template_directory() . '/include/page-quick-edit.php'; // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?> <?php // 如果是文章,使用manage_post_posts_columns,自定义文章类型类似 add_filter('manage_page_posts_columns', 'ashuwp_add_page_columns'); function ashuwp_add_page_columns($columns) { $columns['_left_menu'] = '左侧菜单'; return $columns; } // 如果是文章,使用manage_post_posts_column,自定义文章类型类似 add_action('manage_pages_custom_column', 'ashuwp_render_page_columns', 10, 2); function ashuwp_render_page_columns($column_name, $id) { switch ($column_name) { case '_left_menu': $menu_id = get_post_meta( $id, '_left_menu', TRUE); //获取自定义字段的值 if($menu_id){ $menu_term = get_term($menu_id,'nav_menu'); //根据字段获取菜单对象 if (is_object($menu_term)) echo $menu_term->name; //输出菜单名称 else echo '默认'; }else{ echo '默认'; } break; } } //在快速编辑里面添加字段 add_action('quick_edit_custom_box', 'ashuwp_add_quick_edit', 10, 2); function ashuwp_add_quick_edit($column_name, $post_type) { if ($column_name != '_left_menu') return; //这里的_left_menu对应上面步骤的$column_name ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <span class="title">左侧菜单</span> <?php //注意下面的input很有用处,注意name和id ?> <input type="hidden" name="left_menu_set_noncename" id="left_menu_set_noncename" value="" /> <?php $entries = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); //获取所有菜单 ?> <?php //请注意上面select的name和id ?> <select name='_left_menu' id='left_menu_set'> <option class='menu-option' value='0'>默认</option> <?php //循环输出菜单项 此处暂时无法输出默认选中项 foreach ($entries as $key => $entry){ $id = $entry->term_id; $title = $entry->name; echo "<option class='menu-option' value='{$id}'>{$title}</option>\n"; } ?> </select> </div> </fieldset> <?php } //保存和更新数据 add_action('save_post', 'ashuwp_save_quick_edit_data'); function ashuwp_save_quick_edit_data($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 $post_id; // 验证权限 if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post = get_post($post_id); if (isset($_POST['_left_menu']) && ($post->post_type != 'revision')) { $left_menu_id = esc_attr($_POST['_left_menu']); if ($left_menu_id) update_post_meta( $post_id, '_left_menu', $left_menu_id); else delete_post_meta( $post_id, '_left_menu'); } return $widget_set_id; } //输出js add_action('admin_footer', 'ashuwp_quick_edit_javascript'); function ashuwp_quick_edit_javascript() { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return; ?> <script type="text/javascript"> <!-- function set_inline_menu_set(menuSet, nonce) { // revert Quick Edit menu so that it refreshes properly inlineEditPost.revert(); var menuInput = document.getElementById('left_menu_set'); var nonceInput = document.getElementById('left_menu_set_noncename'); nonceInput.value = nonce; // check option manually for (i = 0; i < menuInput.options.length; i++) { if (menuInput.options[i].value == menuSet) { menuInput.options[i].setAttribute("selected", "selected"); } else { menuInput.options[i].removeAttribute("selected"); } } } //--> </script> <?php } //更改快速编辑 add_filter('page_row_actions', 'ashuwp_expand_quick_edit_link', 10, 2); function ashuwp_expand_quick_edit_link($actions, $post) { $current_screen = get_current_screen(); if (!is_object($current_screen) || ($current_screen->id != 'edit-page') || ($current_screen->post_type != 'page')) return $actions; $nonce = wp_create_nonce( 'left_menu_set'.$post->ID); $menu_id = get_post_meta( $post->ID, '_left_menu', TRUE); //将“快速编辑”的a标签中增加一个onclick $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_menu_set('{$menu_id}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } ?>