在WordPress中自动批量更新自定义帖子类型

时间:2017-01-09 17:26:15

标签: php wordpress taxonomy

我创建了一个自定义的帖子类型的歌曲,其中包含所有歌曲,现在我想根据字母排序它,我已经使用了它

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文件自动执行的代码。

1 个答案:

答案 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;
}