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