仅按get_field值的第一个字母查询和显示

时间:2017-02-15 作者:francois

我找不到我的问题的答案,只希望你能找到相关的答案。

我在一家杂志网站上工作,我需要按姓氏在列表中显示贡献者的姓名。贡献者是由自定义分类法创建的。其中一些名字more than one First names.

实例

S

简·加布里埃拉·玛丽亚Sanchez<约翰Smith

因此,我所做的是为姓氏创建了一个自定义字段。它起作用了,并将它们按正确的顺序排列。这是我在一些资源的帮助下创建的代码here. 现在我唯一想做的就是只通过get\\u字段的第一个字母(\'family\\u name\',$term)进行查询。能够在我的页面上对它们进行分组。A、 B、C、D。。。。。

            <?php 

            $terms = get_terms(\'contributors\');

            $args = array(\'contributors\' => $term->slug);
            $query = new WP_Query( $args );


            $order_terms = array();
            foreach( $terms as $term ) {
            $position = get_field(\'family_name\', $term);
            $order_terms[$position] =\'<li><a href="\'. get_bloginfo( \'url\' ) . \'/contributors/\' . $term->slug . \'">\'.$term->name.\'</a></li>\';
            }

            ksort($order_terms);

            foreach( $order_terms as $order_term ) {
            echo $order_term;
            }

            ?>
也许这不可能,让我知道。

提前谢谢。

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

因此,我最终能够通过使用我添加到自定义分类中的两个字段来解决我的问题,这两个字段被称为“贡献者”。一个供网站管理员填写每个投稿者的姓氏,一个字段告诉它属于哪个字母组。

我相信有更简单的方法来编码,但由于我在编码方面的知识有限,这是我能做的最好的了。

这是我的代码:

            <!-- Letter A -->

            <?php 

            $terms = get_terms(array(
            \'taxonomy\' => \'contributors\',
            \'meta_key\' => \'letter_group\',
            \'meta_value\' => \'a\'
            ));

            if(!empty ($terms)) {

            $args = array(
            \'contributors\' => $term->slug,  
            );
            $query = new WP_Query( $args ); ?>

            <section class="names">

            <h3>A</h3>
            <p>
            <?php

            $order_terms = array();
            foreach( $terms as $term ) {
            $position = get_field(\'family_name\', $term);
            $order_terms[$position][] =\'<a href="\'. get_bloginfo( \'url\' ) . \'/contributors/\' . $term->slug . \'">\'.$term->name.\'</a><br>\'; }

            ksort($order_terms);

            foreach( $order_terms as $a ) {
            foreach($a as $order_term)
            echo $order_term;}

            wp_reset_postdata();

            ?>

            </p>
            </section>
            <?php
            }
            ?>

SO网友:CodeMascot

希望下面的代码块可以帮助您。请仔细阅读评论。代码块-

// Your previous code.
// Say this is your $oder_terms variable
$order_terms = array(
    \'Sanchez\'   => \'Sanchez Link\',
    \'Smith\'     => \'Smith Link\',
    \'Dramatist\' => \'Dramatist Link\',
    \'Rashed\'    => \'Rashed Link\',
    \'Munez\'     => \'Munez Link\',
    \'James\'     => \'James Link\',
    \'Jacky\'     => \'Jacky Link\',

);

ksort($order_terms);
// After ksort($order_terms); we get below array
/*
Array
(
    [Dramatist] => Dramatist Link
    [Jacky] => Jacky Link
    [James] => James Link
    [Munez] => Munez Link
    [Rashed] => Rashed Link
    [Sanchez] => Sanchez Link
    [Smith] => Smith Link
)
*/
// Now we need to group them on the basis of alphabet. Right ?

$new_order_terms = array();
foreach($order_terms as $key => $value) {
    $firstLetter = substr($value, 0, 1);
    $new_order_terms[$firstLetter][$key] = $value;
}

// Now if you do print_r($new_order_terms); your output will be
/*
Array
(
    [D] => Array
        (
            [Dramatist] => Dramatist Link
        )

    [J] => Array
        (
            [Jacky] => Jacky Link
            [James] => James Link
        )

    [M] => Array
        (
            [Munez] => Munez Link
        )

    [R] => Array
        (
            [Rashed] => Rashed Link
        )

    [S] => Array
        (
            [Sanchez] => Sanchez Link
            [Smith] => Smith Link
        )

)
*/
// All grouped by their first letter.