我创建了一个自定义的帖子类型的歌曲,其中包含所有歌曲,现在我想根据字母排序它,我已经使用了它
function alphaindex_save_alpha( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
$slug = 'songs';
$letter = '';
if ( isset( $_POST['post_type'] ) && ( $slug != $_POST['post_type'] ) )
return;
if ( !current_user_can( 'edit_post', $post_id ) )
return;
$taxonomy = 'alpha';
if ( isset( $_POST['post_type'] ) ) {
$title = strtolower( $_POST['post_title'] );
// Get the first letter of the title
$letter = substr( $title, 0, 1 );
}
//set term as first letter of post title, lower case
wp_set_post_terms( $post_id, $letter, $taxonomy );
}
add_action( 'save_post', 'alphaindex_save_alpha' );
现在这创建了一个分类法alpha,它根据例如第一个字母来映射每首歌曲。阿黛尔被映射到A等等。
我已经在我的单词印刷网站上放了2000首歌曲之后创建了这个字母索引,现在为了将歌曲映射到分类法,我必须单独转到每个帖子页面并更新帖子然后才会出现。
但是,执行此操作是一项非常繁琐的任务,并且需要一个可以从functions.php
文件自动执行的代码。
答案 0 :(得分:0)
我建议您使用posts_where
过滤器,而不要使用分类法。您无需向数据库中添加任何额外的数据即可完成此操作。
add_filter('posts_where', 'starts_with_filter');
function starts_with_filter($sql){
if ( ! $query->is_main_query() || ! isset(get_query_var('starts_with')) {
return $query;
}
global $wpdb;
$startswith = substr ( get_query_var( 'starts_with' ), 0, 1);
$sql .= $wpdb->prepare( " AND $wpdb->posts.post_title LIKE %s ", $startswith.'%' );
return $sql;
}