1 回答
TA贡献2019条经验 获得超9个赞
如果我正确理解了问题,这里是您的代码的稍微优化的版本。为了清楚起见,我冒昧地尽可能地将你的 php 和 html 解耦。
它没有经过测试,可能需要一些调整,但总的来说我希望这能成功!
在您的functions.php文件中,添加以下内容,这将允许您按首字母过滤数据库查询:
add_filter( 'posts_where', 'tomtom_posts_where', 10, 2 );
function tomtom_posts_where( $args, $wp_query_obj )
{
global $wpdb;
$starts_with = $wp_query->get( 'starts_with' )
if ( $starts_with ) {
$args .= ' AND ' . $wpdb->posts . '.post_title LIKE \'' . esc_sql( $wpdb->esc_like( $starts_with ) ) . '%\'';
}
return $where;
}
然后:
<?php
/**
* Outputs an alphabetic paginator.
*
* @return void
*/
function tomtom_output_alphabetic_paginator() {
$posts = get_posts( array(
'numberposts' => -1,
'post_type' => 'exposant',
'orderby' => 'title',
'order' => 'ASC',
) );
$firstLetters = array();
foreach ( $posts as $post ) {
$title = $post->post_title;
$startingLetter = substr( $title, 0, 1 );
$dupeFirstLetters[] = $startingLetter;
}
$firstLetters = array_unique( $dupeFirstLetters );
sort( $firstLetters );
echo "<a href=\"/exposants/#exposants\">" . __('Tout', 'festival') . "</a>";
foreach ( $firstLetters as $letter ) {
echo "<a href=\"?lettre={$letter}\">{$letter}</a>";
}
}
/**
* Gets an array of exposant custom post types.
*
* @return array
*/
function tomtom_get_exposants() {
$args = array(
'posts_per_page' => -1,
'post_type' => 'exposant',
'orderby' => 'title',
'order' => 'ASC',
);
if ( ! empty( $_GET['lettre'] ) ) {
$args['starts_with'] = $_GET['lettre'];
}
return new WP_Query( $args );
}
/**
* Adds fields to an exposant custom post type object.
*
* @param WP_Post $exposant Exposant custom post type.
* @return void
*/
function tomtom_hydrate_exposant( &$exposant ) {
$exposant->logo = get_field( 'logo', $exposant->ID );
$exposant->related = get_field( 'pieces_liees', $exposant->ID );
$exposant->description = get_field( 'description', $exposant->ID );
}
/**
* Outputs links related to exposant custom post type object.
*
* @return void
*/
function tomtom_output_related( $exposant ) {
if ( ! isset( $exposant->related ) ) {
tomtom_hydrate_exposant( $exposant );
}
foreach ( $exposant->related as $k => $category ) {
if ( $k ) {
echo '/';
}
echo "<a href=\"" . get_the_permalink( $category ) . "\">" . get_the_title( $category ) . "</a>";
}
}
?>
<div class="exposant__filter" id="exposants">
<?php tomtom_output_alphabetic_paginator(); ?>
</div>
<?php $exposantsArchive = tomtom_get_exposants(); ?>
<div class="row row--2col u-m-top--8">
<?php foreach ( $exposantsArchive as $exposant ): ?>
<?php tomtom_hydrate_exposant( $exposant ); ?>
<div class="exposant__thumb col--padding-right">
<div class="exposant__logo">
<img src="<?php echo $exposant->logo['url'] ?>" alt="<?php echo $exposant->logo['alt'] ?>">
</div>
<div class="exposant__thumb-content">
<h2 class="heading--as-h4 heading--no-margin"><?php echo $exposant->post_title; ?></h2>
<?php if ( $exposant->related ): ?>
<p class="exposant__categories">
<?php tomtom_output_related( $exposant->related ); ?>
</p>
<?php endif; ?>
<p class="exposant-thumb__excerpt"><?php echo wp_trim_words( $exposant->description, 16, '...' ); ?></p>
<a href="<?php get_permalink( $exposant->ID ); ?>" class="btn"><?php _e( 'Plus de détails', 'festival' ); ?></a>
</div>
</div>
<?php endforeach; ?>
</div>
- 1 回答
- 0 关注
- 104 浏览
添加回答
举报