如何使用PHP-Wordpress按字母顺序对列表进行排序

时间:2017-11-02 16:26:58

标签: php wordpress shortcode

我创建了一个短代码,列出并链接我的wordpress多站点中的所有网站。它工作正常,但默认情况下列表按站点ID排序。我需要提一下,我的网站网址是由不同的域和我的网络中的路径区分的。例如,www.1.com/a,www.1.com/b,www.2.com / c,www.2.com,www.3.com在技术上是所有网络站点。我的短代码使用一个名为get_sites()的内置WordPress函数。这是其上的codex页面:https://developer.wordpress.org/reference/functions/get_sites/

如您所见,ID(默认),域或路径有一个内置的'orderby'参数。但我不能按网站名称订购。这就是我需要使用get_blog_details(见下文)来提取网站名称的原因。我最终使用jquery按字母顺序排列列表。以下是我打算如何工作:https://jsfiddle.net/tbalarajan/gbbrsy5k/

$("li").sort(function(a, b) {
var aText = $(a).text(), bText = $(b).text();
return aText < bText ? -1 : aText > bText ? 1 : 0;
}).appendTo('ul');

问题是,jquery只能运行,因为有一个静态列表可供使用。在我的jquery旁边使用我的短代码功能时,我会得到所有帖子,个人资料页面,网站网址等的列表。它是按字母排序的,但我不想要500个链接列表。我相信我只需要使用PHP对此列表进行排序,但我不确定如何。我看了一下sort(),但那是在处理一个数组,我不确定如何在这个上下文中使用它。

这是我用于短代码的函数。在wysiwyg中输入[show_list]会填充$ html,这是一个包含大约30个网站的列表。

function list_sites() {

$subsites = get_sites(); 

if ( ! empty ( $subsites ) ) {

    $html = '<ol class="subsites">'; 

    foreach( $subsites as $subsite ) {

        $subsite_id = $subsite->blog_id; //finds sites by id
        $subsite_name = get_blog_details( $subsite_id )->blogname; //creates variable for site name
        $subsite_link = get_blog_details( $subsite_id )->siteurl; //creates variable for site url
        $html .= '<li><a href="' . $subsite_link . '">' . $subsite_name . '</a></li>'; //builds individual list items

    }

    $html .= '</ol>';

    return $html; //returns the list

}

} add_shortcode('show_list','list_sites');

如何使用php按字母顺序排列列表的任何想法或指示将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要按站点名称对链接进行排序。我认为你可以通过利用PHP的关联数组功能来实现这个目的:

$sub_site_index = array();
$subsite_data = array();
foreach( $subsites as $subsite ) {

    $subsite_id = $subsite->blog_id; //finds sites by id
    $subsite_name = get_blog_details( $subsite_id )->blogname; //creates variable for site name
    $subsite_link = get_blog_details( $subsite_id )->siteurl; //creates variable for site url
    //$html .= '<li><a href="' . $subsite_link . '">' . $subsite_name . '</a></li>'; //builds individual list items
    $subsite_data[$site_name] = <li><a href="' . $subsite_link . '">' . $subsite_name . '</a></li>;
    $subsite_index[] = $site_name;
}
sort($subsite_index);
foreach($subsite_index as $item){
    $html .= $subsite_data[$item];
}