初始列表自定义查询自定义帖子类型

时间:2017-02-13 21:14:57

标签: php wordpress

我要做的是按标题的首字母列出自定义帖子类型。我尝试了一些代码示例,但我似乎无法让它完全按照我想要的方式运行。以下是我尝试和操作过的一些代码无效。

 <div class="col-md-6"><!-- #### COLUMN #### -->

                <!-- ############################################## -->
                <!-- ############### PAGE TITLE T ################# -->
                <!-- ############################################## -->

                <p class="f_header">PAGE TITLE T</p>

                <?php

                $args = array(

                    'post_type'             => 'movies',
                    'ignore_sticky_posts'   => TRUE,
                    'substring_where'       => 'T',

                    );

                    function restrict_by_first_letter( $where, $qry ) {
                      global $wpdb;
                      $sub = $qry->get('substring_where');
                      if (!empty($sub)) {
                        $where .= $wpdb->prepare(
                          " AND SUBSTRING( {$wpdb->movies}.movies_title, 1, 1 ) = %s ",
                          $sub
                        );
                      }
                      return $where;
                    }
                    add_filter( 'movies_where' , 'restrict_by_first_letter', 1 , 2 );

                    $results = new WP_Query( $args );

                ?>

                <table width="100%"><!-- #### TABLE #### -->

                    <?php

                        var_dump($results->request);

                        var_dump(wp_list_pluck($results->movies,'movies_title'));

                    ?>

                    <tr style="border-bottom: thin solid #111;">

                        <td class="movie_genre">    

                            <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>

                        </td>

                    </tr>

                </table><!-- #### / TABLE #### -->

                <?php wp_reset_postdata(); ?>

            </div><!-- #### / COLUMN #### -->

1 个答案:

答案 0 :(得分:0)

我认为您应该使用posts_where过滤器而不是您指定的movies_where。它看起来像是在调用不存在的数据库数据。您需要在post_title表格中调用$wpdb->posts

我会尝试更新你的代码:

function restrict_by_first_letter( $where, $qry ) {
    global $wpdb;
    $sub = $qry->get('substring_where');
    if (!empty($sub)) {
        $where .= $wpdb->prepare(
        " AND SUBSTRING( {$wpdb->posts}.post_title, 1, 1 ) = %s ", $sub
        );
    }
    return $where;
}
add_filter( 'posts_where' , 'restrict_by_first_letter', 1 , 2 );

我还会将此代码(我复制到此答案中的代码部分)移至functions.php