1 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果我正確理解了問題,這里是您的代碼的稍微優(yōu)化的版本。為了清楚起見,我冒昧地盡可能地將你的 php 和 html 解耦。
它沒有經(jīng)過測(cè)試,可能需要一些調(diào)整,但總的來說我希望這能成功!
在您的functions.php文件中,添加以下內(nèi)容,這將允許您按首字母過濾數(shù)據(jù)庫查詢:
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 關(guān)注
- 159 瀏覽
添加回答
舉報(bào)