最合适的回答,由SO网友:Dan. 整理而成
假设字母是链接,然后将字母作为参数放入URL中。E、 g.:
http://example.com/brands/?letter=N
然后,在代码中(在此处使用的模板文件中),您需要查询DB中以“N”开头的帖子/品牌。
您可以为letters
(https://codex.wordpress.org/Function_Reference/register_taxonomy) 并将每个帖子分配给letter
(其中分类法的术语都是字母“”),然后使用以下其中一种:
有几种方法:
1-WP_Query
2-get_posts()
..其他几种方法。
以下是您如何使用WP_Query
:
$args = array(
\'post_type\' = \'brands\', //assuming the post type slug is \'brands\'
\'posts_per_page\' = -1,
\'tax_query\' => array(
array(
\'taxonomy\' => \'letters\',
\'field\' => \'slug\',
\'terms\' => \'N\', // sanitize_text_field($_GET[\'letter\'])
),
),
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
the_title();
}
/* Restore original Post Data */
wp_reset_postdata();
} else {
echo \'no brands beginning with N;
}
或者,不必为字母创建分类法,您可以这样做(一个更自定义的查询,使用
$wpdb
):
global $wpdb;
$request = sanitize_text_field($_GET[\'letter\']);
$results = $wpdb->get_results(
"
SELECT * FROM $wpdb->posts
WHERE post_title LIKE \'$request%\'
AND post_type = \'brands\'
AND post_status = \'publish\';
"
);
if ( $results )
{
foreach ( $results as $post )
{
setup_postdata ( $post );
the_title();
}
}
else
{
echo \'no brands beginning with \'N\';
}
更多关于
$wpdb
-
https://codex.wordpress.org/Class_Reference/wpdb更多关于WP_Query
- https://codex.wordpress.org/Class_Reference/WP_Query