是否在创建新自定义帖子时定义Menu_Order?

时间:2010-09-29 作者:fxfuture

我创建了一个名为video 我正在使用一个名为Playlist_Order (这会改变menu_order 字段),允许用户使用拖放界面在播放列表中对其视频进行排序。

但是,当添加新帖子时,视频会显示在播放列表的顶部,因为它是默认的menu_order 价值0.

在创建新的视频帖子时,我希望它在播放列表中最后出现-即全部查询video 发布类型,查找最大的menu_order 值,然后设置此+1 为了新职位。

我如何实现这一点?

3 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

你好@fxfuture:

我想你要找的是wp_insert_post_data 钩您可以将此代码添加到主题的底部functions.php 文件和/或您可以将其添加到插件:

add_filter(\'wp_insert_post_data\',\'my_wp_insert_post_data\',10,2);
function my_wp_insert_post_data($data, $postarr) {
  $post_type = \'video\';
  if ($data[\'post_type\']==$post_type && get_post($postarr[\'ID\'])->post_status==\'draft\') {
    global $wpdb;
    $data[\'menu_order\'] = $wpdb->get_var("SELECT MAX(menu_order)+1 AS menu_order FROM {$wpdb->posts} WHERE post_type=\'{$post_type}\'");
  }
  return $data;
}

SO网友:ralor

第十条;add\\u filter方法末尾的2个参数是:执行的优先级(可选默认值=10)和新函数接收的参数数(可选默认值=1)

它出现在上面的代码中的唯一原因是更改默认参数数。

在此处阅读更多信息http://codex.wordpress.org/Function_Reference/add_filter

SO网友:Ramon Fincken

更新了答案,因为post\\u状态草稿给出了一个通知。这将为所有CPT=页面提供一个唯一的菜单顺序(数据库中最高的+5)。根据需要进行调整。

add_filter( \'wp_insert_post_data\', \'mp_wp_insert_post_data\', 999, 2);
function mp_wp_insert_post_data( $data, $postarr ) {
  $post_type = \'page\';
  if( $data[\'post_type\'] == \'page\' && $data[\'menu_order\'] == 0 ) {
    global $wpdb;
    $data[\'menu_order\'] = $wpdb->get_var("SELECT MAX(menu_order)+5 AS menu_order FROM {$wpdb->posts} WHERE post_type=\'{$post_type}\'");
  }
  return $data;
}

结束

相关推荐