~canonical-sysadmins/wordpress/5.1

« back to all changes in this revision

Viewing changes to wp-includes/link-template.php

  • Committer: Barry Price
  • Date: 2019-02-22 03:51:26 UTC
  • mfrom: (1.2.12 upstream)
  • Revision ID: barry.price@canonical.com-20190222035126-o28k38qs8jfyjsxt
Merge WP5.1 from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
 *                            for use in the filter. Default empty string.
45
45
 * @return string The URL with the trailing slash appended or stripped.
46
46
 */
47
 
function user_trailingslashit($string, $type_of_url = '') {
 
47
function user_trailingslashit( $string, $type_of_url = '' ) {
48
48
        global $wp_rewrite;
49
 
        if ( $wp_rewrite->use_trailing_slashes )
50
 
                $string = trailingslashit($string);
51
 
        else
52
 
                $string = untrailingslashit($string);
 
49
        if ( $wp_rewrite->use_trailing_slashes ) {
 
50
                $string = trailingslashit( $string );
 
51
        } else {
 
52
                $string = untrailingslashit( $string );
 
53
        }
53
54
 
54
55
        /**
55
56
         * Filters the trailing-slashed string, depending on whether the site is set to use trailing slashes.
79
80
        switch ( strtolower( $mode ) ) {
80
81
                case 'title':
81
82
                        $title = sanitize_title( $post->post_title ) . '-' . $post->ID;
82
 
                        echo '<a id="'.$title.'"></a>';
 
83
                        echo '<a id="' . $title . '"></a>';
83
84
                        break;
84
85
                case 'id':
85
86
                default:
123
124
                '%hour%',
124
125
                '%minute%',
125
126
                '%second%',
126
 
                $leavename? '' : '%postname%',
 
127
                $leavename ? '' : '%postname%',
127
128
                '%post_id%',
128
129
                '%category%',
129
130
                '%author%',
130
 
                $leavename? '' : '%pagename%',
 
131
                $leavename ? '' : '%pagename%',
131
132
        );
132
133
 
133
134
        if ( is_object( $post ) && isset( $post->filter ) && 'sample' == $post->filter ) {
134
135
                $sample = true;
135
136
        } else {
136
 
                $post = get_post( $post );
 
137
                $post   = get_post( $post );
137
138
                $sample = false;
138
139
        }
139
140
 
140
 
        if ( empty($post->ID) )
 
141
        if ( empty( $post->ID ) ) {
141
142
                return false;
 
143
        }
142
144
 
143
 
        if ( $post->post_type == 'page' )
144
 
                return get_page_link($post, $leavename, $sample);
145
 
        elseif ( $post->post_type == 'attachment' )
 
145
        if ( $post->post_type == 'page' ) {
 
146
                return get_page_link( $post, $leavename, $sample );
 
147
        } elseif ( $post->post_type == 'attachment' ) {
146
148
                return get_attachment_link( $post, $leavename );
147
 
        elseif ( in_array($post->post_type, get_post_types( array('_builtin' => false) ) ) )
148
 
                return get_post_permalink($post, $leavename, $sample);
 
149
        } elseif ( in_array( $post->post_type, get_post_types( array( '_builtin' => false ) ) ) ) {
 
150
                return get_post_permalink( $post, $leavename, $sample );
 
151
        }
149
152
 
150
 
        $permalink = get_option('permalink_structure');
 
153
        $permalink = get_option( 'permalink_structure' );
151
154
 
152
155
        /**
153
156
         * Filters the permalink structure for a post before token replacement occurs.
162
165
         */
163
166
        $permalink = apply_filters( 'pre_post_link', $permalink, $post, $leavename );
164
167
 
165
 
        if ( '' != $permalink && !in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft', 'future' ) ) ) {
166
 
                $unixtime = strtotime($post->post_date);
 
168
        if ( '' != $permalink && ! in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft', 'future' ) ) ) {
 
169
                $unixtime = strtotime( $post->post_date );
167
170
 
168
171
                $category = '';
169
 
                if ( strpos($permalink, '%category%') !== false ) {
170
 
                        $cats = get_the_category($post->ID);
 
172
                if ( strpos( $permalink, '%category%' ) !== false ) {
 
173
                        $cats = get_the_category( $post->ID );
171
174
                        if ( $cats ) {
172
 
                                $cats = wp_list_sort( $cats, array(
173
 
                                        'term_id' => 'ASC',
174
 
                                ) );
 
175
                                $cats = wp_list_sort(
 
176
                                        $cats,
 
177
                                        array(
 
178
                                                'term_id' => 'ASC',
 
179
                                        )
 
180
                                );
175
181
 
176
182
                                /**
177
183
                                 * Filters the category that gets used in the %category% permalink token.
185
191
                                $category_object = apply_filters( 'post_link_category', $cats[0], $cats, $post );
186
192
 
187
193
                                $category_object = get_term( $category_object, 'category' );
188
 
                                $category = $category_object->slug;
189
 
                                if ( $parent = $category_object->parent )
190
 
                                        $category = get_category_parents($parent, false, '/', true) . $category;
 
194
                                $category        = $category_object->slug;
 
195
                                if ( $category_object->parent ) {
 
196
                                        $category = get_category_parents( $category_object->parent, false, '/', true ) . $category;
 
197
                                }
191
198
                        }
192
199
                        // show default category in permalinks, without
193
200
                        // having to assign it explicitly
194
 
                        if ( empty($category) ) {
 
201
                        if ( empty( $category ) ) {
195
202
                                $default_category = get_term( get_option( 'default_category' ), 'category' );
196
203
                                if ( $default_category && ! is_wp_error( $default_category ) ) {
197
204
                                        $category = $default_category->slug;
200
207
                }
201
208
 
202
209
                $author = '';
203
 
                if ( strpos($permalink, '%author%') !== false ) {
204
 
                        $authordata = get_userdata($post->post_author);
205
 
                        $author = $authordata->user_nicename;
 
210
                if ( strpos( $permalink, '%author%' ) !== false ) {
 
211
                        $authordata = get_userdata( $post->post_author );
 
212
                        $author     = $authordata->user_nicename;
206
213
                }
207
214
 
208
 
                $date = explode(" ",date('Y m d H i s', $unixtime));
 
215
                $date           = explode( ' ', date( 'Y m d H i s', $unixtime ) );
209
216
                $rewritereplace =
210
217
                array(
211
218
                        $date[0],
220
227
                        $author,
221
228
                        $post->post_name,
222
229
                );
223
 
                $permalink = home_url( str_replace($rewritecode, $rewritereplace, $permalink) );
224
 
                $permalink = user_trailingslashit($permalink, 'single');
 
230
                $permalink      = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) );
 
231
                $permalink      = user_trailingslashit( $permalink, 'single' );
225
232
        } else { // if they're not using the fancy permalink option
226
 
                $permalink = home_url('?p=' . $post->ID);
 
233
                $permalink = home_url( '?p=' . $post->ID );
227
234
        }
228
235
 
229
236
        /**
255
262
function get_post_permalink( $id = 0, $leavename = false, $sample = false ) {
256
263
        global $wp_rewrite;
257
264
 
258
 
        $post = get_post($id);
 
265
        $post = get_post( $id );
259
266
 
260
 
        if ( is_wp_error( $post ) )
 
267
        if ( is_wp_error( $post ) ) {
261
268
                return $post;
 
269
        }
262
270
 
263
 
        $post_link = $wp_rewrite->get_extra_permastruct($post->post_type);
 
271
        $post_link = $wp_rewrite->get_extra_permastruct( $post->post_type );
264
272
 
265
273
        $slug = $post->post_name;
266
274
 
267
275
        $draft_or_pending = get_post_status( $post ) && in_array( get_post_status( $post ), array( 'draft', 'pending', 'auto-draft', 'future' ) );
268
276
 
269
 
        $post_type = get_post_type_object($post->post_type);
 
277
        $post_type = get_post_type_object( $post->post_type );
270
278
 
271
279
        if ( $post_type->hierarchical ) {
272
280
                $slug = get_page_uri( $post );
273
281
        }
274
282
 
275
 
        if ( !empty($post_link) && ( !$draft_or_pending || $sample ) ) {
 
283
        if ( ! empty( $post_link ) && ( ! $draft_or_pending || $sample ) ) {
276
284
                if ( ! $leavename ) {
277
 
                        $post_link = str_replace("%$post->post_type%", $slug, $post_link);
 
285
                        $post_link = str_replace( "%$post->post_type%", $slug, $post_link );
278
286
                }
279
 
                $post_link = home_url( user_trailingslashit($post_link) );
 
287
                $post_link = home_url( user_trailingslashit( $post_link ) );
280
288
        } else {
281
 
                if ( $post_type->query_var && ( isset($post->post_status) && !$draft_or_pending ) )
282
 
                        $post_link = add_query_arg($post_type->query_var, $slug, '');
283
 
                else
284
 
                        $post_link = add_query_arg(array('post_type' => $post->post_type, 'p' => $post->ID), '');
285
 
                $post_link = home_url($post_link);
 
289
                if ( $post_type->query_var && ( isset( $post->post_status ) && ! $draft_or_pending ) ) {
 
290
                        $post_link = add_query_arg( $post_type->query_var, $slug, '' );
 
291
                } else {
 
292
                        $post_link = add_query_arg(
 
293
                                array(
 
294
                                        'post_type' => $post->post_type,
 
295
                                        'p'         => $post->ID,
 
296
                                ),
 
297
                                ''
 
298
                        );
 
299
                }
 
300
                $post_link = home_url( $post_link );
286
301
        }
287
302
 
288
303
        /**
314
329
function get_page_link( $post = false, $leavename = false, $sample = false ) {
315
330
        $post = get_post( $post );
316
331
 
317
 
        if ( 'page' == get_option( 'show_on_front' ) && $post->ID == get_option( 'page_on_front' ) )
318
 
                $link = home_url('/');
319
 
        else
 
332
        if ( 'page' == get_option( 'show_on_front' ) && $post->ID == get_option( 'page_on_front' ) ) {
 
333
                $link = home_url( '/' );
 
334
        } else {
320
335
                $link = _get_page_link( $post, $leavename, $sample );
 
336
        }
321
337
 
322
338
        /**
323
339
         * Filters the permalink for a page.
356
372
 
357
373
        $link = $wp_rewrite->get_page_permastruct();
358
374
 
359
 
        if ( !empty($link) && ( ( isset($post->post_status) && !$draft_or_pending ) || $sample ) ) {
 
375
        if ( ! empty( $link ) && ( ( isset( $post->post_status ) && ! $draft_or_pending ) || $sample ) ) {
360
376
                if ( ! $leavename ) {
361
 
                        $link = str_replace('%pagename%', get_page_uri( $post ), $link);
 
377
                        $link = str_replace( '%pagename%', get_page_uri( $post ), $link );
362
378
                }
363
379
 
364
 
                $link = home_url($link);
365
 
                $link = user_trailingslashit($link, 'page');
 
380
                $link = home_url( $link );
 
381
                $link = user_trailingslashit( $link, 'page' );
366
382
        } else {
367
383
                $link = home_url( '?page_id=' . $post->ID );
368
384
        }
396
412
 
397
413
        $link = false;
398
414
 
399
 
        $post = get_post( $post );
 
415
        $post   = get_post( $post );
400
416
        $parent = ( $post->post_parent > 0 && $post->post_parent != $post->ID ) ? get_post( $post->post_parent ) : false;
401
417
        if ( $parent && ! in_array( $parent->post_type, get_post_types() ) ) {
402
418
                $parent = false;
403
419
        }
404
420
 
405
421
        if ( $wp_rewrite->using_permalinks() && $parent ) {
406
 
                if ( 'page' == $parent->post_type )
 
422
                if ( 'page' == $parent->post_type ) {
407
423
                        $parentlink = _get_page_link( $post->post_parent ); // Ignores page_on_front
408
 
                else
 
424
                } else {
409
425
                        $parentlink = get_permalink( $post->post_parent );
 
426
                }
410
427
 
411
 
                if ( is_numeric($post->post_name) || false !== strpos(get_option('permalink_structure'), '%category%') )
 
428
                if ( is_numeric( $post->post_name ) || false !== strpos( get_option( 'permalink_structure' ), '%category%' ) ) {
412
429
                        $name = 'attachment/' . $post->post_name; // <permalink>/<int>/ is paged so we use the explicit attachment marker
413
 
                else
 
430
                } else {
414
431
                        $name = $post->post_name;
415
 
 
416
 
                if ( strpos($parentlink, '?') === false )
417
 
                        $link = user_trailingslashit( trailingslashit($parentlink) . '%postname%' );
418
 
 
419
 
                if ( ! $leavename )
 
432
                }
 
433
 
 
434
                if ( strpos( $parentlink, '?' ) === false ) {
 
435
                        $link = user_trailingslashit( trailingslashit( $parentlink ) . '%postname%' );
 
436
                }
 
437
 
 
438
                if ( ! $leavename ) {
420
439
                        $link = str_replace( '%postname%', $name, $link );
 
440
                }
421
441
        } elseif ( $wp_rewrite->using_permalinks() && ! $leavename ) {
422
442
                $link = home_url( user_trailingslashit( $post->post_name ) );
423
443
        }
424
444
 
425
 
        if ( ! $link )
 
445
        if ( ! $link ) {
426
446
                $link = home_url( '/?attachment_id=' . $post->ID );
 
447
        }
427
448
 
428
449
        /**
429
450
         * Filters the permalink for an attachment.
448
469
 */
449
470
function get_year_link( $year ) {
450
471
        global $wp_rewrite;
451
 
        if ( !$year )
452
 
                $year = gmdate('Y', current_time('timestamp'));
 
472
        if ( ! $year ) {
 
473
                $year = gmdate( 'Y', current_time( 'timestamp' ) );
 
474
        }
453
475
        $yearlink = $wp_rewrite->get_year_permastruct();
454
 
        if ( !empty($yearlink) ) {
455
 
                $yearlink = str_replace('%year%', $year, $yearlink);
 
476
        if ( ! empty( $yearlink ) ) {
 
477
                $yearlink = str_replace( '%year%', $year, $yearlink );
456
478
                $yearlink = home_url( user_trailingslashit( $yearlink, 'year' ) );
457
479
        } else {
458
480
                $yearlink = home_url( '?m=' . $year );
480
502
 * @param bool|int $month False for current month. Integer of month.
481
503
 * @return string The permalink for the specified month and year archive.
482
504
 */
483
 
function get_month_link($year, $month) {
 
505
function get_month_link( $year, $month ) {
484
506
        global $wp_rewrite;
485
 
        if ( !$year )
486
 
                $year = gmdate('Y', current_time('timestamp'));
487
 
        if ( !$month )
488
 
                $month = gmdate('m', current_time('timestamp'));
 
507
        if ( ! $year ) {
 
508
                $year = gmdate( 'Y', current_time( 'timestamp' ) );
 
509
        }
 
510
        if ( ! $month ) {
 
511
                $month = gmdate( 'm', current_time( 'timestamp' ) );
 
512
        }
489
513
        $monthlink = $wp_rewrite->get_month_permastruct();
490
 
        if ( !empty($monthlink) ) {
491
 
                $monthlink = str_replace('%year%', $year, $monthlink);
492
 
                $monthlink = str_replace('%monthnum%', zeroise(intval($month), 2), $monthlink);
 
514
        if ( ! empty( $monthlink ) ) {
 
515
                $monthlink = str_replace( '%year%', $year, $monthlink );
 
516
                $monthlink = str_replace( '%monthnum%', zeroise( intval( $month ), 2 ), $monthlink );
493
517
                $monthlink = home_url( user_trailingslashit( $monthlink, 'month' ) );
494
518
        } else {
495
519
                $monthlink = home_url( '?m=' . $year . zeroise( $month, 2 ) );
519
543
 * @param bool|int $day   False for current day. Integer of day.
520
544
 * @return string The permalink for the specified day, month, and year archive.
521
545
 */
522
 
function get_day_link($year, $month, $day) {
 
546
function get_day_link( $year, $month, $day ) {
523
547
        global $wp_rewrite;
524
 
        if ( !$year )
525
 
                $year = gmdate('Y', current_time('timestamp'));
526
 
        if ( !$month )
527
 
                $month = gmdate('m', current_time('timestamp'));
528
 
        if ( !$day )
529
 
                $day = gmdate('j', current_time('timestamp'));
 
548
        if ( ! $year ) {
 
549
                $year = gmdate( 'Y', current_time( 'timestamp' ) );
 
550
        }
 
551
        if ( ! $month ) {
 
552
                $month = gmdate( 'm', current_time( 'timestamp' ) );
 
553
        }
 
554
        if ( ! $day ) {
 
555
                $day = gmdate( 'j', current_time( 'timestamp' ) );
 
556
        }
530
557
 
531
558
        $daylink = $wp_rewrite->get_day_permastruct();
532
 
        if ( !empty($daylink) ) {
533
 
                $daylink = str_replace('%year%', $year, $daylink);
534
 
                $daylink = str_replace('%monthnum%', zeroise(intval($month), 2), $daylink);
535
 
                $daylink = str_replace('%day%', zeroise(intval($day), 2), $daylink);
 
559
        if ( ! empty( $daylink ) ) {
 
560
                $daylink = str_replace( '%year%', $year, $daylink );
 
561
                $daylink = str_replace( '%monthnum%', zeroise( intval( $month ), 2 ), $daylink );
 
562
                $daylink = str_replace( '%day%', zeroise( intval( $day ), 2 ), $daylink );
536
563
                $daylink = home_url( user_trailingslashit( $daylink, 'day' ) );
537
564
        } else {
538
565
                $daylink = home_url( '?m=' . $year . zeroise( $month, 2 ) . zeroise( $day, 2 ) );
589
616
 
590
617
        $permalink = $wp_rewrite->get_feed_permastruct();
591
618
        if ( '' != $permalink ) {
592
 
                if ( false !== strpos($feed, 'comments_') ) {
593
 
                        $feed = str_replace('comments_', '', $feed);
 
619
                if ( false !== strpos( $feed, 'comments_' ) ) {
 
620
                        $feed      = str_replace( 'comments_', '', $feed );
594
621
                        $permalink = $wp_rewrite->get_comment_feed_permastruct();
595
622
                }
596
623
 
597
 
                if ( get_default_feed() == $feed )
 
624
                if ( get_default_feed() == $feed ) {
598
625
                        $feed = '';
 
626
                }
599
627
 
600
 
                $permalink = str_replace('%feed%', $feed, $permalink);
601
 
                $permalink = preg_replace('#/+#', '/', "/$permalink");
602
 
                $output =  home_url( user_trailingslashit($permalink, 'feed') );
 
628
                $permalink = str_replace( '%feed%', $feed, $permalink );
 
629
                $permalink = preg_replace( '#/+#', '/', "/$permalink" );
 
630
                $output    = home_url( user_trailingslashit( $permalink, 'feed' ) );
603
631
        } else {
604
 
                if ( empty($feed) )
 
632
                if ( empty( $feed ) ) {
605
633
                        $feed = get_default_feed();
606
 
 
607
 
                if ( false !== strpos($feed, 'comments_') )
608
 
                        $feed = str_replace('comments_', 'comments-', $feed);
609
 
 
610
 
                $output = home_url("?feed={$feed}");
 
634
                }
 
635
 
 
636
                if ( false !== strpos( $feed, 'comments_' ) ) {
 
637
                        $feed = str_replace( 'comments_', 'comments-', $feed );
 
638
                }
 
639
 
 
640
                $output = home_url( "?feed={$feed}" );
611
641
        }
612
642
 
613
643
        /**
633
663
function get_post_comments_feed_link( $post_id = 0, $feed = '' ) {
634
664
        $post_id = absint( $post_id );
635
665
 
636
 
        if ( ! $post_id )
 
666
        if ( ! $post_id ) {
637
667
                $post_id = get_the_ID();
 
668
        }
638
669
 
639
 
        if ( empty( $feed ) )
 
670
        if ( empty( $feed ) ) {
640
671
                $feed = get_default_feed();
 
672
        }
641
673
 
642
 
        $post = get_post( $post_id );
 
674
        $post       = get_post( $post_id );
643
675
        $unattached = 'attachment' === $post->post_type && 0 === (int) $post->post_parent;
644
676
 
645
 
        if ( '' != get_option('permalink_structure') ) {
646
 
                if ( 'page' == get_option('show_on_front') && $post_id == get_option('page_on_front') )
 
677
        if ( '' != get_option( 'permalink_structure' ) ) {
 
678
                if ( 'page' == get_option( 'show_on_front' ) && $post_id == get_option( 'page_on_front' ) ) {
647
679
                        $url = _get_page_link( $post_id );
648
 
                else
649
 
                        $url = get_permalink($post_id);
 
680
                } else {
 
681
                        $url = get_permalink( $post_id );
 
682
                }
650
683
 
651
684
                if ( $unattached ) {
652
 
                        $url =  home_url( '/feed/' );
 
685
                        $url = home_url( '/feed/' );
653
686
                        if ( $feed !== get_default_feed() ) {
654
687
                                $url .= "$feed/";
655
688
                        }
656
689
                        $url = add_query_arg( 'attachment_id', $post_id, $url );
657
690
                } else {
658
 
                        $url = trailingslashit($url) . 'feed';
659
 
                        if ( $feed != get_default_feed() )
 
691
                        $url = trailingslashit( $url ) . 'feed';
 
692
                        if ( $feed != get_default_feed() ) {
660
693
                                $url .= "/$feed";
661
 
                        $url = user_trailingslashit($url, 'single_feed');
 
694
                        }
 
695
                        $url = user_trailingslashit( $url, 'single_feed' );
662
696
                }
663
697
        } else {
664
698
                if ( $unattached ) {
665
 
                        $url = add_query_arg( array( 'feed' => $feed, 'attachment_id' => $post_id ), home_url( '/' ) );
 
699
                        $url = add_query_arg(
 
700
                                array(
 
701
                                        'feed'          => $feed,
 
702
                                        'attachment_id' => $post_id,
 
703
                                ),
 
704
                                home_url( '/' )
 
705
                        );
666
706
                } elseif ( 'page' == $post->post_type ) {
667
 
                        $url = add_query_arg( array( 'feed' => $feed, 'page_id' => $post_id ), home_url( '/' ) );
 
707
                        $url = add_query_arg(
 
708
                                array(
 
709
                                        'feed'    => $feed,
 
710
                                        'page_id' => $post_id,
 
711
                                ),
 
712
                                home_url( '/' )
 
713
                        );
668
714
                } else {
669
 
                        $url = add_query_arg( array( 'feed' => $feed, 'p' => $post_id ), home_url( '/' ) );
 
715
                        $url = add_query_arg(
 
716
                                array(
 
717
                                        'feed' => $feed,
 
718
                                        'p'    => $post_id,
 
719
                                ),
 
720
                                home_url( '/' )
 
721
                        );
670
722
                }
671
723
        }
672
724
 
696
748
function post_comments_feed_link( $link_text = '', $post_id = '', $feed = '' ) {
697
749
        $url = get_post_comments_feed_link( $post_id, $feed );
698
750
        if ( empty( $link_text ) ) {
699
 
                $link_text = __('Comments Feed');
 
751
                $link_text = __( 'Comments Feed' );
700
752
        }
701
753
 
702
754
        $link = '<a href="' . esc_url( $url ) . '">' . $link_text . '</a>';
725
777
 * @return string Link to the feed for the author specified by $author_id.
726
778
 */
727
779
function get_author_feed_link( $author_id, $feed = '' ) {
728
 
        $author_id = (int) $author_id;
729
 
        $permalink_structure = get_option('permalink_structure');
 
780
        $author_id           = (int) $author_id;
 
781
        $permalink_structure = get_option( 'permalink_structure' );
730
782
 
731
 
        if ( empty($feed) )
 
783
        if ( empty( $feed ) ) {
732
784
                $feed = get_default_feed();
 
785
        }
733
786
 
734
787
        if ( '' == $permalink_structure ) {
735
 
                $link = home_url("?feed=$feed&amp;author=" . $author_id);
 
788
                $link = home_url( "?feed=$feed&amp;author=" . $author_id );
736
789
        } else {
737
 
                $link = get_author_posts_url($author_id);
738
 
                if ( $feed == get_default_feed() )
 
790
                $link = get_author_posts_url( $author_id );
 
791
                if ( $feed == get_default_feed() ) {
739
792
                        $feed_link = 'feed';
740
 
                else
 
793
                } else {
741
794
                        $feed_link = "feed/$feed";
 
795
                }
742
796
 
743
 
                $link = trailingslashit($link) . user_trailingslashit($feed_link, 'feed');
 
797
                $link = trailingslashit( $link ) . user_trailingslashit( $feed_link, 'feed' );
744
798
        }
745
799
 
746
800
        /**
786
840
 * @return string|false Link to the feed for the term specified by $term_id and $taxonomy.
787
841
 */
788
842
function get_term_feed_link( $term_id, $taxonomy = 'category', $feed = '' ) {
789
 
        $term_id = ( int ) $term_id;
790
 
 
791
 
        $term = get_term( $term_id, $taxonomy  );
792
 
 
793
 
        if ( empty( $term ) || is_wp_error( $term ) )
 
843
        $term_id = (int) $term_id;
 
844
 
 
845
        $term = get_term( $term_id, $taxonomy );
 
846
 
 
847
        if ( empty( $term ) || is_wp_error( $term ) ) {
794
848
                return false;
 
849
        }
795
850
 
796
 
        if ( empty( $feed ) )
 
851
        if ( empty( $feed ) ) {
797
852
                $feed = get_default_feed();
 
853
        }
798
854
 
799
855
        $permalink_structure = get_option( 'permalink_structure' );
800
856
 
801
857
        if ( '' == $permalink_structure ) {
802
858
                if ( 'category' == $taxonomy ) {
803
 
                        $link = home_url("?feed=$feed&amp;cat=$term_id");
804
 
                }
805
 
                elseif ( 'post_tag' == $taxonomy ) {
806
 
                        $link = home_url("?feed=$feed&amp;tag=$term->slug");
 
859
                        $link = home_url( "?feed=$feed&amp;cat=$term_id" );
 
860
                } elseif ( 'post_tag' == $taxonomy ) {
 
861
                        $link = home_url( "?feed=$feed&amp;tag=$term->slug" );
807
862
                } else {
808
 
                        $t = get_taxonomy( $taxonomy );
809
 
                        $link = home_url("?feed=$feed&amp;$t->query_var=$term->slug");
 
863
                        $t    = get_taxonomy( $taxonomy );
 
864
                        $link = home_url( "?feed=$feed&amp;$t->query_var=$term->slug" );
810
865
                }
811
866
        } else {
812
867
                $link = get_term_link( $term_id, $term->taxonomy );
813
 
                if ( $feed == get_default_feed() )
 
868
                if ( $feed == get_default_feed() ) {
814
869
                        $feed_link = 'feed';
815
 
                else
 
870
                } else {
816
871
                        $feed_link = "feed/$feed";
 
872
                }
817
873
 
818
874
                $link = trailingslashit( $link ) . user_trailingslashit( $feed_link, 'feed' );
819
875
        }
979
1035
 * @return string|void HTML content.
980
1036
 */
981
1037
function edit_term_link( $link = '', $before = '', $after = '', $term = null, $echo = true ) {
982
 
        if ( is_null( $term ) )
 
1038
        if ( is_null( $term ) ) {
983
1039
                $term = get_queried_object();
 
1040
        }
984
1041
 
985
 
        if ( ! $term )
 
1042
        if ( ! $term ) {
986
1043
                return;
 
1044
        }
987
1045
 
988
1046
        $tax = get_taxonomy( $term->taxonomy );
989
1047
        if ( ! current_user_can( 'edit_term', $term->term_id ) ) {
990
1048
                return;
991
1049
        }
992
1050
 
993
 
        if ( empty( $link ) )
994
 
                $link = __('Edit This');
 
1051
        if ( empty( $link ) ) {
 
1052
                $link = __( 'Edit This' );
 
1053
        }
995
1054
 
996
1055
        $link = '<a href="' . get_edit_term_link( $term->term_id, $term->taxonomy ) . '">' . $link . '</a>';
997
1056
 
1005
1064
         */
1006
1065
        $link = $before . apply_filters( 'edit_term_link', $link, $term->term_id ) . $after;
1007
1066
 
1008
 
        if ( $echo )
 
1067
        if ( $echo ) {
1009
1068
                echo $link;
1010
 
        else
 
1069
        } else {
1011
1070
                return $link;
 
1071
        }
1012
1072
}
1013
1073
 
1014
1074
/**
1024
1084
function get_search_link( $query = '' ) {
1025
1085
        global $wp_rewrite;
1026
1086
 
1027
 
        if ( empty($query) )
 
1087
        if ( empty( $query ) ) {
1028
1088
                $search = get_search_query( false );
1029
 
        else
1030
 
                $search = stripslashes($query);
 
1089
        } else {
 
1090
                $search = stripslashes( $query );
 
1091
        }
1031
1092
 
1032
1093
        $permastruct = $wp_rewrite->get_search_permastruct();
1033
1094
 
1034
1095
        if ( empty( $permastruct ) ) {
1035
 
                $link = home_url('?s=' . urlencode($search) );
 
1096
                $link = home_url( '?s=' . urlencode( $search ) );
1036
1097
        } else {
1037
 
                $search = urlencode($search);
1038
 
                $search = str_replace('%2F', '/', $search); // %2F(/) is not valid within a URL, send it un-encoded.
1039
 
                $link = str_replace( '%search%', $search, $permastruct );
1040
 
                $link = home_url( user_trailingslashit( $link, 'search' ) );
 
1098
                $search = urlencode( $search );
 
1099
                $search = str_replace( '%2F', '/', $search ); // %2F(/) is not valid within a URL, send it un-encoded.
 
1100
                $link   = str_replace( '%search%', $search, $permastruct );
 
1101
                $link   = home_url( user_trailingslashit( $link, 'search' ) );
1041
1102
        }
1042
1103
 
1043
1104
        /**
1062
1123
 * @param string $feed         Optional. Feed type. Default empty.
1063
1124
 * @return string The search results feed permalink.
1064
1125
 */
1065
 
function get_search_feed_link($search_query = '', $feed = '') {
 
1126
function get_search_feed_link( $search_query = '', $feed = '' ) {
1066
1127
        global $wp_rewrite;
1067
 
        $link = get_search_link($search_query);
 
1128
        $link = get_search_link( $search_query );
1068
1129
 
1069
 
        if ( empty($feed) )
 
1130
        if ( empty( $feed ) ) {
1070
1131
                $feed = get_default_feed();
 
1132
        }
1071
1133
 
1072
1134
        $permastruct = $wp_rewrite->get_search_permastruct();
1073
1135
 
1074
 
        if ( empty($permastruct) ) {
1075
 
                $link = add_query_arg('feed', $feed, $link);
 
1136
        if ( empty( $permastruct ) ) {
 
1137
                $link = add_query_arg( 'feed', $feed, $link );
1076
1138
        } else {
1077
 
                $link = trailingslashit($link);
 
1139
                $link  = trailingslashit( $link );
1078
1140
                $link .= "feed/$feed/";
1079
1141
        }
1080
1142
 
1101
1163
 * @param string $feed         Optional. Feed type. Default empty.
1102
1164
 * @return string The comments feed search results permalink.
1103
1165
 */
1104
 
function get_search_comments_feed_link($search_query = '', $feed = '') {
 
1166
function get_search_comments_feed_link( $search_query = '', $feed = '' ) {
1105
1167
        global $wp_rewrite;
1106
1168
 
1107
 
        if ( empty($feed) )
 
1169
        if ( empty( $feed ) ) {
1108
1170
                $feed = get_default_feed();
 
1171
        }
1109
1172
 
1110
 
        $link = get_search_feed_link($search_query, $feed);
 
1173
        $link = get_search_feed_link( $search_query, $feed );
1111
1174
 
1112
1175
        $permastruct = $wp_rewrite->get_search_permastruct();
1113
1176
 
1114
 
        if ( empty($permastruct) )
1115
 
                $link = add_query_arg('feed', 'comments-' . $feed, $link);
1116
 
        else
1117
 
                $link = add_query_arg('withcomments', 1, $link);
 
1177
        if ( empty( $permastruct ) ) {
 
1178
                $link = add_query_arg( 'feed', 'comments-' . $feed, $link );
 
1179
        } else {
 
1180
                $link = add_query_arg( 'withcomments', 1, $link );
 
1181
        }
1118
1182
 
1119
1183
        /** This filter is documented in wp-includes/link-template.php */
1120
1184
        return apply_filters( 'search_feed_link', $link, $feed, 'comments' );
1133
1197
 */
1134
1198
function get_post_type_archive_link( $post_type ) {
1135
1199
        global $wp_rewrite;
1136
 
        if ( ! $post_type_obj = get_post_type_object( $post_type ) )
 
1200
        if ( ! $post_type_obj = get_post_type_object( $post_type ) ) {
1137
1201
                return false;
 
1202
        }
1138
1203
 
1139
1204
        if ( 'post' === $post_type ) {
1140
 
                $show_on_front = get_option( 'show_on_front' );
1141
 
                $page_for_posts  = get_option( 'page_for_posts' );
 
1205
                $show_on_front  = get_option( 'show_on_front' );
 
1206
                $page_for_posts = get_option( 'page_for_posts' );
1142
1207
 
1143
1208
                if ( 'page' == $show_on_front && $page_for_posts ) {
1144
1209
                        $link = get_permalink( $page_for_posts );
1149
1214
                return apply_filters( 'post_type_archive_link', $link, $post_type );
1150
1215
        }
1151
1216
 
1152
 
        if ( ! $post_type_obj->has_archive )
 
1217
        if ( ! $post_type_obj->has_archive ) {
1153
1218
                return false;
 
1219
        }
1154
1220
 
1155
1221
        if ( get_option( 'permalink_structure' ) && is_array( $post_type_obj->rewrite ) ) {
1156
1222
                $struct = ( true === $post_type_obj->has_archive ) ? $post_type_obj->rewrite['slug'] : $post_type_obj->has_archive;
1157
 
                if ( $post_type_obj->rewrite['with_front'] )
 
1223
                if ( $post_type_obj->rewrite['with_front'] ) {
1158
1224
                        $struct = $wp_rewrite->front . $struct;
1159
 
                else
 
1225
                } else {
1160
1226
                        $struct = $wp_rewrite->root . $struct;
 
1227
                }
1161
1228
                $link = home_url( user_trailingslashit( $struct, 'post_type_archive' ) );
1162
1229
        } else {
1163
1230
                $link = home_url( '?post_type=' . $post_type );
1185
1252
 */
1186
1253
function get_post_type_archive_feed_link( $post_type, $feed = '' ) {
1187
1254
        $default_feed = get_default_feed();
1188
 
        if ( empty( $feed ) )
 
1255
        if ( empty( $feed ) ) {
1189
1256
                $feed = $default_feed;
 
1257
        }
1190
1258
 
1191
 
        if ( ! $link = get_post_type_archive_link( $post_type ) )
 
1259
        if ( ! $link = get_post_type_archive_link( $post_type ) ) {
1192
1260
                return false;
 
1261
        }
1193
1262
 
1194
1263
        $post_type_obj = get_post_type_object( $post_type );
1195
1264
        if ( get_option( 'permalink_structure' ) && is_array( $post_type_obj->rewrite ) && $post_type_obj->rewrite['feeds'] ) {
1196
 
                $link = trailingslashit( $link );
 
1265
                $link  = trailingslashit( $link );
1197
1266
                $link .= 'feed/';
1198
 
                if ( $feed != $default_feed )
 
1267
                if ( $feed != $default_feed ) {
1199
1268
                        $link .= "$feed/";
 
1269
                }
1200
1270
        } else {
1201
1271
                $link = add_query_arg( 'feed', $feed, $link );
1202
1272
        }
1239
1309
                }
1240
1310
 
1241
1311
                $query_args['preview'] = 'true';
1242
 
                $preview_link = add_query_arg( $query_args, $preview_link );
 
1312
                $preview_link          = add_query_arg( $query_args, $preview_link );
1243
1313
        }
1244
1314
 
1245
1315
        /**
1268
1338
 *                     not allow an editing UI.
1269
1339
 */
1270
1340
function get_edit_post_link( $id = 0, $context = 'display' ) {
1271
 
        if ( ! $post = get_post( $id ) )
 
1341
        if ( ! $post = get_post( $id ) ) {
1272
1342
                return;
 
1343
        }
1273
1344
 
1274
 
        if ( 'revision' === $post->post_type )
 
1345
        if ( 'revision' === $post->post_type ) {
1275
1346
                $action = '';
1276
 
        elseif ( 'display' == $context )
 
1347
        } elseif ( 'display' == $context ) {
1277
1348
                $action = '&amp;action=edit';
1278
 
        else
 
1349
        } else {
1279
1350
                $action = '&action=edit';
 
1351
        }
1280
1352
 
1281
1353
        $post_type_object = get_post_type_object( $post->post_type );
1282
 
        if ( !$post_type_object )
 
1354
        if ( ! $post_type_object ) {
1283
1355
                return;
 
1356
        }
1284
1357
 
1285
 
        if ( !current_user_can( 'edit_post', $post->ID ) )
 
1358
        if ( ! current_user_can( 'edit_post', $post->ID ) ) {
1286
1359
                return;
 
1360
        }
1287
1361
 
1288
1362
        if ( $post_type_object->_edit_link ) {
1289
1363
                $link = admin_url( sprintf( $post_type_object->_edit_link . $action, $post->ID ) );
1356
1430
 * @return string|void The delete post link URL for the given post.
1357
1431
 */
1358
1432
function get_delete_post_link( $id = 0, $deprecated = '', $force_delete = false ) {
1359
 
        if ( ! empty( $deprecated ) )
 
1433
        if ( ! empty( $deprecated ) ) {
1360
1434
                _deprecated_argument( __FUNCTION__, '3.0.0' );
 
1435
        }
1361
1436
 
1362
 
        if ( !$post = get_post( $id ) )
 
1437
        if ( ! $post = get_post( $id ) ) {
1363
1438
                return;
 
1439
        }
1364
1440
 
1365
1441
        $post_type_object = get_post_type_object( $post->post_type );
1366
 
        if ( !$post_type_object )
1367
 
                return;
1368
 
 
1369
 
        if ( !current_user_can( 'delete_post', $post->ID ) )
1370
 
                return;
1371
 
 
1372
 
        $action = ( $force_delete || !EMPTY_TRASH_DAYS ) ? 'delete' : 'trash';
 
1442
        if ( ! $post_type_object ) {
 
1443
                return;
 
1444
        }
 
1445
 
 
1446
        if ( ! current_user_can( 'delete_post', $post->ID ) ) {
 
1447
                return;
 
1448
        }
 
1449
 
 
1450
        $action = ( $force_delete || ! EMPTY_TRASH_DAYS ) ? 'delete' : 'trash';
1373
1451
 
1374
1452
        $delete_link = add_query_arg( 'action', $action, admin_url( sprintf( $post_type_object->_edit_link, $post->ID ) ) );
1375
1453
 
1396
1474
function get_edit_comment_link( $comment_id = 0 ) {
1397
1475
        $comment = get_comment( $comment_id );
1398
1476
 
1399
 
        if ( !current_user_can( 'edit_comment', $comment->comment_ID ) )
 
1477
        if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) {
1400
1478
                return;
 
1479
        }
1401
1480
 
1402
 
        $location = admin_url('comment.php?action=editcomment&amp;c=') . $comment->comment_ID;
 
1481
        $location = admin_url( 'comment.php?action=editcomment&amp;c=' ) . $comment->comment_ID;
1403
1482
 
1404
1483
        /**
1405
1484
         * Filters the comment edit link.
1456
1535
function get_edit_bookmark_link( $link = 0 ) {
1457
1536
        $link = get_bookmark( $link );
1458
1537
 
1459
 
        if ( !current_user_can('manage_links') )
 
1538
        if ( ! current_user_can( 'manage_links' ) ) {
1460
1539
                return;
 
1540
        }
1461
1541
 
1462
 
        $location = admin_url('link.php?action=edit&amp;link_id=') . $link->link_id;
 
1542
        $location = admin_url( 'link.php?action=edit&amp;link_id=' ) . $link->link_id;
1463
1543
 
1464
1544
        /**
1465
1545
         * Filters the bookmark edit link.
1483
1563
 * @param int    $bookmark Optional. Bookmark ID. Default is the current bookmark.
1484
1564
 */
1485
1565
function edit_bookmark_link( $link = '', $before = '', $after = '', $bookmark = null ) {
1486
 
        $bookmark = get_bookmark($bookmark);
 
1566
        $bookmark = get_bookmark( $bookmark );
1487
1567
 
1488
 
        if ( !current_user_can('manage_links') )
 
1568
        if ( ! current_user_can( 'manage_links' ) ) {
1489
1569
                return;
 
1570
        }
1490
1571
 
1491
 
        if ( empty($link) )
1492
 
                $link = __('Edit This');
 
1572
        if ( empty( $link ) ) {
 
1573
                $link = __( 'Edit This' );
 
1574
        }
1493
1575
 
1494
1576
        $link = '<a href="' . esc_url( get_edit_bookmark_link( $bookmark ) ) . '">' . $link . '</a>';
1495
1577
 
1513
1595
 * @return string URL to edit user page or empty string.
1514
1596
 */
1515
1597
function get_edit_user_link( $user_id = null ) {
1516
 
        if ( ! $user_id )
 
1598
        if ( ! $user_id ) {
1517
1599
                $user_id = get_current_user_id();
 
1600
        }
1518
1601
 
1519
 
        if ( empty( $user_id ) || ! current_user_can( 'edit_user', $user_id ) )
 
1602
        if ( empty( $user_id ) || ! current_user_can( 'edit_user', $user_id ) ) {
1520
1603
                return '';
 
1604
        }
1521
1605
 
1522
1606
        $user = get_userdata( $user_id );
1523
1607
 
1524
 
        if ( ! $user )
 
1608
        if ( ! $user ) {
1525
1609
                return '';
 
1610
        }
1526
1611
 
1527
 
        if ( get_current_user_id() == $user->ID )
 
1612
        if ( get_current_user_id() == $user->ID ) {
1528
1613
                $link = get_edit_profile_url( $user->ID );
1529
 
        else
 
1614
        } else {
1530
1615
                $link = add_query_arg( 'user_id', $user->ID, self_admin_url( 'user-edit.php' ) );
 
1616
        }
1531
1617
 
1532
1618
        /**
1533
1619
         * Filters the user edit link.
1591
1677
function get_adjacent_post( $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category' ) {
1592
1678
        global $wpdb;
1593
1679
 
1594
 
        if ( ( ! $post = get_post() ) || ! taxonomy_exists( $taxonomy ) )
 
1680
        if ( ( ! $post = get_post() ) || ! taxonomy_exists( $taxonomy ) ) {
1595
1681
                return null;
 
1682
        }
1596
1683
 
1597
1684
        $current_post_date = $post->post_date;
1598
1685
 
1599
 
        $join = '';
1600
 
        $where = '';
 
1686
        $join     = '';
 
1687
        $where    = '';
1601
1688
        $adjacent = $previous ? 'previous' : 'next';
1602
1689
 
 
1690
        if ( ! empty( $excluded_terms ) && ! is_array( $excluded_terms ) ) {
 
1691
                // back-compat, $excluded_terms used to be $excluded_terms with IDs separated by " and "
 
1692
                if ( false !== strpos( $excluded_terms, ' and ' ) ) {
 
1693
                        _deprecated_argument( __FUNCTION__, '3.3.0', sprintf( __( 'Use commas instead of %s to separate excluded terms.' ), "'and'" ) );
 
1694
                        $excluded_terms = explode( ' and ', $excluded_terms );
 
1695
                } else {
 
1696
                        $excluded_terms = explode( ',', $excluded_terms );
 
1697
                }
 
1698
 
 
1699
                $excluded_terms = array_map( 'intval', $excluded_terms );
 
1700
        }
 
1701
 
 
1702
        /**
 
1703
         * Filters the IDs of terms excluded from adjacent post queries.
 
1704
         *
 
1705
         * The dynamic portion of the hook name, `$adjacent`, refers to the type
 
1706
         * of adjacency, 'next' or 'previous'.
 
1707
         *
 
1708
         * @since 4.4.0
 
1709
         *
 
1710
         * @param array $excluded_terms Array of excluded term IDs.
 
1711
         */
 
1712
        $excluded_terms = apply_filters( "get_{$adjacent}_post_excluded_terms", $excluded_terms );
 
1713
 
1603
1714
        if ( $in_same_term || ! empty( $excluded_terms ) ) {
1604
 
                if ( ! empty( $excluded_terms ) && ! is_array( $excluded_terms ) ) {
1605
 
                        // back-compat, $excluded_terms used to be $excluded_terms with IDs separated by " and "
1606
 
                        if ( false !== strpos( $excluded_terms, ' and ' ) ) {
1607
 
                                _deprecated_argument( __FUNCTION__, '3.3.0', sprintf( __( 'Use commas instead of %s to separate excluded terms.' ), "'and'" ) );
1608
 
                                $excluded_terms = explode( ' and ', $excluded_terms );
1609
 
                        } else {
1610
 
                                $excluded_terms = explode( ',', $excluded_terms );
1611
 
                        }
1612
 
 
1613
 
                        $excluded_terms = array_map( 'intval', $excluded_terms );
1614
 
                }
1615
 
 
1616
1715
                if ( $in_same_term ) {
1617
 
                        $join .= " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id";
1618
 
                        $where .= $wpdb->prepare( "AND tt.taxonomy = %s", $taxonomy );
 
1716
                        $join  .= " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id";
 
1717
                        $where .= $wpdb->prepare( 'AND tt.taxonomy = %s', $taxonomy );
1619
1718
 
1620
 
                        if ( ! is_object_in_taxonomy( $post->post_type, $taxonomy ) )
 
1719
                        if ( ! is_object_in_taxonomy( $post->post_type, $taxonomy ) ) {
1621
1720
                                return '';
 
1721
                        }
1622
1722
                        $term_array = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
1623
1723
 
1624
1724
                        // Remove any exclusions from the term array to include.
1625
1725
                        $term_array = array_diff( $term_array, (array) $excluded_terms );
1626
1726
                        $term_array = array_map( 'intval', $term_array );
1627
1727
 
1628
 
                        if ( ! $term_array || is_wp_error( $term_array ) )
 
1728
                        if ( ! $term_array || is_wp_error( $term_array ) ) {
1629
1729
                                return '';
 
1730
                        }
1630
1731
 
1631
 
                        $where .= " AND tt.term_id IN (" . implode( ',', $term_array ) . ")";
 
1732
                        $where .= ' AND tt.term_id IN (' . implode( ',', $term_array ) . ')';
1632
1733
                }
1633
1734
 
1634
 
                /**
1635
 
                 * Filters the IDs of terms excluded from adjacent post queries.
1636
 
                 *
1637
 
                 * The dynamic portion of the hook name, `$adjacent`, refers to the type
1638
 
                 * of adjacency, 'next' or 'previous'.
1639
 
                 *
1640
 
                 * @since 4.4.0
1641
 
                 *
1642
 
                 * @param string $excluded_terms Array of excluded term IDs.
1643
 
                 */
1644
 
                $excluded_terms = apply_filters( "get_{$adjacent}_post_excluded_terms", $excluded_terms );
1645
 
 
1646
1735
                if ( ! empty( $excluded_terms ) ) {
1647
1736
                        $where .= " AND p.ID NOT IN ( SELECT tr.object_id FROM $wpdb->term_relationships tr LEFT JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE tt.term_id IN (" . implode( ',', array_map( 'intval', $excluded_terms ) ) . ') )';
1648
1737
                }
1665
1754
                 * current user has the 'read_private_posts' cap.
1666
1755
                 */
1667
1756
                $private_states = get_post_stati( array( 'private' => true ) );
1668
 
                $where .= " AND ( p.post_status = 'publish'";
 
1757
                $where         .= " AND ( p.post_status = 'publish'";
1669
1758
                foreach ( (array) $private_states as $state ) {
1670
1759
                        if ( current_user_can( $read_private_cap ) ) {
1671
 
                                $where .= $wpdb->prepare( " OR p.post_status = %s", $state );
 
1760
                                $where .= $wpdb->prepare( ' OR p.post_status = %s', $state );
1672
1761
                        } else {
1673
 
                                $where .= $wpdb->prepare( " OR (p.post_author = %d AND p.post_status = %s)", $user_id, $state );
 
1762
                                $where .= $wpdb->prepare( ' OR (p.post_author = %d AND p.post_status = %s)', $user_id, $state );
1674
1763
                        }
1675
1764
                }
1676
 
                $where .= " )";
 
1765
                $where .= ' )';
1677
1766
        } else {
1678
1767
                $where .= " AND p.post_status = 'publish'";
1679
1768
        }
1680
1769
 
1681
 
        $op = $previous ? '<' : '>';
 
1770
        $op    = $previous ? '<' : '>';
1682
1771
        $order = $previous ? 'DESC' : 'ASC';
1683
1772
 
1684
1773
        /**
1729
1818
         * @param WP_Post $post    WP_Post object.
1730
1819
         * @param string  $order   Sort order. 'DESC' for previous post, 'ASC' for next.
1731
1820
         */
1732
 
        $sort  = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1", $post, $order );
 
1821
        $sort = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1", $post, $order );
1733
1822
 
1734
 
        $query = "SELECT p.ID FROM $wpdb->posts AS p $join $where $sort";
 
1823
        $query     = "SELECT p.ID FROM $wpdb->posts AS p $join $where $sort";
1735
1824
        $query_key = 'adjacent_post_' . md5( $query );
1736
 
        $result = wp_cache_get( $query_key, 'counts' );
 
1825
        $result    = wp_cache_get( $query_key, 'counts' );
1737
1826
        if ( false !== $result ) {
1738
 
                if ( $result )
 
1827
                if ( $result ) {
1739
1828
                        $result = get_post( $result );
 
1829
                }
1740
1830
                return $result;
1741
1831
        }
1742
1832
 
1743
1833
        $result = $wpdb->get_var( $query );
1744
 
        if ( null === $result )
 
1834
        if ( null === $result ) {
1745
1835
                $result = '';
 
1836
        }
1746
1837
 
1747
1838
        wp_cache_set( $query_key, $result, 'counts' );
1748
1839
 
1749
 
        if ( $result )
 
1840
        if ( $result ) {
1750
1841
                $result = get_post( $result );
 
1842
        }
1751
1843
 
1752
1844
        return $result;
1753
1845
}
1767
1859
 * @return string|void The adjacent post relational link URL.
1768
1860
 */
1769
1861
function get_adjacent_post_rel_link( $title = '%title', $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category' ) {
1770
 
        if ( $previous && is_attachment() && $post = get_post() )
 
1862
        if ( $previous && is_attachment() && $post = get_post() ) {
1771
1863
                $post = get_post( $post->post_parent );
1772
 
        else
 
1864
        } else {
1773
1865
                $post = get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy );
 
1866
        }
1774
1867
 
1775
 
        if ( empty( $post ) )
 
1868
        if ( empty( $post ) ) {
1776
1869
                return;
1777
 
 
1778
 
        $post_title = the_title_attribute( array( 'echo' => false, 'post' => $post ) );
1779
 
 
1780
 
        if ( empty( $post_title ) )
 
1870
        }
 
1871
 
 
1872
        $post_title = the_title_attribute(
 
1873
                array(
 
1874
                        'echo' => false,
 
1875
                        'post' => $post,
 
1876
                )
 
1877
        );
 
1878
 
 
1879
        if ( empty( $post_title ) ) {
1781
1880
                $post_title = $previous ? __( 'Previous Post' ) : __( 'Next Post' );
 
1881
        }
1782
1882
 
1783
1883
        $date = mysql2date( get_option( 'date_format' ), $post->post_date );
1784
1884
 
1785
1885
        $title = str_replace( '%title', $post_title, $title );
1786
1886
        $title = str_replace( '%date', $date, $title );
1787
1887
 
1788
 
        $link = $previous ? "<link rel='prev' title='" : "<link rel='next' title='";
 
1888
        $link  = $previous ? "<link rel='prev' title='" : "<link rel='next' title='";
1789
1889
        $link .= esc_attr( $title );
1790
1890
        $link .= "' href='" . get_permalink( $post ) . "' />\n";
1791
1891
 
1886
1986
 */
1887
1987
function get_boundary_post( $in_same_term = false, $excluded_terms = '', $start = true, $taxonomy = 'category' ) {
1888
1988
        $post = get_post();
1889
 
        if ( ! $post || ! is_single() || is_attachment() || ! taxonomy_exists( $taxonomy ) )
 
1989
        if ( ! $post || ! is_single() || is_attachment() || ! taxonomy_exists( $taxonomy ) ) {
1890
1990
                return null;
 
1991
        }
1891
1992
 
1892
1993
        $query_args = array(
1893
 
                'posts_per_page' => 1,
1894
 
                'order' => $start ? 'ASC' : 'DESC',
 
1994
                'posts_per_page'         => 1,
 
1995
                'order'                  => $start ? 'ASC' : 'DESC',
1895
1996
                'update_post_term_cache' => false,
1896
 
                'update_post_meta_cache' => false
 
1997
                'update_post_meta_cache' => false,
1897
1998
        );
1898
1999
 
1899
2000
        $term_array = array();
1900
2001
 
1901
2002
        if ( ! is_array( $excluded_terms ) ) {
1902
 
                if ( ! empty( $excluded_terms ) )
 
2003
                if ( ! empty( $excluded_terms ) ) {
1903
2004
                        $excluded_terms = explode( ',', $excluded_terms );
1904
 
                else
 
2005
                } else {
1905
2006
                        $excluded_terms = array();
 
2007
                }
1906
2008
        }
1907
2009
 
1908
2010
        if ( $in_same_term || ! empty( $excluded_terms ) ) {
1909
 
                if ( $in_same_term )
 
2011
                if ( $in_same_term ) {
1910
2012
                        $term_array = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
 
2013
                }
1911
2014
 
1912
2015
                if ( ! empty( $excluded_terms ) ) {
1913
2016
                        $excluded_terms = array_map( 'intval', $excluded_terms );
1914
2017
                        $excluded_terms = array_diff( $excluded_terms, $term_array );
1915
2018
 
1916
2019
                        $inverse_terms = array();
1917
 
                        foreach ( $excluded_terms as $excluded_term )
 
2020
                        foreach ( $excluded_terms as $excluded_term ) {
1918
2021
                                $inverse_terms[] = $excluded_term * -1;
 
2022
                        }
1919
2023
                        $excluded_terms = $inverse_terms;
1920
2024
                }
1921
2025
 
1922
 
                $query_args[ 'tax_query' ] = array( array(
1923
 
                        'taxonomy' => $taxonomy,
1924
 
                        'terms' => array_merge( $term_array, $excluded_terms )
1925
 
                ) );
 
2026
                $query_args['tax_query'] = array(
 
2027
                        array(
 
2028
                                'taxonomy' => $taxonomy,
 
2029
                                'terms'    => array_merge( $term_array, $excluded_terms ),
 
2030
                        ),
 
2031
                );
1926
2032
        }
1927
2033
 
1928
2034
        return get_posts( $query_args );
1990
2096
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
1991
2097
 */
1992
2098
function next_post_link( $format = '%link &raquo;', $link = '%title', $in_same_term = false, $excluded_terms = '', $taxonomy = 'category' ) {
1993
 
         echo get_next_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy );
 
2099
        echo get_next_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy );
1994
2100
}
1995
2101
 
1996
2102
/**
2009
2115
 * @return string The link URL of the previous or next post in relation to the current post.
2010
2116
 */
2011
2117
function get_adjacent_post_link( $format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category' ) {
2012
 
        if ( $previous && is_attachment() )
 
2118
        if ( $previous && is_attachment() ) {
2013
2119
                $post = get_post( get_post()->post_parent );
2014
 
        else
 
2120
        } else {
2015
2121
                $post = get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy );
 
2122
        }
2016
2123
 
2017
2124
        if ( ! $post ) {
2018
2125
                $output = '';
2019
2126
        } else {
2020
2127
                $title = $post->post_title;
2021
2128
 
2022
 
                if ( empty( $post->post_title ) )
 
2129
                if ( empty( $post->post_title ) ) {
2023
2130
                        $title = $previous ? __( 'Previous Post' ) : __( 'Next Post' );
 
2131
                }
2024
2132
 
2025
2133
                /** This filter is documented in wp-includes/post-template.php */
2026
2134
                $title = apply_filters( 'the_title', $title, $post->ID );
2027
2135
 
2028
2136
                $date = mysql2date( get_option( 'date_format' ), $post->post_date );
2029
 
                $rel = $previous ? 'prev' : 'next';
 
2137
                $rel  = $previous ? 'prev' : 'next';
2030
2138
 
2031
 
                $string = '<a href="' . get_permalink( $post ) . '" rel="'.$rel.'">';
 
2139
                $string = '<a href="' . get_permalink( $post ) . '" rel="' . $rel . '">';
2032
2140
                $inlink = str_replace( '%title', $title, $link );
2033
2141
                $inlink = str_replace( '%date', $date, $inlink );
2034
2142
                $inlink = $string . $inlink . '</a>';
2083
2191
 *
2084
2192
 * @param int  $pagenum Optional. Page ID. Default 1.
2085
2193
 * @param bool $escape  Optional. Whether to escape the URL for display, with esc_url(). Defaults to true.
2086
 
 *                          Otherwise, prepares the URL with esc_url_raw().
 
2194
 *                      Otherwise, prepares the URL with esc_url_raw().
2087
2195
 * @return string The link URL for the given page number.
2088
2196
 */
2089
 
function get_pagenum_link($pagenum = 1, $escape = true ) {
 
2197
function get_pagenum_link( $pagenum = 1, $escape = true ) {
2090
2198
        global $wp_rewrite;
2091
2199
 
2092
2200
        $pagenum = (int) $pagenum;
2093
2201
 
2094
2202
        $request = remove_query_arg( 'paged' );
2095
2203
 
2096
 
        $home_root = parse_url(home_url());
2097
 
        $home_root = ( isset($home_root['path']) ) ? $home_root['path'] : '';
 
2204
        $home_root = parse_url( home_url() );
 
2205
        $home_root = ( isset( $home_root['path'] ) ) ? $home_root['path'] : '';
2098
2206
        $home_root = preg_quote( $home_root, '|' );
2099
2207
 
2100
 
        $request = preg_replace('|^'. $home_root . '|i', '', $request);
2101
 
        $request = preg_replace('|^/+|', '', $request);
 
2208
        $request = preg_replace( '|^' . $home_root . '|i', '', $request );
 
2209
        $request = preg_replace( '|^/+|', '', $request );
2102
2210
 
2103
 
        if ( !$wp_rewrite->using_permalinks() || is_admin() ) {
 
2211
        if ( ! $wp_rewrite->using_permalinks() || is_admin() ) {
2104
2212
                $base = trailingslashit( get_bloginfo( 'url' ) );
2105
2213
 
2106
2214
                if ( $pagenum > 1 ) {
2112
2220
                $qs_regex = '|\?.*?$|';
2113
2221
                preg_match( $qs_regex, $request, $qs_match );
2114
2222
 
2115
 
                if ( !empty( $qs_match[0] ) ) {
 
2223
                if ( ! empty( $qs_match[0] ) ) {
2116
2224
                        $query_string = $qs_match[0];
2117
 
                        $request = preg_replace( $qs_regex, '', $request );
 
2225
                        $request      = preg_replace( $qs_regex, '', $request );
2118
2226
                } else {
2119
2227
                        $query_string = '';
2120
2228
                }
2121
2229
 
2122
 
                $request = preg_replace( "|$wp_rewrite->pagination_base/\d+/?$|", '', $request);
2123
 
                $request = preg_replace( '|^' . preg_quote( $wp_rewrite->index, '|' ) . '|i', '', $request);
2124
 
                $request = ltrim($request, '/');
 
2230
                $request = preg_replace( "|$wp_rewrite->pagination_base/\d+/?$|", '', $request );
 
2231
                $request = preg_replace( '|^' . preg_quote( $wp_rewrite->index, '|' ) . '|i', '', $request );
 
2232
                $request = ltrim( $request, '/' );
2125
2233
 
2126
2234
                $base = trailingslashit( get_bloginfo( 'url' ) );
2127
2235
 
2128
 
                if ( $wp_rewrite->using_index_permalinks() && ( $pagenum > 1 || '' != $request ) )
 
2236
                if ( $wp_rewrite->using_index_permalinks() && ( $pagenum > 1 || '' != $request ) ) {
2129
2237
                        $base .= $wp_rewrite->index . '/';
 
2238
                }
2130
2239
 
2131
2240
                if ( $pagenum > 1 ) {
2132
 
                        $request = ( ( !empty( $request ) ) ? trailingslashit( $request ) : $request ) . user_trailingslashit( $wp_rewrite->pagination_base . "/" . $pagenum, 'paged' );
 
2241
                        $request = ( ( ! empty( $request ) ) ? trailingslashit( $request ) : $request ) . user_trailingslashit( $wp_rewrite->pagination_base . '/' . $pagenum, 'paged' );
2133
2242
                }
2134
2243
 
2135
2244
                $result = $base . $request . $query_string;
2144
2253
         */
2145
2254
        $result = apply_filters( 'get_pagenum_link', $result );
2146
2255
 
2147
 
        if ( $escape )
 
2256
        if ( $escape ) {
2148
2257
                return esc_url( $result );
2149
 
        else
 
2258
        } else {
2150
2259
                return esc_url_raw( $result );
 
2260
        }
2151
2261
}
2152
2262
 
2153
2263
/**
2162
2272
 * @param int $max_page Optional. Max pages. Default 0.
2163
2273
 * @return string|void The link URL for next posts page.
2164
2274
 */
2165
 
function get_next_posts_page_link($max_page = 0) {
 
2275
function get_next_posts_page_link( $max_page = 0 ) {
2166
2276
        global $paged;
2167
2277
 
2168
 
        if ( !is_single() ) {
2169
 
                if ( !$paged )
 
2278
        if ( ! is_single() ) {
 
2279
                if ( ! $paged ) {
2170
2280
                        $paged = 1;
2171
 
                $nextpage = intval($paged) + 1;
2172
 
                if ( !$max_page || $max_page >= $nextpage )
2173
 
                        return get_pagenum_link($nextpage);
 
2281
                }
 
2282
                $nextpage = intval( $paged ) + 1;
 
2283
                if ( ! $max_page || $max_page >= $nextpage ) {
 
2284
                        return get_pagenum_link( $nextpage );
 
2285
                }
2174
2286
        }
2175
2287
}
2176
2288
 
2186
2298
function next_posts( $max_page = 0, $echo = true ) {
2187
2299
        $output = esc_url( get_next_posts_page_link( $max_page ) );
2188
2300
 
2189
 
        if ( $echo )
 
2301
        if ( $echo ) {
2190
2302
                echo $output;
2191
 
        else
 
2303
        } else {
2192
2304
                return $output;
 
2305
        }
2193
2306
}
2194
2307
 
2195
2308
/**
2207
2320
function get_next_posts_link( $label = null, $max_page = 0 ) {
2208
2321
        global $paged, $wp_query;
2209
2322
 
2210
 
        if ( !$max_page )
 
2323
        if ( ! $max_page ) {
2211
2324
                $max_page = $wp_query->max_num_pages;
 
2325
        }
2212
2326
 
2213
 
        if ( !$paged )
 
2327
        if ( ! $paged ) {
2214
2328
                $paged = 1;
2215
 
 
2216
 
        $nextpage = intval($paged) + 1;
2217
 
 
2218
 
        if ( null === $label )
 
2329
        }
 
2330
 
 
2331
        $nextpage = intval( $paged ) + 1;
 
2332
 
 
2333
        if ( null === $label ) {
2219
2334
                $label = __( 'Next Page &raquo;' );
 
2335
        }
2220
2336
 
2221
 
        if ( !is_single() && ( $nextpage <= $max_page ) ) {
 
2337
        if ( ! is_single() && ( $nextpage <= $max_page ) ) {
2222
2338
                /**
2223
2339
                 * Filters the anchor tag attributes for the next posts page link.
2224
2340
                 *
2228
2344
                 */
2229
2345
                $attr = apply_filters( 'next_posts_link_attributes', '' );
2230
2346
 
2231
 
                return '<a href="' . next_posts( $max_page, false ) . "\" $attr>" . preg_replace('/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label) . '</a>';
 
2347
                return '<a href="' . next_posts( $max_page, false ) . "\" $attr>" . preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label ) . '</a>';
2232
2348
        }
2233
2349
}
2234
2350
 
2260
2376
function get_previous_posts_page_link() {
2261
2377
        global $paged;
2262
2378
 
2263
 
        if ( !is_single() ) {
2264
 
                $nextpage = intval($paged) - 1;
2265
 
                if ( $nextpage < 1 )
 
2379
        if ( ! is_single() ) {
 
2380
                $nextpage = intval( $paged ) - 1;
 
2381
                if ( $nextpage < 1 ) {
2266
2382
                        $nextpage = 1;
2267
 
                return get_pagenum_link($nextpage);
 
2383
                }
 
2384
                return get_pagenum_link( $nextpage );
2268
2385
        }
2269
2386
}
2270
2387
 
2279
2396
function previous_posts( $echo = true ) {
2280
2397
        $output = esc_url( get_previous_posts_page_link() );
2281
2398
 
2282
 
        if ( $echo )
 
2399
        if ( $echo ) {
2283
2400
                echo $output;
2284
 
        else
 
2401
        } else {
2285
2402
                return $output;
 
2403
        }
2286
2404
}
2287
2405
 
2288
2406
/**
2298
2416
function get_previous_posts_link( $label = null ) {
2299
2417
        global $paged;
2300
2418
 
2301
 
        if ( null === $label )
 
2419
        if ( null === $label ) {
2302
2420
                $label = __( '&laquo; Previous Page' );
 
2421
        }
2303
2422
 
2304
 
        if ( !is_single() && $paged > 1 ) {
 
2423
        if ( ! is_single() && $paged > 1 ) {
2305
2424
                /**
2306
2425
                 * Filters the anchor tag attributes for the previous posts page link.
2307
2426
                 *
2310
2429
                 * @param string $attributes Attributes for the anchor tag.
2311
2430
                 */
2312
2431
                $attr = apply_filters( 'previous_posts_link_attributes', '' );
2313
 
                return '<a href="' . previous_posts( false ) . "\" $attr>". preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label ) .'</a>';
 
2432
                return '<a href="' . previous_posts( false ) . "\" $attr>" . preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label ) . '</a>';
2314
2433
        }
2315
2434
}
2316
2435
 
2348
2467
 
2349
2468
        $return = '';
2350
2469
 
2351
 
        if ( !is_singular() ) {
 
2470
        if ( ! is_singular() ) {
2352
2471
                $defaults = array(
2353
 
                        'sep' => ' &#8212; ',
2354
 
                        'prelabel' => __('&laquo; Previous Page'),
2355
 
                        'nxtlabel' => __('Next Page &raquo;'),
 
2472
                        'sep'      => ' &#8212; ',
 
2473
                        'prelabel' => __( '&laquo; Previous Page' ),
 
2474
                        'nxtlabel' => __( 'Next Page &raquo;' ),
2356
2475
                );
2357
 
                $args = wp_parse_args( $args, $defaults );
 
2476
                $args     = wp_parse_args( $args, $defaults );
2358
2477
 
2359
2478
                $max_num_pages = $wp_query->max_num_pages;
2360
 
                $paged = get_query_var('paged');
 
2479
                $paged         = get_query_var( 'paged' );
2361
2480
 
2362
2481
                //only have sep if there's both prev and next results
2363
 
                if ($paged < 2 || $paged >= $max_num_pages) {
 
2482
                if ( $paged < 2 || $paged >= $max_num_pages ) {
2364
2483
                        $args['sep'] = '';
2365
2484
                }
2366
2485
 
2367
2486
                if ( $max_num_pages > 1 ) {
2368
 
                        $return = get_previous_posts_link($args['prelabel']);
2369
 
                        $return .= preg_replace('/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $args['sep']);
2370
 
                        $return .= get_next_posts_link($args['nxtlabel']);
 
2487
                        $return  = get_previous_posts_link( $args['prelabel'] );
 
2488
                        $return .= preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $args['sep'] );
 
2489
                        $return .= get_next_posts_link( $args['nxtlabel'] );
2371
2490
                }
2372
2491
        }
2373
2492
        return $return;
2384
2503
 * @param string $nxtlabel Optional Label for next pages. Default empty.
2385
2504
 */
2386
2505
function posts_nav_link( $sep = '', $prelabel = '', $nxtlabel = '' ) {
2387
 
        $args = array_filter( compact('sep', 'prelabel', 'nxtlabel') );
2388
 
        echo get_posts_nav_link($args);
 
2506
        $args = array_filter( compact( 'sep', 'prelabel', 'nxtlabel' ) );
 
2507
        echo get_posts_nav_link( $args );
2389
2508
}
2390
2509
 
2391
2510
/**
2407
2526
 * @return string Markup for post links.
2408
2527
 */
2409
2528
function get_the_post_navigation( $args = array() ) {
2410
 
        $args = wp_parse_args( $args, array(
2411
 
                'prev_text'          => '%title',
2412
 
                'next_text'          => '%title',
2413
 
                'in_same_term'       => false,
2414
 
                'excluded_terms'     => '',
2415
 
                'taxonomy'           => 'category',
2416
 
                'screen_reader_text' => __( 'Post navigation' ),
2417
 
        ) );
 
2529
        $args = wp_parse_args(
 
2530
                $args,
 
2531
                array(
 
2532
                        'prev_text'          => '%title',
 
2533
                        'next_text'          => '%title',
 
2534
                        'in_same_term'       => false,
 
2535
                        'excluded_terms'     => '',
 
2536
                        'taxonomy'           => 'category',
 
2537
                        'screen_reader_text' => __( 'Post navigation' ),
 
2538
                )
 
2539
        );
2418
2540
 
2419
2541
        $navigation = '';
2420
2542
 
2478
2600
 
2479
2601
        // Don't print empty markup if there's only one page.
2480
2602
        if ( $GLOBALS['wp_query']->max_num_pages > 1 ) {
2481
 
                $args = wp_parse_args( $args, array(
2482
 
                        'prev_text'          => __( 'Older posts' ),
2483
 
                        'next_text'          => __( 'Newer posts' ),
2484
 
                        'screen_reader_text' => __( 'Posts navigation' ),
2485
 
                ) );
 
2603
                $args = wp_parse_args(
 
2604
                        $args,
 
2605
                        array(
 
2606
                                'prev_text'          => __( 'Older posts' ),
 
2607
                                'next_text'          => __( 'Newer posts' ),
 
2608
                                'screen_reader_text' => __( 'Posts navigation' ),
 
2609
                        )
 
2610
                );
2486
2611
 
2487
2612
                $next_link = get_previous_posts_link( $args['next_text'] );
2488
2613
                $prev_link = get_next_posts_link( $args['prev_text'] );
2531
2656
 
2532
2657
        // Don't print empty markup if there's only one page.
2533
2658
        if ( $GLOBALS['wp_query']->max_num_pages > 1 ) {
2534
 
                $args = wp_parse_args( $args, array(
2535
 
                        'mid_size'           => 1,
2536
 
                        'prev_text'          => _x( 'Previous', 'previous set of posts' ),
2537
 
                        'next_text'          => _x( 'Next', 'next set of posts' ),
2538
 
                        'screen_reader_text' => __( 'Posts navigation' ),
2539
 
                ) );
 
2659
                $args = wp_parse_args(
 
2660
                        $args,
 
2661
                        array(
 
2662
                                'mid_size'           => 1,
 
2663
                                'prev_text'          => _x( 'Previous', 'previous set of posts' ),
 
2664
                                'next_text'          => _x( 'Next', 'next set of posts' ),
 
2665
                                'screen_reader_text' => __( 'Posts navigation' ),
 
2666
                        )
 
2667
                );
2540
2668
 
2541
2669
                // Make sure we get a string back. Plain is the next best thing.
2542
2670
                if ( isset( $args['type'] ) && 'array' == $args['type'] ) {
2629
2757
 
2630
2758
        $result = get_permalink();
2631
2759
 
2632
 
        if ( 'newest' == get_option('default_comments_page') ) {
 
2760
        if ( 'newest' == get_option( 'default_comments_page' ) ) {
2633
2761
                if ( $pagenum != $max_page ) {
2634
 
                        if ( $wp_rewrite->using_permalinks() )
2635
 
                                $result = user_trailingslashit( trailingslashit($result) . $wp_rewrite->comments_pagination_base . '-' . $pagenum, 'commentpaged');
2636
 
                        else
 
2762
                        if ( $wp_rewrite->using_permalinks() ) {
 
2763
                                $result = user_trailingslashit( trailingslashit( $result ) . $wp_rewrite->comments_pagination_base . '-' . $pagenum, 'commentpaged' );
 
2764
                        } else {
2637
2765
                                $result = add_query_arg( 'cpage', $pagenum, $result );
 
2766
                        }
2638
2767
                }
2639
2768
        } elseif ( $pagenum > 1 ) {
2640
 
                if ( $wp_rewrite->using_permalinks() )
2641
 
                        $result = user_trailingslashit( trailingslashit($result) . $wp_rewrite->comments_pagination_base . '-' . $pagenum, 'commentpaged');
2642
 
                else
 
2769
                if ( $wp_rewrite->using_permalinks() ) {
 
2770
                        $result = user_trailingslashit( trailingslashit( $result ) . $wp_rewrite->comments_pagination_base . '-' . $pagenum, 'commentpaged' );
 
2771
                } else {
2643
2772
                        $result = add_query_arg( 'cpage', $pagenum, $result );
 
2773
                }
2644
2774
        }
2645
2775
 
2646
2776
        $result .= '#comments';
2669
2799
function get_next_comments_link( $label = '', $max_page = 0 ) {
2670
2800
        global $wp_query;
2671
2801
 
2672
 
        if ( ! is_singular() )
 
2802
        if ( ! is_singular() ) {
2673
2803
                return;
 
2804
        }
2674
2805
 
2675
 
        $page = get_query_var('cpage');
 
2806
        $page = get_query_var( 'cpage' );
2676
2807
 
2677
2808
        if ( ! $page ) {
2678
2809
                $page = 1;
2679
2810
        }
2680
2811
 
2681
 
        $nextpage = intval($page) + 1;
 
2812
        $nextpage = intval( $page ) + 1;
2682
2813
 
2683
 
        if ( empty($max_page) )
 
2814
        if ( empty( $max_page ) ) {
2684
2815
                $max_page = $wp_query->max_num_comment_pages;
 
2816
        }
2685
2817
 
2686
 
        if ( empty($max_page) )
 
2818
        if ( empty( $max_page ) ) {
2687
2819
                $max_page = get_comment_pages_count();
 
2820
        }
2688
2821
 
2689
 
        if ( $nextpage > $max_page )
 
2822
        if ( $nextpage > $max_page ) {
2690
2823
                return;
 
2824
        }
2691
2825
 
2692
 
        if ( empty($label) )
2693
 
                $label = __('Newer Comments &raquo;');
 
2826
        if ( empty( $label ) ) {
 
2827
                $label = __( 'Newer Comments &raquo;' );
 
2828
        }
2694
2829
 
2695
2830
        /**
2696
2831
         * Filters the anchor tag attributes for the next comments page link.
2699
2834
         *
2700
2835
         * @param string $attributes Attributes for the anchor tag.
2701
2836
         */
2702
 
        return '<a href="' . esc_url( get_comments_pagenum_link( $nextpage, $max_page ) ) . '" ' . apply_filters( 'next_comments_link_attributes', '' ) . '>'. preg_replace('/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label) .'</a>';
 
2837
        return '<a href="' . esc_url( get_comments_pagenum_link( $nextpage, $max_page ) ) . '" ' . apply_filters( 'next_comments_link_attributes', '' ) . '>' . preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label ) . '</a>';
2703
2838
}
2704
2839
 
2705
2840
/**
2723
2858
 * @return string|void HTML-formatted link for the previous page of comments.
2724
2859
 */
2725
2860
function get_previous_comments_link( $label = '' ) {
2726
 
        if ( ! is_singular() )
2727
 
                return;
2728
 
 
2729
 
        $page = get_query_var('cpage');
2730
 
 
2731
 
        if ( intval($page) <= 1 )
2732
 
                return;
2733
 
 
2734
 
        $prevpage = intval($page) - 1;
2735
 
 
2736
 
        if ( empty($label) )
2737
 
                $label = __('&laquo; Older Comments');
 
2861
        if ( ! is_singular() ) {
 
2862
                return;
 
2863
        }
 
2864
 
 
2865
        $page = get_query_var( 'cpage' );
 
2866
 
 
2867
        if ( intval( $page ) <= 1 ) {
 
2868
                return;
 
2869
        }
 
2870
 
 
2871
        $prevpage = intval( $page ) - 1;
 
2872
 
 
2873
        if ( empty( $label ) ) {
 
2874
                $label = __( '&laquo; Older Comments' );
 
2875
        }
2738
2876
 
2739
2877
        /**
2740
2878
         * Filters the anchor tag attributes for the previous comments page link.
2743
2881
         *
2744
2882
         * @param string $attributes Attributes for the anchor tag.
2745
2883
         */
2746
 
        return '<a href="' . esc_url( get_comments_pagenum_link( $prevpage ) ) . '" ' . apply_filters( 'previous_comments_link_attributes', '' ) . '>' . preg_replace('/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label) .'</a>';
 
2884
        return '<a href="' . esc_url( get_comments_pagenum_link( $prevpage ) ) . '" ' . apply_filters( 'previous_comments_link_attributes', '' ) . '>' . preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label ) . '</a>';
2747
2885
}
2748
2886
 
2749
2887
/**
2766
2904
 * @global WP_Rewrite $wp_rewrite
2767
2905
 *
2768
2906
 * @param string|array $args Optional args. See paginate_links(). Default empty array.
2769
 
 * @return string|void Markup for pagination links.
 
2907
 * @return string|array|void Markup for comment page links or array of comment page links.
2770
2908
 */
2771
2909
function paginate_comments_links( $args = array() ) {
2772
2910
        global $wp_rewrite;
2773
2911
 
2774
 
        if ( ! is_singular() )
 
2912
        if ( ! is_singular() ) {
2775
2913
                return;
 
2914
        }
2776
2915
 
2777
 
        $page = get_query_var('cpage');
2778
 
        if ( !$page )
 
2916
        $page = get_query_var( 'cpage' );
 
2917
        if ( ! $page ) {
2779
2918
                $page = 1;
 
2919
        }
2780
2920
        $max_page = get_comment_pages_count();
2781
2921
        $defaults = array(
2782
 
                'base' => add_query_arg( 'cpage', '%#%' ),
2783
 
                'format' => '',
2784
 
                'total' => $max_page,
2785
 
                'current' => $page,
2786
 
                'echo' => true,
2787
 
                'add_fragment' => '#comments'
 
2922
                'base'         => add_query_arg( 'cpage', '%#%' ),
 
2923
                'format'       => '',
 
2924
                'total'        => $max_page,
 
2925
                'current'      => $page,
 
2926
                'echo'         => true,
 
2927
                'type'         => 'plain',
 
2928
                'add_fragment' => '#comments',
2788
2929
        );
2789
 
        if ( $wp_rewrite->using_permalinks() )
2790
 
                $defaults['base'] = user_trailingslashit(trailingslashit(get_permalink()) . $wp_rewrite->comments_pagination_base . '-%#%', 'commentpaged');
 
2930
        if ( $wp_rewrite->using_permalinks() ) {
 
2931
                $defaults['base'] = user_trailingslashit( trailingslashit( get_permalink() ) . $wp_rewrite->comments_pagination_base . '-%#%', 'commentpaged' );
 
2932
        }
2791
2933
 
2792
 
        $args = wp_parse_args( $args, $defaults );
 
2934
        $args       = wp_parse_args( $args, $defaults );
2793
2935
        $page_links = paginate_links( $args );
2794
2936
 
2795
 
        if ( $args['echo'] )
 
2937
        if ( $args['echo'] && 'array' !== $args['type'] ) {
2796
2938
                echo $page_links;
2797
 
        else
 
2939
        } else {
2798
2940
                return $page_links;
 
2941
        }
2799
2942
}
2800
2943
 
2801
2944
/**
2819
2962
 
2820
2963
        // Are there comments to navigate through?
2821
2964
        if ( get_comment_pages_count() > 1 ) {
2822
 
                $args = wp_parse_args( $args, array(
2823
 
                        'prev_text'          => __( 'Older comments' ),
2824
 
                        'next_text'          => __( 'Newer comments' ),
2825
 
                        'screen_reader_text' => __( 'Comments navigation' ),
2826
 
                ) );
 
2965
                $args = wp_parse_args(
 
2966
                        $args,
 
2967
                        array(
 
2968
                                'prev_text'          => __( 'Older comments' ),
 
2969
                                'next_text'          => __( 'Newer comments' ),
 
2970
                                'screen_reader_text' => __( 'Comments navigation' ),
 
2971
                        )
 
2972
                );
2827
2973
 
2828
2974
                $prev_link = get_previous_comments_link( $args['prev_text'] );
2829
2975
                $next_link = get_next_comments_link( $args['next_text'] );
2868
3014
 * @return string Markup for pagination links.
2869
3015
 */
2870
3016
function get_the_comments_pagination( $args = array() ) {
2871
 
        $navigation = '';
2872
 
        $args       = wp_parse_args( $args, array(
2873
 
                'screen_reader_text' => __( 'Comments navigation' ),
2874
 
        ) );
 
3017
        $navigation   = '';
 
3018
        $args         = wp_parse_args(
 
3019
                $args,
 
3020
                array(
 
3021
                        'screen_reader_text' => __( 'Comments navigation' ),
 
3022
                )
 
3023
        );
2875
3024
        $args['echo'] = false;
2876
3025
 
2877
3026
        // Make sure we get a string back. Plain is the next best thing.
2939
3088
 
2940
3089
        $orig_scheme = $scheme;
2941
3090
 
2942
 
        if ( empty( $blog_id ) || !is_multisite() ) {
 
3091
        if ( empty( $blog_id ) || ! is_multisite() ) {
2943
3092
                $url = get_option( 'home' );
2944
3093
        } else {
2945
3094
                switch_to_blog( $blog_id );
2948
3097
        }
2949
3098
 
2950
3099
        if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) {
2951
 
                if ( is_ssl() && ! is_admin() && 'wp-login.php' !== $pagenow )
 
3100
                if ( is_ssl() && ! is_admin() && 'wp-login.php' !== $pagenow ) {
2952
3101
                        $scheme = 'https';
2953
 
                else
 
3102
                } else {
2954
3103
                        $scheme = parse_url( $url, PHP_URL_SCHEME );
 
3104
                }
2955
3105
        }
2956
3106
 
2957
3107
        $url = set_url_scheme( $url, $scheme );
2958
3108
 
2959
 
        if ( $path && is_string( $path ) )
 
3109
        if ( $path && is_string( $path ) ) {
2960
3110
                $url .= '/' . ltrim( $path, '/' );
 
3111
        }
2961
3112
 
2962
3113
        /**
2963
3114
         * Filters the home URL.
3009
3160
 * @return string Site URL link with optional path appended.
3010
3161
 */
3011
3162
function get_site_url( $blog_id = null, $path = '', $scheme = null ) {
3012
 
        if ( empty( $blog_id ) || !is_multisite() ) {
 
3163
        if ( empty( $blog_id ) || ! is_multisite() ) {
3013
3164
                $url = get_option( 'siteurl' );
3014
3165
        } else {
3015
3166
                switch_to_blog( $blog_id );
3019
3170
 
3020
3171
        $url = set_url_scheme( $url, $scheme );
3021
3172
 
3022
 
        if ( $path && is_string( $path ) )
 
3173
        if ( $path && is_string( $path ) ) {
3023
3174
                $url .= '/' . ltrim( $path, '/' );
 
3175
        }
3024
3176
 
3025
3177
        /**
3026
3178
         * Filters the site URL.
3063
3215
 * @return string Admin URL link with optional path appended.
3064
3216
 */
3065
3217
function get_admin_url( $blog_id = null, $path = '', $scheme = 'admin' ) {
3066
 
        $url = get_site_url($blog_id, 'wp-admin/', $scheme);
 
3218
        $url = get_site_url( $blog_id, 'wp-admin/', $scheme );
3067
3219
 
3068
 
        if ( $path && is_string( $path ) )
 
3220
        if ( $path && is_string( $path ) ) {
3069
3221
                $url .= ltrim( $path, '/' );
 
3222
        }
3070
3223
 
3071
3224
        /**
3072
3225
         * Filters the admin area URL.
3093
3246
function includes_url( $path = '', $scheme = null ) {
3094
3247
        $url = site_url( '/' . WPINC . '/', $scheme );
3095
3248
 
3096
 
        if ( $path && is_string( $path ) )
3097
 
                $url .= ltrim($path, '/');
 
3249
        if ( $path && is_string( $path ) ) {
 
3250
                $url .= ltrim( $path, '/' );
 
3251
        }
3098
3252
 
3099
3253
        /**
3100
3254
         * Filters the URL to the includes directory.
3119
3273
function content_url( $path = '' ) {
3120
3274
        $url = set_url_scheme( WP_CONTENT_URL );
3121
3275
 
3122
 
        if ( $path && is_string( $path ) )
3123
 
                $url .= '/' . ltrim($path, '/');
 
3276
        if ( $path && is_string( $path ) ) {
 
3277
                $url .= '/' . ltrim( $path, '/' );
 
3278
        }
3124
3279
 
3125
3280
        /**
3126
3281
         * Filters the URL to the content directory.
3131
3286
         * @param string $path Path relative to the URL to the content directory. Blank string
3132
3287
         *                     if no path is specified.
3133
3288
         */
3134
 
        return apply_filters( 'content_url', $url, $path);
 
3289
        return apply_filters( 'content_url', $url, $path );
3135
3290
}
3136
3291
 
3137
3292
/**
3150
3305
 */
3151
3306
function plugins_url( $path = '', $plugin = '' ) {
3152
3307
 
3153
 
        $path = wp_normalize_path( $path );
3154
 
        $plugin = wp_normalize_path( $plugin );
 
3308
        $path          = wp_normalize_path( $path );
 
3309
        $plugin        = wp_normalize_path( $plugin );
3155
3310
        $mu_plugin_dir = wp_normalize_path( WPMU_PLUGIN_DIR );
3156
3311
 
3157
 
        if ( !empty($plugin) && 0 === strpos($plugin, $mu_plugin_dir) )
 
3312
        if ( ! empty( $plugin ) && 0 === strpos( $plugin, $mu_plugin_dir ) ) {
3158
3313
                $url = WPMU_PLUGIN_URL;
3159
 
        else
 
3314
        } else {
3160
3315
                $url = WP_PLUGIN_URL;
3161
 
 
 
3316
        }
3162
3317
 
3163
3318
        $url = set_url_scheme( $url );
3164
3319
 
3165
 
        if ( !empty($plugin) && is_string($plugin) ) {
3166
 
                $folder = dirname(plugin_basename($plugin));
3167
 
                if ( '.' != $folder )
3168
 
                        $url .= '/' . ltrim($folder, '/');
 
3320
        if ( ! empty( $plugin ) && is_string( $plugin ) ) {
 
3321
                $folder = dirname( plugin_basename( $plugin ) );
 
3322
                if ( '.' != $folder ) {
 
3323
                        $url .= '/' . ltrim( $folder, '/' );
 
3324
                }
3169
3325
        }
3170
3326
 
3171
 
        if ( $path && is_string( $path ) )
3172
 
                $url .= '/' . ltrim($path, '/');
 
3327
        if ( $path && is_string( $path ) ) {
 
3328
                $url .= '/' . ltrim( $path, '/' );
 
3329
        }
3173
3330
 
3174
3331
        /**
3175
3332
         * Filters the URL to the plugins directory.
3202
3359
 * @return string Site URL link with optional path appended.
3203
3360
 */
3204
3361
function network_site_url( $path = '', $scheme = null ) {
3205
 
        if ( ! is_multisite() )
3206
 
                return site_url($path, $scheme);
 
3362
        if ( ! is_multisite() ) {
 
3363
                return site_url( $path, $scheme );
 
3364
        }
3207
3365
 
3208
3366
        $current_network = get_network();
3209
3367
 
3210
 
        if ( 'relative' == $scheme )
 
3368
        if ( 'relative' == $scheme ) {
3211
3369
                $url = $current_network->path;
3212
 
        else
 
3370
        } else {
3213
3371
                $url = set_url_scheme( 'http://' . $current_network->domain . $current_network->path, $scheme );
 
3372
        }
3214
3373
 
3215
 
        if ( $path && is_string( $path ) )
 
3374
        if ( $path && is_string( $path ) ) {
3216
3375
                $url .= ltrim( $path, '/' );
 
3376
        }
3217
3377
 
3218
3378
        /**
3219
3379
         * Filters the network site URL.
3244
3404
 * @return string Home URL link with optional path appended.
3245
3405
 */
3246
3406
function network_home_url( $path = '', $scheme = null ) {
3247
 
        if ( ! is_multisite() )
3248
 
                return home_url($path, $scheme);
 
3407
        if ( ! is_multisite() ) {
 
3408
                return home_url( $path, $scheme );
 
3409
        }
3249
3410
 
3250
3411
        $current_network = get_network();
3251
 
        $orig_scheme = $scheme;
 
3412
        $orig_scheme     = $scheme;
3252
3413
 
3253
 
        if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ) ) )
 
3414
        if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) {
3254
3415
                $scheme = is_ssl() && ! is_admin() ? 'https' : 'http';
 
3416
        }
3255
3417
 
3256
 
        if ( 'relative' == $scheme )
 
3418
        if ( 'relative' == $scheme ) {
3257
3419
                $url = $current_network->path;
3258
 
        else
 
3420
        } else {
3259
3421
                $url = set_url_scheme( 'http://' . $current_network->domain . $current_network->path, $scheme );
 
3422
        }
3260
3423
 
3261
 
        if ( $path && is_string( $path ) )
 
3424
        if ( $path && is_string( $path ) ) {
3262
3425
                $url .= ltrim( $path, '/' );
 
3426
        }
3263
3427
 
3264
3428
        /**
3265
3429
         * Filters the network home URL.
3272
3436
         * @param string|null $orig_scheme Scheme to give the URL context. Accepts 'http', 'https',
3273
3437
         *                                 'relative' or null.
3274
3438
         */
3275
 
        return apply_filters( 'network_home_url', $url, $path, $orig_scheme);
 
3439
        return apply_filters( 'network_home_url', $url, $path, $orig_scheme );
3276
3440
}
3277
3441
 
3278
3442
/**
3286
3450
 * @return string Admin URL link with optional path appended.
3287
3451
 */
3288
3452
function network_admin_url( $path = '', $scheme = 'admin' ) {
3289
 
        if ( ! is_multisite() )
 
3453
        if ( ! is_multisite() ) {
3290
3454
                return admin_url( $path, $scheme );
3291
 
 
3292
 
        $url = network_site_url('wp-admin/network/', $scheme);
3293
 
 
3294
 
        if ( $path && is_string( $path ) )
3295
 
                $url .= ltrim($path, '/');
 
3455
        }
 
3456
 
 
3457
        $url = network_site_url( 'wp-admin/network/', $scheme );
 
3458
 
 
3459
        if ( $path && is_string( $path ) ) {
 
3460
                $url .= ltrim( $path, '/' );
 
3461
        }
3296
3462
 
3297
3463
        /**
3298
3464
         * Filters the network admin URL.
3317
3483
 * @return string Admin URL link with optional path appended.
3318
3484
 */
3319
3485
function user_admin_url( $path = '', $scheme = 'admin' ) {
3320
 
        $url = network_site_url('wp-admin/user/', $scheme);
 
3486
        $url = network_site_url( 'wp-admin/user/', $scheme );
3321
3487
 
3322
 
        if ( $path && is_string( $path ) )
3323
 
                $url .= ltrim($path, '/');
 
3488
        if ( $path && is_string( $path ) ) {
 
3489
                $url .= ltrim( $path, '/' );
 
3490
        }
3324
3491
 
3325
3492
        /**
3326
3493
         * Filters the user admin URL for the current user.
3388
3555
        }
3389
3556
 
3390
3557
        $url = trim( $url );
3391
 
        if ( substr( $url, 0, 2 ) === '//' )
 
3558
        if ( substr( $url, 0, 2 ) === '//' ) {
3392
3559
                $url = 'http:' . $url;
 
3560
        }
3393
3561
 
3394
3562
        if ( 'relative' == $scheme ) {
3395
3563
                $url = ltrim( preg_replace( '#^\w+://[^/]*#', '', $url ) );
3396
 
                if ( $url !== '' && $url[0] === '/' )
3397
 
                        $url = '/' . ltrim($url , "/ \t\n\r\0\x0B" );
 
3564
                if ( $url !== '' && $url[0] === '/' ) {
 
3565
                        $url = '/' . ltrim( $url, "/ \t\n\r\0\x0B" );
 
3566
                }
3398
3567
        } else {
3399
3568
                $url = preg_replace( '#^\w+://#', $scheme . '://', $url );
3400
3569
        }
3432
3601
        $user_id = $user_id ? (int) $user_id : get_current_user_id();
3433
3602
 
3434
3603
        $blogs = get_blogs_of_user( $user_id );
3435
 
        if ( is_multisite() && ! user_can( $user_id, 'manage_network' ) && empty($blogs) ) {
 
3604
        if ( is_multisite() && ! user_can( $user_id, 'manage_network' ) && empty( $blogs ) ) {
3436
3605
                $url = user_admin_url( $path, $scheme );
3437
3606
        } elseif ( ! is_multisite() ) {
3438
3607
                $url = admin_url( $path, $scheme );
3439
3608
        } else {
3440
3609
                $current_blog = get_current_blog_id();
3441
 
                if ( $current_blog  && ( user_can( $user_id, 'manage_network' ) || in_array( $current_blog, array_keys( $blogs ) ) ) ) {
 
3610
                if ( $current_blog && ( user_can( $user_id, 'manage_network' ) || in_array( $current_blog, array_keys( $blogs ) ) ) ) {
3442
3611
                        $url = admin_url( $path, $scheme );
3443
3612
                } else {
3444
3613
                        $active = get_active_blog_for_user( $user_id );
3445
 
                        if ( $active )
 
3614
                        if ( $active ) {
3446
3615
                                $url = get_admin_url( $active->blog_id, $path, $scheme );
3447
 
                        else
 
3616
                        } else {
3448
3617
                                $url = user_admin_url( $path, $scheme );
 
3618
                        }
3449
3619
                }
3450
3620
        }
3451
3621
 
3460
3630
         * @param string $scheme  Scheme to give the URL context. Accepts 'http', 'https', 'login',
3461
3631
         *                        'login_post', 'admin', 'relative' or null.
3462
3632
         */
3463
 
        return apply_filters( 'user_dashboard_url', $url, $user_id, $path, $scheme);
 
3633
        return apply_filters( 'user_dashboard_url', $url, $user_id, $path, $scheme );
3464
3634
}
3465
3635
 
3466
3636
/**
3476
3646
function get_edit_profile_url( $user_id = 0, $scheme = 'admin' ) {
3477
3647
        $user_id = $user_id ? (int) $user_id : get_current_user_id();
3478
3648
 
3479
 
        if ( is_user_admin() )
 
3649
        if ( is_user_admin() ) {
3480
3650
                $url = user_admin_url( 'profile.php', $scheme );
3481
 
        elseif ( is_network_admin() )
 
3651
        } elseif ( is_network_admin() ) {
3482
3652
                $url = network_admin_url( 'profile.php', $scheme );
3483
 
        else
 
3653
        } else {
3484
3654
                $url = get_dashboard_url( $user_id, 'profile.php', $scheme );
 
3655
        }
3485
3656
 
3486
3657
        /**
3487
3658
         * Filters the URL for a user's profile editor.
3493
3664
         * @param string $scheme  Scheme to give the URL context. Accepts 'http', 'https', 'login',
3494
3665
         *                        'login_post', 'admin', 'relative' or null.
3495
3666
         */
3496
 
        return apply_filters( 'edit_profile_url', $url, $user_id, $scheme);
 
3667
        return apply_filters( 'edit_profile_url', $url, $user_id, $scheme );
3497
3668
}
3498
3669
 
3499
3670
/**
3553
3724
 * Outputs rel=canonical for singular queries.
3554
3725
 *
3555
3726
 * @since 2.9.0
3556
 
 * @since 4.6.0 Adjusted to use wp_get_canonical_url().
 
3727
 * @since 4.6.0 Adjusted to use `wp_get_canonical_url()`.
3557
3728
 */
3558
3729
function rel_canonical() {
3559
3730
        if ( ! is_singular() ) {
3582
3753
 * via the {@see 'pre_get_shortlink'} filter or filter the output via the {@see 'get_shortlink'}
3583
3754
 * filter.
3584
3755
 *
3585
 
 * @since 3.0.0.
 
3756
 * @since 3.0.0
3586
3757
 *
3587
3758
 * @param int    $id          Optional. A post or site id. Default is 0, which means the current post or site.
3588
3759
 * @param string $context     Optional. Whether the id is a 'site' id, 'post' id, or 'media' id. If 'post',
3616
3787
        $post_id = 0;
3617
3788
        if ( 'query' == $context && is_singular() ) {
3618
3789
                $post_id = get_queried_object_id();
3619
 
                $post = get_post( $post_id );
 
3790
                $post    = get_post( $post_id );
3620
3791
        } elseif ( 'post' == $context ) {
3621
3792
                $post = get_post( $id );
3622
 
                if ( ! empty( $post->ID ) )
 
3793
                if ( ! empty( $post->ID ) ) {
3623
3794
                        $post_id = $post->ID;
 
3795
                }
3624
3796
        }
3625
3797
 
3626
3798
        $shortlink = '';
3659
3831
function wp_shortlink_wp_head() {
3660
3832
        $shortlink = wp_get_shortlink( 0, 'query' );
3661
3833
 
3662
 
        if ( empty( $shortlink ) )
 
3834
        if ( empty( $shortlink ) ) {
3663
3835
                return;
 
3836
        }
3664
3837
 
3665
3838
        echo "<link rel='shortlink' href='" . esc_url( $shortlink ) . "' />\n";
3666
3839
}
3673
3846
 * @since 3.0.0
3674
3847
 */
3675
3848
function wp_shortlink_header() {
3676
 
        if ( headers_sent() )
3677
 
                return;
3678
 
 
3679
 
        $shortlink = wp_get_shortlink(0, 'query');
3680
 
 
3681
 
        if ( empty($shortlink) )
3682
 
                return;
3683
 
 
3684
 
        header('Link: <' . $shortlink . '>; rel=shortlink', false);
 
3849
        if ( headers_sent() ) {
 
3850
                return;
 
3851
        }
 
3852
 
 
3853
        $shortlink = wp_get_shortlink( 0, 'query' );
 
3854
 
 
3855
        if ( empty( $shortlink ) ) {
 
3856
                return;
 
3857
        }
 
3858
 
 
3859
        header( 'Link: <' . $shortlink . '>; rel=shortlink', false );
3685
3860
}
3686
3861
 
3687
3862
/**
3701
3876
function the_shortlink( $text = '', $title = '', $before = '', $after = '' ) {
3702
3877
        $post = get_post();
3703
3878
 
3704
 
        if ( empty( $text ) )
3705
 
                $text = __('This is the short link.');
 
3879
        if ( empty( $text ) ) {
 
3880
                $text = __( 'This is the short link.' );
 
3881
        }
3706
3882
 
3707
 
        if ( empty( $title ) )
 
3883
        if ( empty( $title ) ) {
3708
3884
                $title = the_title_attribute( array( 'echo' => false ) );
 
3885
        }
3709
3886
 
3710
3887
        $shortlink = wp_get_shortlink( $post->ID );
3711
3888
 
3712
 
        if ( !empty( $shortlink ) ) {
 
3889
        if ( ! empty( $shortlink ) ) {
3713
3890
                $link = '<a rel="shortlink" href="' . esc_url( $shortlink ) . '" title="' . $title . '">' . $text . '</a>';
3714
3891
 
3715
3892
                /**
3760
3937
        return $args['url'];
3761
3938
}
3762
3939
 
 
3940
 
 
3941
/**
 
3942
 * Check if this comment type allows avatars to be retrieved.
 
3943
 *
 
3944
 * @since 5.1.0
 
3945
 *
 
3946
 * @param string $comment_type Comment type to check.
 
3947
 * @return bool Whether the comment type is allowed for retrieving avatars.
 
3948
 */
 
3949
function is_avatar_comment_type( $comment_type ) {
 
3950
        /**
 
3951
         * Filters the list of allowed comment types for retrieving avatars.
 
3952
         *
 
3953
         * @since 3.0.0
 
3954
         *
 
3955
         * @param array $types An array of content types. Default only contains 'comment'.
 
3956
         */
 
3957
        $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
 
3958
 
 
3959
        return in_array( $comment_type, (array) $allowed_comment_types, true );
 
3960
}
 
3961
 
 
3962
 
3763
3963
/**
3764
3964
 * Retrieves default data about the avatar.
3765
3965
 *
3797
3997
 * }
3798
3998
 */
3799
3999
function get_avatar_data( $id_or_email, $args = null ) {
3800
 
        $args = wp_parse_args( $args, array(
3801
 
                'size'           => 96,
3802
 
                'height'         => null,
3803
 
                'width'          => null,
3804
 
                'default'        => get_option( 'avatar_default', 'mystery' ),
3805
 
                'force_default'  => false,
3806
 
                'rating'         => get_option( 'avatar_rating' ),
3807
 
                'scheme'         => null,
3808
 
                'processed_args' => null, // if used, should be a reference
3809
 
                'extra_attr'     => '',
3810
 
        ) );
 
4000
        $args = wp_parse_args(
 
4001
                $args,
 
4002
                array(
 
4003
                        'size'           => 96,
 
4004
                        'height'         => null,
 
4005
                        'width'          => null,
 
4006
                        'default'        => get_option( 'avatar_default', 'mystery' ),
 
4007
                        'force_default'  => false,
 
4008
                        'rating'         => get_option( 'avatar_rating' ),
 
4009
                        'scheme'         => null,
 
4010
                        'processed_args' => null, // if used, should be a reference
 
4011
                        'extra_attr'     => '',
 
4012
                )
 
4013
        );
3811
4014
 
3812
4015
        if ( is_numeric( $args['size'] ) ) {
3813
4016
                $args['size'] = absint( $args['size'] );
3841
4044
        }
3842
4045
 
3843
4046
        switch ( $args['default'] ) {
3844
 
                case 'mm' :
3845
 
                case 'mystery' :
3846
 
                case 'mysteryman' :
 
4047
                case 'mm':
 
4048
                case 'mystery':
 
4049
                case 'mysteryman':
3847
4050
                        $args['default'] = 'mm';
3848
4051
                        break;
3849
 
                case 'gravatar_default' :
 
4052
                case 'gravatar_default':
3850
4053
                        $args['default'] = false;
3851
4054
                        break;
3852
4055
        }
3872
4075
         */
3873
4076
        $args = apply_filters( 'pre_get_avatar_data', $args, $id_or_email );
3874
4077
 
3875
 
        if ( isset( $args['url'] ) && ! is_null( $args['url'] ) ) {
 
4078
        if ( isset( $args['url'] ) ) {
3876
4079
                /** This filter is documented in wp-includes/link-template.php */
3877
4080
                return apply_filters( 'get_avatar_data', $args, $id_or_email );
3878
4081
        }
3879
4082
 
3880
4083
        $email_hash = '';
3881
 
        $user = $email = false;
 
4084
        $user       = $email = false;
3882
4085
 
3883
4086
        if ( is_object( $id_or_email ) && isset( $id_or_email->comment_ID ) ) {
3884
4087
                $id_or_email = get_comment( $id_or_email );
3902
4105
                // Post Object
3903
4106
                $user = get_user_by( 'id', (int) $id_or_email->post_author );
3904
4107
        } elseif ( $id_or_email instanceof WP_Comment ) {
3905
 
                /**
3906
 
                 * Filters the list of allowed comment types for retrieving avatars.
3907
 
                 *
3908
 
                 * @since 3.0.0
3909
 
                 *
3910
 
                 * @param array $types An array of content types. Default only contains 'comment'.
3911
 
                 */
3912
 
                $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
3913
 
                if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) ) {
 
4108
                if ( ! is_avatar_comment_type( get_comment_type( $id_or_email ) ) ) {
3914
4109
                        $args['url'] = false;
3915
4110
                        /** This filter is documented in wp-includes/link-template.php */
3916
4111
                        return apply_filters( 'get_avatar_data', $args, $id_or_email );
3936
4131
 
3937
4132
        if ( $email_hash ) {
3938
4133
                $args['found_avatar'] = true;
3939
 
                $gravatar_server = hexdec( $email_hash[0] ) % 3;
 
4134
                $gravatar_server      = hexdec( $email_hash[0] ) % 3;
3940
4135
        } else {
3941
4136
                $gravatar_server = rand( 0, 2 );
3942
4137
        }