| 1 | <?php |
|---|
| 2 | require 'wp-load.php'; |
|---|
| 3 | |
|---|
| 4 | function get_permalink_with_obj( $id = 0, $leavename = false ) { |
|---|
| 5 | $rewritecode = array( |
|---|
| 6 | '%year%', |
|---|
| 7 | '%monthnum%', |
|---|
| 8 | '%day%', |
|---|
| 9 | '%hour%', |
|---|
| 10 | '%minute%', |
|---|
| 11 | '%second%', |
|---|
| 12 | $leavename? '' : '%postname%', |
|---|
| 13 | '%post_id%', |
|---|
| 14 | '%category%', |
|---|
| 15 | '%author%', |
|---|
| 16 | $leavename? '' : '%pagename%', |
|---|
| 17 | ); |
|---|
| 18 | |
|---|
| 19 | if ( is_object($id) && isset($id->filter) && 'sample' == $id->filter ) { |
|---|
| 20 | $post = $id; |
|---|
| 21 | $sample = true; |
|---|
| 22 | } else { |
|---|
| 23 | $post = get_post($id); |
|---|
| 24 | $sample = false; |
|---|
| 25 | } |
|---|
| 26 | |
|---|
| 27 | if ( empty($post->ID) ) |
|---|
| 28 | return false; |
|---|
| 29 | |
|---|
| 30 | if ( $post->post_type == 'page' ) |
|---|
| 31 | return get_page_link($post, $leavename, $sample); |
|---|
| 32 | elseif ( $post->post_type == 'attachment' ) |
|---|
| 33 | return get_attachment_link( $post->ID, $leavename ); |
|---|
| 34 | elseif ( in_array($post->post_type, get_post_types( array('_builtin' => false) ) ) ) |
|---|
| 35 | return get_post_permalink($post->ID, $leavename, $sample); |
|---|
| 36 | |
|---|
| 37 | $permalink = get_option('permalink_structure'); |
|---|
| 38 | |
|---|
| 39 | /** |
|---|
| 40 | * Filter the permalink structure for a post before token replacement occurs. |
|---|
| 41 | * |
|---|
| 42 | * Only applies to posts with post_type of 'post'. |
|---|
| 43 | * |
|---|
| 44 | * @since 3.0.0 |
|---|
| 45 | * |
|---|
| 46 | * @param string $permalink The site's permalink structure. |
|---|
| 47 | * @param WP_Post $post The post in question. |
|---|
| 48 | * @param bool $leavename Whether to keep the post name. |
|---|
| 49 | */ |
|---|
| 50 | $permalink = apply_filters( 'pre_post_link', $permalink, $post, $leavename ); |
|---|
| 51 | |
|---|
| 52 | if ( '' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft')) ) { |
|---|
| 53 | $unixtime = strtotime($post->post_date); |
|---|
| 54 | |
|---|
| 55 | $category = ''; |
|---|
| 56 | if ( strpos($permalink, '%category%') !== false ) { |
|---|
| 57 | $cats = get_the_category($post->ID); |
|---|
| 58 | if ( $cats ) { |
|---|
| 59 | usort($cats, '_usort_terms_by_ID'); // order by ID |
|---|
| 60 | |
|---|
| 61 | /** |
|---|
| 62 | * Filter the category that gets used in the %category% permalink token. |
|---|
| 63 | * |
|---|
| 64 | * @since 3.5.0 |
|---|
| 65 | * |
|---|
| 66 | * @param stdClass $cat The category to use in the permalink. |
|---|
| 67 | * @param array $cats Array of all categories associated with the post. |
|---|
| 68 | * @param WP_Post $post The post in question. |
|---|
| 69 | */ |
|---|
| 70 | $category_object = apply_filters( 'post_link_category', $cats[0], $cats, $post ); |
|---|
| 71 | |
|---|
| 72 | $category_object = get_term( $category_object, 'category' ); |
|---|
| 73 | $category = $category_object->slug; |
|---|
| 74 | if ( $parent = $category_object->parent ) |
|---|
| 75 | $category = get_category_parents($parent, false, '/', true) . $category; |
|---|
| 76 | } |
|---|
| 77 | // show default category in permalinks, without |
|---|
| 78 | // having to assign it explicitly |
|---|
| 79 | if ( empty($category) ) { |
|---|
| 80 | $default_category = get_term( get_option( 'default_category' ), 'category' ); |
|---|
| 81 | $category = is_wp_error( $default_category ) ? '' : $default_category->slug; |
|---|
| 82 | } |
|---|
| 83 | } |
|---|
| 84 | |
|---|
| 85 | $author = ''; |
|---|
| 86 | if ( strpos($permalink, '%author%') !== false ) { |
|---|
| 87 | $authordata = get_userdata($post->post_author); |
|---|
| 88 | $author = $authordata->user_nicename; |
|---|
| 89 | } |
|---|
| 90 | |
|---|
| 91 | $date = explode(" ",date('Y m d H i s', $unixtime)); |
|---|
| 92 | $rewritereplace = |
|---|
| 93 | array( |
|---|
| 94 | $date[0], |
|---|
| 95 | $date[1], |
|---|
| 96 | $date[2], |
|---|
| 97 | $date[3], |
|---|
| 98 | $date[4], |
|---|
| 99 | $date[5], |
|---|
| 100 | $post->post_name, |
|---|
| 101 | $post->ID, |
|---|
| 102 | $category, |
|---|
| 103 | $author, |
|---|
| 104 | $post->post_name, |
|---|
| 105 | ); |
|---|
| 106 | $permalink = home_url( str_replace($rewritecode, $rewritereplace, $permalink) ); |
|---|
| 107 | $permalink = user_trailingslashit($permalink, 'single'); |
|---|
| 108 | } else { // if they're not using the fancy permalink option |
|---|
| 109 | $permalink = home_url('?p=' . $post->ID); |
|---|
| 110 | } |
|---|
| 111 | |
|---|
| 112 | /** |
|---|
| 113 | * Filter the permalink for a post. |
|---|
| 114 | * |
|---|
| 115 | * Only applies to posts with post_type of 'post'. |
|---|
| 116 | * |
|---|
| 117 | * @since 1.5.0 |
|---|
| 118 | * |
|---|
| 119 | * @param string $permalink The post's permalink. |
|---|
| 120 | * @param WP_Post $post The post in question. |
|---|
| 121 | * @param bool $leavename Whether to keep the post name. |
|---|
| 122 | */ |
|---|
| 123 | return apply_filters( 'post_link', $permalink, $post, $leavename ); |
|---|
| 124 | } |
|---|
| 125 | |
|---|
| 126 | |
|---|
| 127 | $count = 100000; |
|---|
| 128 | |
|---|
| 129 | $page = get_post( 2 ); |
|---|
| 130 | |
|---|
| 131 | timer_start(); |
|---|
| 132 | for ( $i = 0; $i < $count; $i++ ) { |
|---|
| 133 | $link = get_permalink( $page ); |
|---|
| 134 | } |
|---|
| 135 | printf( 'get_permalink(): %s seconds<br />', timer_stop( 0, 3 ) ); |
|---|
| 136 | |
|---|
| 137 | timer_start(); |
|---|
| 138 | for ( $i = 0; $i < $count; $i++ ) { |
|---|
| 139 | $link = get_permalink_with_obj( $page ); |
|---|
| 140 | } |
|---|
| 141 | printf( 'get_permalink_with_obj(): %s seconds<br />', timer_stop( 0, 3 ) ); |
|---|