在创建页面时增加页面顺序

时间:2013-09-11 作者:Howdy_McGee

在管理面板中,是否有一种方法可以连接到页面创建中,并增加每个页面的页面顺序号或等于页面数。目前默认值为0 当我创建一个新页面时,我更希望它位于列表的底部,而不是顶部。

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

以下是一种可能的解决方案,但需要进行一些测试以确认其可行性。仅在以下情况下运行menu_order == 0 如果不是保存的自动草稿或修订

add_action( \'save_post\', \'incremental_save_wpse_113767\', 10, 2 );

function incremental_save_wpse_113767( $post_id, $post_object )
{
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
        return;

    if( defined( \'DOING_AJAX\' ) && DOING_AJAX )
        return;

    # Block auto-drafts and revisions
    # http://codex.wordpress.org/Post_Status_Transitions
    if( in_array( $post_object->post_status, array( \'auto-draft\', \'inherit\' ) ) )
        return;

    # Menu order already set, do nothing
    if( 0 != $post_object->menu_order )
        return;

    $menu_order = get_option( \'my_menu_order\' );
    if( !$menu_order)
        $menu_order = 5; // <-- Adjust to the desired initial value

    $post_object->menu_order = $menu_order;
    remove_action( \'save_post\', \'incremental_save_wpse_113767\' );
    wp_update_post( $post_object );
    add_action( \'save_post\', \'incremental_save_wpse_113767\', 10, 2 );
    $menu_order += 5;
    update_option( \'my_menu_order\', $menu_order );
}

SO网友:s_ha_dum

我相当确信,这将满足您的需要,而不必影响“页面顺序”值。

add_action(
  \'pre_get_posts\',
  function($qry) {
    if (is_admin() && \'page\' == $qry->get(\'post_type\')) {
      $qry->set(\'orderby\',\'ID\');
      $qry->set(\'order\',\'ASC\');
    }
  },
  1000
);
帖子/页面ID总是按顺序排列的,因此如果您按ID从最小到最大排序,则应该在底部获得较新的内容。

SO网友:adamj

我已经brasofilo 代码并对其进行改进,以检索相同帖子类型的最后一篇帖子,以增加menu_order. 这样您就不需要存储最后一个menu_order 选项中的值。代码如下:

function wp1234_save_post_menu_order_increment( $post_id, $post ) {
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE || 
            defined( \'DOING_AJAX\' ) && DOING_AJAX || 
                in_array( $post->post_status, array( \'auto-draft\', \'inherit\' ) ) || 
                    $post->menu_order != 0 ) {
        return;
    }

    // Set a default menu order
    $menu_order = 1;

    // Get the previous post of the same post type
    $prev_post = get_posts(array(
        \'post_type\' => $post->post_type,
        \'author\' => get_current_user_id(),
        \'posts_per_page\' => 1,
        \'orderby\' => array(
            \'menu_order\' => \'desc\'
        )
    ));

    // Check if there are any previous posts of the same post type
    if ( count( $prev_post ) > 0 ) {
        // Increment menu order
        $menu_order = $prev_post[0]->menu_order + 1;
    }

    // Update the post menu order
    wp_update_post(array(
        \'ID\' => $post->ID,
        \'menu_order\' => $menu_order
    ));
}
add_action( \'save_post\', \'wp1234_save_post_menu_order_increment\', 10, 2 );

结束

相关推荐

向wp-admin添加自定义样式表

我在WP-ADMIN区域无法获得自定义样式表。plugins_url(\'style.css\', __FILE__) ); 我必须在名为css的插件中创建文件夹,还是只复制.css 到wp-admin/css 目录我两个都试过了,似乎对我不起作用。以及应将哪些值替换为__FILE__?对不起,我对这些东西有点陌生。/*ADDS STYLESHEET ON WP-ADMIN*/ add_action( \'admin_enqueue_scripts\', \'safely_add_styleshe