WordPress - 按字母显示类别的书签链接


wordpress - show bookmark links of a category by letter

我很难通过以下方式使WP显示类别的链接:

  • 一个
  • 苹果
  • 艺术
  • 布梅朗...等

我尝试了以下内容,但由于某种原因,查询没有显示任何内容

        $first_char = 'b';            
        $links = $wpdb->get_results("
        SELECT      *
        FROM        $wpdb->links
        WHERE       SUBSTR($wpdb->links.link_name,1,1) = %s
        ORDER BY    $wpdb->links.link_name
        ", $first_char); 
        if ($links) {
            foreach ( $links as $link ) 
            {   
                ?>
                <p>
                    <a href="<?php echo $link->link_url; ?>" rel="bookmark" title="Permanent Link to <?php echo $link->link_name; ?>">
                        <?php echo $link->link_name; ?>
                    </a>
                </p>
                <?php
            }
        }

以及我如何使其仅显示特定类别。任何帮助都非常感谢!谢谢

这不是$wpdb->get_results()的正确用法。根据Wordpress Codex,get_results的第二个参数是四个预定义常量之一,即:

  • 对象 - 结果将输出为行对象的数字索引数组。
  • OBJECT_K - 结果将输出为行对象的关联数组,使用第一列的值作为键(重复项将被丢弃)。
  • ARRAY_A - 结果将输出为关联数组的数字索引数组,使用列名作为键。
  • ARRAY_N - 结果将输出为数字索引数组的数字索引数组。

换句话说,"b"不是有效值。基于此文档(我对Wordpress不是很熟悉),似乎OBJECT_K适合您的情况。您可以将SELECT *更改为SELECT link_name,*,虽然从数据库优化/性能的角度来看效率低下,但会将检索到的第一列设置为 link_name。如果我没看错的话,这将自动为您按字母顺序排列。但是,您可能也可以完全放弃第二个参数,它会起作用。

    $first_char = 'b';            
    $category_id = 3; // get only category with id 3, for example
    $links = $wpdb->get_results("
    SELECT      *
    FROM        $wpdb->links
    WHERE       SUBSTR($wpdb->links.link_name,1,1) = $first_char
    AND WHERE   $wpdb->links.link_category = $category_id
    ORDER BY    $wpdb->links.link_name
    "); 
    if ($links) {
        foreach ( $links as $link ) 
        {   
            ?>
            <p>
                <a href="<?php echo $link->link_url; ?>" rel="bookmark" title="Permanent Link to <?php echo $link->link_name; ?>">
                    <?php echo $link->link_name; ?>
                </a>
            </p>
            <?php
        }
    }