WordPress.org

Plugin Directory

Ticket #1438: co-author-plus.php.diff

File co-author-plus.php.diff, 4.0 KB (added by kingkool68, 2 years ago)

Added a filter on the wp_get_object_terms hook to return authors in ther term_order not alphabetical.

  • co-authors-plus/co-authors-plus.php

     
    8686                // Action to set users when a post is saved 
    8787                add_action( 'save_post', array( $this, 'coauthors_update_post' ), 10, 2 ); 
    8888                // Filter to set the post_author field when wp_insert_post is called 
    89                 add_filter( 'wp_insert_post_data', array( $this, 'coauthors_set_post_author_field' ) ); 
     89                add_filter( 'wp_insert_post_data', array( $this, 'coauthors_set_post_author_field' ), 10, 2 ); 
     90                // Filter to ensure authors are retrieved basedo n their term order when a post is saved in bulk-edit mode. 
     91                add_filter( 'wp_get_object_terms', array( $this, 'coauthors_stop_bulk_edit' ), 10, 4 ); 
    9092                 
    9193                // Action to reassign posts when a user is deleted 
    9294                add_action( 'delete_user',  array( $this, 'delete_user_action' ) ); 
     
    323325                        $count = 1; 
    324326                        foreach( $authors as $author ) : 
    325327                                ?> 
    326                                 <a href="edit.php?author=<?php echo $author->ID; ?>"><?php echo $author->display_name ?></a><?php echo ( $count < count( $authors ) ) ? ',' : ''; ?> 
     328                                <a href="<?php echo esc_url( get_admin_url( null, 'edit.php?author=' . $author->ID ) ); ?>"><?php echo esc_html( $author->display_name ); ?></a><?php echo ( $count < count( $authors ) ) ? ',' : ''; ?> 
    327329                                <?php 
    328330                                $count++; 
    329331                        endforeach; 
     
    385387        /** 
    386388         * Filters post data before saving to db to set post_author 
    387389         */ 
    388         function coauthors_set_post_author_field( $data ) { 
     390        function coauthors_set_post_author_field( $data, $postarr ) { 
    389391                 
    390392                // Bail on autosave 
    391393                if ( defined( 'DOING_AUTOSAVE' ) && !DOING_AUTOSAVE ) 
     
    396398                        return $data; 
    397399                 
    398400                if( isset( $_REQUEST['coauthors-nonce'] ) && is_array( $_POST['coauthors'] ) ) { 
    399                         $author = $_POST['coauthors'][0]; 
     401                        $author = sanitize_key( $_POST['coauthors'][0] ); 
    400402                        if( $author ) { 
    401403                                $author_data = get_user_by( 'login', $author ); 
    402404                                $data['post_author'] = $author_data->ID; 
     
    409411                        } 
    410412                } 
    411413                 
     414                global $postarr; 
     415                unset($postarr['tax_input']['author']); 
     416                 
    412417                return $data; 
    413418        } 
    414419         
     
    420425        function coauthors_update_post( $post_id, $post ) { 
    421426                $post_type = $post->post_type; 
    422427                 
    423                 if ( defined( 'DOING_AUTOSAVE' ) && !DOING_AUTOSAVE || $_REQUEST['bulk_edit']) 
     428                if ( defined( 'DOING_AUTOSAVE' ) && !DOING_AUTOSAVE ) 
    424429                        return; 
    425430                         
    426431                if( isset( $_POST['coauthors-nonce'] ) && isset( $_POST['coauthors'] ) ) { 
     
    428433                         
    429434                        if( $this->current_user_can_set_authors() ){ 
    430435                                $coauthors = (array) $_POST['coauthors']; 
    431                                 $coauthors = array_map( 'esc_html', $coauthors ); 
     436                                $coauthors = array_map( 'sanitize_key', $coauthors ); 
    432437                                return $this->add_coauthors( $post_id, $coauthors ); 
    433438                        } 
    434439                } 
    435440        } 
    436441         
    437442        /** 
     443         * Saving a post in Bulk Edit mode flushes the order of the co-authors without this filter.  
     444         */ 
     445        function coauthors_stop_bulk_edit( $terms, $object_ids, $taxonomies, $args ) { 
     446                if( $_REQUEST['bulk_edit'] && $taxonomies == "'author'" ) { 
     447                        global $wpdb; 
     448                        $orderby = 'ORDER BY tr.term_order'; 
     449                        $order = 'ASC'; 
     450                        $query = "SELECT t.slug, t.term_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tr.object_id IN ($object_ids) $orderby $order"; 
     451                        $raw_coauthors = $wpdb->get_results($query); 
     452                        $terms = array(); 
     453                        foreach( $raw_coauthors as $author ) { 
     454                                $terms[] = (int) $author->term_id; 
     455                        } 
     456                } 
     457                 
     458                return $terms; 
     459        } 
     460         
     461        /** 
    438462         * Add a user as coauthor for a post 
    439463         */ 
    440464        function add_coauthors( $post_id, $coauthors, $append = false ) { 
     
    574598                if( ! $this->current_user_can_set_authors() ) 
    575599                        die(); 
    576600                 
    577                 $search = esc_html( strtolower( $_REQUEST['q'] ) ); 
     601                $search = sanitize_text_field( strtolower( $_REQUEST['q'] ) ); 
    578602                 
    579603                $authors = $this->search_authors( $search ); 
    580604