如何在多站点网络中手动定义博客的顺序(如页面)?

时间:2014-10-08 作者:Paul Geisler

我在多站点网络中创建了一些博客,但现在我需要控制这些博客的顺序。

主页上有一个所有博客的列表,我想默认情况下是按博客id排序的。

我的想法是为每个博客添加一些额外的选项字段(可能直接在“wp admin/network/site info.php?id=##”)下),并按此数字对列表进行排序。有更好的解决方案吗?

1 个回复
最合适的回答,由SO网友:Paul Geisler 整理而成

我最终实现了我的想法。

我已经在中描述了在站点信息屏幕上创建自定义输入字段的过程this Post. 下面是完整的代码:

<?php
// Create custom Input Field on the WP-Admin > Network > Site Info Screen
// for the possibility to order sites manually 
add_action(\'admin_footer\', \'pg_custom_site_options\');
function pg_custom_site_options(){

    global $pagenow;

    if( \'site-info.php\' == $pagenow ) {

        global $details;

        $blog_id = isset( $_REQUEST[\'id\'] ) ? intval( $_REQUEST[\'id\'] ) : 0;
        if ( ! $blog_id ) wp_die( __(\'Invalid site ID.\') );

        $saved_value = get_blog_option( $blog_id, \'blog_order\');

        ?>
        <table style="display: none;">
            <tr id="user16975_custom_options">
                <th scope="row">Order</th>
                <td><input type="text" size="5" name="blog[blog_order]" value="<?php echo esc_attr( $saved_value ) ?>" ></td>
            </tr>
        </table>
        <script>
            jQuery(function($){
                $(\'.form-table tbody\').append($(\'#user16975_custom_options\'));
            });
        </script>
        <?php

    }
}

add_action(\'admin_init\', \'pg_save_custom_site_options\');
function pg_save_custom_site_options(){

    global $pagenow;

    if( \'site-info.php\' == $pagenow &&
        isset($_REQUEST[\'action\']) &&
        \'update-site\' == $_REQUEST[\'action\']
    ) {
        // Use a default value here if the field was not submitted.
        $new_field_value = \'0\';

        if ( isset( $_POST[\'blog\'][\'blog_order\'] ) ) {
            $new_field_value = intval( $_POST[\'blog\'][\'blog_order\'] );

            // save option into the database
            if( is_int($new_field_value) ){
                update_blog_option( $_POST[\'id\'], \'blog_order\', $new_field_value );
            }

        }

    }
}
?>
在每个站点获得其订单号后,我将其放置在wp\\u get\\u sites-array中

$all_standorte =  wp_get_sites( $args );

// Get the order nr of each site and save it in the array
$pos = 0;
foreach( $all_standorte as $standort){

    $standort_id = $standort[\'blog_id\'];

    $blog_order = get_blog_option( $standort_id, \'blog_order\', \'0\');

    $all_standorte[$pos][\'blog_order\'] = $blog_order;

    $pos++;
}
最后一步是使用usort().

// Sort Sites by Custom Order
function sort_sites_by_order($a, $b){

    // ascending (aufsteigend)
    return $a[\'blog_order\'] - $b[\'blog_order\'];

    // descending (absteigend, der juengste Artikel zuerst)
    // return $b[\'blog_order\'] - $a[\'blog_order\'];
}
usort($all_standorte, \'sort_sites_by_order\');

结束

相关推荐

Orderby参数在自定义查询中不起作用

我有一个非常奇怪的问题,我正在更新的网站。。。我想做的就是让帖子按降序排列,而不是随机排列。我有下面的代码,但当您将其从“rand”更改为“desc”时,它只是默认按“asc”顺序拉入帖子。我不知道为什么。此外,如果将“orderby”更改为“order”,则默认为升序。。。我在主题中做了一个搜索,看看发生了什么,但根本没有列出的地方。。。有人能把我引向正确的方向吗? <?php $args= array( \'post_type\' => \'waiting-f