web-dev-qa-db-fra.com

Aide pour mettre à jour wp_get_sites en get_sites et le trier par ordre alphabétique

J'essaie de mettre à jour un formulaire sur un site Web qui présente une liste déroulante de tous les sites disponibles pour inscription sur un site WP Network. Il le commande par ID mais je dois le changer en Alphabétique. Cela permet également à certains sites de ne pas apparaître dans la liste s'ils sont marqués comme exclus. Je vois aussi qu'il utilise du code qui est supprimé depuis wp 4.6, il doit donc être mis à jour en général.

Le problème est que je vois que je ne sais pas comment faire cela et que le codeur original a disparu depuis longtemps et que ma connaissance de cela est limitée.

Quelqu'un peut-il m'aider à mettre à jour ce code afin qu'il soit conforme aux normes en vigueur et trié par ordre alphabétique?

            <select id="blog2register" name="blog2register">
        <option disabled="disabled" selected="selected" value="0000"> <?php _e(' - - - Choose a condo group to register for - - - ','msregister'); ?></option>
        <?php 
        $args = array( 'limit'      => 10000, );
        $TheBlogs = wp_get_sites($args);
        foreach($TheBlogs as $blog){
            $theBlog = get_blog_details( $blog['blogname'], true );

            if(get_site_option('msregister_blog1_id')!=$blog['blogname'] && get_site_option('msregister_exclude_'.$blog['blogname'])!='yes'){ 
            echo '<option class="" value="'.$blog['blogname'].'">'.$theBlog->blogname.'</option>';
            }

        }
         ?>
        </select>
1
Tamerax

Donc, les principales choses qui ont changé et qui nécessitent une mise à jour en raison de la désapprobation de wp_get_sites() sont de changer cela en get_sites(). Lorsque vous utilisez get_sites(), $TheBlogs sera un tableau de WP_Site objets, plutôt qu'un tableau de tableaux. Cela signifie que pour obtenir les détails du site, plutôt que d'utiliser get_blog_details(), vous pouvez utiliser $blog->__get( 'blogname' ).

L'autre partie, triant par ordre alphabétique, nécessitera de trier le tableau résultant, car get_sites() ne semble pas avoir d'argument pour un classement par nom complet.

// Get blogs with get_sites(), which uses 'number' instead of 'limit'. 
$blogs = get_sites( ['number' => 1000] );

// Sort blogs alphabetically.
uasort( 
    $blogs, 
    function( $a, $b ) {
        // Compare site blog names alphabetically for sorting purposes.
        return strcmp( $a->__get( 'blogname' ), $b->__get( 'blogname' ) );
    }
);

foreach ( $blogs as $blog ) {
    // Store blog name in variable for later use.
    $blogname = $blog->__get( 'blogname' );

    // Check blog is not excluded.
    if ( 
        get_site_option( 'msregister_blog1_id' ) != $blogname && 
        get_site_option( 'msregister_exclude_' . $blogname ) != 'yes'
    ) { 
        // Output option tag, escaping the blog name as appropriate.
        printf(
            '<option value="%s">%s</option>',
            esc_attr( $blogname ),
            esc_html( $blogname )
        );
    }
}
1
Jacob Peattie