PageRenderTime 53ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/wp-content/plugins/w3-total-cache/lib/W3/PageUrls.php

https://bitbucket.org/mrmustarde/manhattan-beach
PHP | 736 lines | 478 code | 109 blank | 149 comment | 104 complexity | 40a960b525b6c4a83272cb8892f201a4 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. class W3_PageUrls
  3. {
  4. private $domain_url;
  5. private $home_url;
  6. private $frontpage_urls = array();
  7. private $postpage_urls = array();
  8. private $post_urls = array();
  9. private $yearly_archive_urls = array();
  10. private $monthly_archive_urls = array();
  11. private $daily_archive_urls = array();
  12. private $post_terms_urls = array();
  13. private $post_author_urls;
  14. private $pages_urls;
  15. private $feed_terms_urls;
  16. private $feed_author_urls;
  17. private $feed_comments_urls;
  18. private $feed_urls;
  19. private $post_comments_urls;
  20. /**
  21. * @param null $domain_url
  22. * @param null $home_url
  23. */
  24. function __construct($domain_url = null, $home_url = null) {
  25. $this->domain_url = $domain_url ? $domain_url : w3_get_domain_url();
  26. $this->home_url = $home_url ? $home_url : w3_get_home_url();
  27. }
  28. /**
  29. * Returns full urls for frontpage including older pages
  30. * @param int $limit_post_pages default is 10
  31. * @return array
  32. */
  33. function get_frontpage_urls($limit_post_pages = 10) {
  34. if (!isset($this->frontpage_urls[$limit_post_pages])) {
  35. $front_page = get_option('show_on_front');
  36. $full_urls = array();
  37. $home_path = w3_get_home_path();
  38. $site_path = w3_get_site_path();
  39. $full_urls[] = $this->home_url . '/';
  40. if ($site_path != $home_path) {
  41. $full_urls[] = w3_get_site_url() . '/';
  42. }
  43. if ($front_page == 'posts')
  44. $full_urls = array_merge($full_urls, $this->get_older_pages($home_path, $limit_post_pages));
  45. $this->frontpage_urls[$limit_post_pages] = $full_urls;
  46. }
  47. return $this->frontpage_urls[$limit_post_pages];
  48. }
  49. /**
  50. * Return full urls for the page with posts including older pages
  51. * @param int $limit_post_pages default is 10
  52. * @return array
  53. */
  54. function get_postpage_urls($limit_post_pages = 10) {
  55. if (!isset($this->postpage_urls[$limit_post_pages])) {
  56. $posts_page_uri = '';
  57. $full_urls = array();
  58. $posts_page_id = get_option('page_for_posts');
  59. if($posts_page_id) {
  60. $posts_page_uri = get_page_uri($posts_page_id);
  61. $page_link = $this->home_url . '/' . trim($posts_page_uri, '/') . '/';
  62. $full_urls[] = $page_link;
  63. }
  64. if ($posts_page_uri)
  65. $full_urls = array_merge($full_urls, $this->get_older_pages($posts_page_uri,$limit_post_pages));
  66. $this->postpage_urls[$limit_post_pages] = $full_urls;
  67. }
  68. return $this->postpage_urls[$limit_post_pages];
  69. }
  70. /**
  71. * Return older pages listing posts
  72. * @param $posts_page_uri
  73. * @param int $limit_post_pages default is 10
  74. * @return array
  75. */
  76. private function get_older_pages($posts_page_uri, $limit_post_pages = 10) {
  77. $full_urls = array();
  78. $count_posts = wp_count_posts();
  79. $posts_number = $count_posts->publish;
  80. $posts_per_page = get_option('posts_per_page');
  81. $posts_pages_number = @ceil($posts_number / $posts_per_page);
  82. if ($limit_post_pages > 0 && $posts_pages_number > $limit_post_pages) {
  83. $posts_pages_number = $limit_post_pages;
  84. }
  85. for ($pagenum = 2; $pagenum <= $posts_pages_number; $pagenum++) {
  86. $home_pagenum_link = $this->get_pagenum_link($posts_page_uri, $pagenum);
  87. $full_urls[] = $home_pagenum_link;
  88. }
  89. return $full_urls;
  90. }
  91. /**
  92. * Returns all urls related to a post
  93. * @param $post_id
  94. * @return array
  95. */
  96. function get_post_urls($post_id) {
  97. if (!isset($this->post_urls[$post_id])) {
  98. $full_urls = array();
  99. $post_link = post_permalink($post_id);
  100. $post_uri = str_replace($this->domain_url, '', $post_link);
  101. $full_urls[] = $post_link;
  102. $uris[] = $post_uri;
  103. $post = isset($post)? $post: get_post($post_id);
  104. $matches =array();
  105. if (($post_pages_number = preg_match_all('/\<\!\-\-nextpage\-\-\>/', $post->post_content,$matches))>0) {
  106. global $wp_rewrite;
  107. $post_pages_number++;
  108. for ($pagenum = 2; $pagenum <= $post_pages_number; $pagenum++) {
  109. if ( 'page' == get_option('show_on_front') && get_option('page_on_front') == $post->ID )
  110. $post_pagenum_link = trailingslashit($post_link) . user_trailingslashit("$wp_rewrite->pagination_base/" . $pagenum, 'single_paged');
  111. else
  112. $post_pagenum_link = trailingslashit($post_link) . user_trailingslashit($pagenum, 'single_paged');
  113. $full_urls[] = $post_pagenum_link;
  114. }
  115. }
  116. $this->post_urls[$post_id] = $full_urls;
  117. }
  118. return $this->post_urls[$post_id];
  119. }
  120. /**
  121. * Return full urls for the posts comment pages
  122. * @param $post_id
  123. * @return array
  124. */
  125. function get_post_comments_urls($post_id) {
  126. if (!isset($this->post_comments_urls[$post_id])) {
  127. $full_urls = array();
  128. $comments_number = get_comments_number($post_id);
  129. $comments_per_page = get_option('comments_per_page');
  130. $comments_pages_number = @ceil($comments_number / $comments_per_page);
  131. for ($pagenum = 1; $pagenum <= $comments_pages_number; $pagenum++) {
  132. $comments_pagenum_link = $this->get_comments_pagenum_link($post_id, $pagenum);
  133. $full_urls[] = $comments_pagenum_link;
  134. }
  135. $this->post_comments_urls[$post_id] = $full_urls;
  136. }
  137. return $this->post_comments_urls[$post_id];
  138. }
  139. /**
  140. * Return full urls for the authors pages
  141. * @param $post_author
  142. * @param int $limit_post_pages default is 10
  143. * @return array
  144. */
  145. function get_post_author_urls($post_author, $limit_post_pages = 10) {
  146. $key = md5($post_author . ',' . $limit_post_pages);
  147. if (!isset($this->post_author_urls[$key])) {
  148. $full_urls = array();
  149. $posts_number = count_user_posts($post_author);
  150. $posts_per_page = get_option('posts_per_page');
  151. $posts_pages_number = @ceil($posts_number / $posts_per_page);
  152. if ($limit_post_pages > 0 && $posts_pages_number > $limit_post_pages) {
  153. $posts_pages_number = $limit_post_pages;
  154. }
  155. $author_link = get_author_posts_url($post_author);
  156. $author_uri = str_replace($this->domain_url, '', $author_link);
  157. for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) {
  158. $author_pagenum_link = $this->get_pagenum_link($author_uri, $pagenum);
  159. $full_urls[] = $author_pagenum_link;
  160. }
  161. $this->post_author_urls[$key] = $full_urls;
  162. }
  163. return $this->post_author_urls[$key];
  164. }
  165. /**
  166. * Returns full urls to post terms pages
  167. * @param $terms
  168. * @param int $limit_post_pages default is 10
  169. * @return array
  170. */
  171. function get_post_terms_urls($terms, $limit_post_pages = 10) {
  172. $key = md5($this->_term_hash($terms) . ',' . $limit_post_pages);
  173. if (!isset($this->post_terms_urls[$key])) {
  174. $full_urls = array();
  175. $posts_per_page = get_option('posts_per_page');
  176. foreach ($terms as $term) {
  177. $term_link = get_term_link($term, $term->taxonomy);
  178. $term_uri = str_replace($this->domain_url, '', $term_link);
  179. $posts_pages_number = @ceil($term->count / $posts_per_page);
  180. if ($limit_post_pages > 0 && $posts_pages_number > $limit_post_pages) {
  181. $posts_pages_number = $limit_post_pages;
  182. }
  183. for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) {
  184. $term_pagenum_link = $this->get_pagenum_link($term_uri, $pagenum);
  185. $full_urls[] = $term_pagenum_link;
  186. }
  187. }
  188. $this->post_terms_urls[$key] = $full_urls;
  189. }
  190. return $this->post_terms_urls[$key];
  191. }
  192. /**
  193. * Return full urls for daily archive pages based on provided post
  194. * @param $post
  195. * @param int $limit_post_pages default is 10
  196. * @return array
  197. */
  198. function get_daily_archive_urls($post, $limit_post_pages = 10) {
  199. $post_type = $post->post_type;
  200. $archive_slug = $this->_get_archive_slug($post);
  201. $key = md5($post->ID . ',' . $limit_post_pages);
  202. if (!isset($this->daily_archive_urls[$key])) {
  203. $full_urls = array();
  204. $post_date = strtotime($post->post_date);
  205. $post_year = gmdate('Y', $post_date);
  206. $post_month = gmdate('m', $post_date);
  207. $post_day = gmdate('d', $post_date);
  208. $posts_per_page = get_option('posts_per_page');
  209. $posts_number = $this->get_archive_posts_count($post_year, $post_month, $post_day, $post_type);
  210. $posts_pages_number = @ceil($posts_number / $posts_per_page);
  211. if ($limit_post_pages > 0 && $posts_pages_number > $limit_post_pages) {
  212. $posts_pages_number = $limit_post_pages;
  213. }
  214. $day_link = get_day_link($post_year, $post_month, $post_day);
  215. $day_uri = $archive_slug . str_replace($this->domain_url, '', $day_link);
  216. for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) {
  217. $day_pagenum_link = $this->get_pagenum_link($day_uri, $pagenum);
  218. $full_urls[] = $day_pagenum_link;
  219. }
  220. $this->daily_archive_urls[$key] = $full_urls;
  221. }
  222. return $this->daily_archive_urls[$key];
  223. }
  224. /**
  225. * Return full urls for montly archive pages based on provided post
  226. * @param $post
  227. * @param int $limit_post_pages default is 10
  228. * @return array
  229. */
  230. function get_monthly_archive_urls($post, $limit_post_pages = 10) {
  231. $post_type = $post->post_type;
  232. $archive_slug = $this->_get_archive_slug($post);
  233. $key = md5($post->ID . ',' . $limit_post_pages);
  234. if (!isset($this->monthly_archive_urls[$key])) {
  235. $full_urls = array();
  236. $post_date = strtotime($post->post_date);
  237. $post_year = gmdate('Y', $post_date);
  238. $post_month = gmdate('m', $post_date);
  239. $posts_per_page = get_option('posts_per_page');
  240. $posts_number = $this->get_archive_posts_count($post_year, $post_month, '', $post_type);
  241. $posts_pages_number = @ceil($posts_number / $posts_per_page);
  242. if ($limit_post_pages > 0 && $posts_pages_number > $limit_post_pages) {
  243. $posts_pages_number = $limit_post_pages;
  244. }
  245. $month_link = get_month_link($post_year, $post_month);
  246. $month_uri = $archive_slug . str_replace($this->domain_url, '', $month_link);
  247. for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) {
  248. $month_pagenum_link = $this->get_pagenum_link($month_uri, $pagenum);
  249. $full_urls[] = $month_pagenum_link;
  250. }
  251. $this->monthly_archive_urls[$key] = $full_urls;
  252. }
  253. return $this->monthly_archive_urls[$key];
  254. }
  255. /**
  256. * Return full urls for yearly archive pages based on provided post
  257. * @param $post
  258. * @param int $limit_post_pages default is 10
  259. * @return array
  260. */
  261. function get_yearly_archive_urls($post, $limit_post_pages = 10) {
  262. $post_type = $post->post_type;
  263. $archive_slug = $this->_get_archive_slug($post);
  264. $key = md5($post->ID . ',' . $limit_post_pages);
  265. if (!isset($this->yearly_archive_urls[$key])) {
  266. $full_urls = array();
  267. $post_date = strtotime($post->post_date);
  268. $post_year = gmdate('Y', $post_date);
  269. $posts_per_page = get_option('posts_per_page');
  270. $posts_number =$this->get_archive_posts_count($post_year, '', '', $post_type);
  271. $posts_pages_number = @ceil($posts_number / $posts_per_page);
  272. if ($limit_post_pages > 0 && $posts_pages_number > $limit_post_pages) {
  273. $posts_pages_number = $limit_post_pages;
  274. }
  275. $year_link = get_year_link($post_year);
  276. $year_uri = $archive_slug . str_replace($this->domain_url, '', $year_link);
  277. for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) {
  278. $year_pagenum_link = $this->get_pagenum_link($year_uri, $pagenum);
  279. $full_urls[] = $year_pagenum_link;
  280. }
  281. $this->yearly_archive_urls[$key] = $full_urls;
  282. }
  283. return $this->yearly_archive_urls[$key];
  284. }
  285. /**
  286. * Return full urls for the provided feed types
  287. * @param $feeds
  288. * @param string|null $post_type
  289. * @return array
  290. */
  291. function get_feed_urls($feeds, $post_type = null) {
  292. $key = md5(implode(',', $feeds) . $post_type);
  293. if (!isset($this->feed_urls[$key])) {
  294. $full_urls = array();
  295. foreach ($feeds as $feed) {
  296. $feed_link = $this->get_feed_link($feed, $post_type);
  297. $full_urls[] = $feed_link;
  298. }
  299. $this->feed_urls[$key] = $full_urls;
  300. }
  301. return $this->feed_urls[$key];
  302. }
  303. /**
  304. * Return full urls for the provided post id and feed types
  305. * @param $post_id
  306. * @param $feeds
  307. * @return array
  308. */
  309. function get_feed_comments_urls($post_id, $feeds) {
  310. $key = md5(implode(',', $feeds) . $post_id);
  311. if (!isset($this->feed_comments_urls[$key])) {
  312. $full_urls = array();
  313. foreach ($feeds as $feed) {
  314. $post_comments_feed_link = $this->get_post_comments_feed_link($post_id, $feed);
  315. $full_urls[] = $post_comments_feed_link;
  316. }
  317. $this->feed_comments_urls[$key] = $full_urls;
  318. }
  319. return $this->feed_comments_urls[$key];
  320. }
  321. /**
  322. * Returns full urls for the provided post author and feed types
  323. * @param $post_author
  324. * @param $feeds
  325. * @return array
  326. */
  327. function get_feed_author_urls($post_author, $feeds) {
  328. $key = md5(implode(',', $feeds) . $post_author);
  329. if (!isset($this->feed_author_urls[$key])) {
  330. $full_urls = array();
  331. foreach ($feeds as $feed) {
  332. $author_feed_link = $this->get_author_feed_link($post_author, $feed);
  333. $full_urls[] = $author_feed_link;
  334. }
  335. $this->feed_author_urls[$key] = $full_urls;
  336. }
  337. return $this->feed_author_urls[$key];
  338. }
  339. /**
  340. * Returns full urls for the provided terms and feed types
  341. * @param $terms
  342. * @param $feeds
  343. * @return array
  344. */
  345. function get_feed_terms_urls($terms, $feeds) {
  346. $key = md5(implode(',', $feeds) . $this->_term_hash($terms));
  347. if (!isset($this->feed_terms_urls[$key])) {
  348. $full_urls = array();
  349. foreach ($terms as $term) {
  350. foreach ($feeds as $feed) {
  351. $term_feed_link = $this->get_term_feed_link($term->term_id, $term->taxonomy, $feed);
  352. $full_urls[] = $term_feed_link;
  353. }
  354. }
  355. $this->feed_terms_urls[$key] = $full_urls;
  356. }
  357. return $this->feed_terms_urls[$key];
  358. }
  359. /**
  360. * Returns full urls for the provided url path based pages, ie /some/page.
  361. * @param $pages
  362. * @return array
  363. */
  364. function get_pages_urls($pages) {
  365. $key = md5(implode(',', $pages));
  366. if (!isset($this->pages_urls[$key])) {
  367. $full_urls = array();
  368. foreach ($pages as $page_slug) {
  369. if ($page_slug) {
  370. $page_link = $this->home_url . '/' . trim($page_slug, '/') . '/';
  371. $full_urls[] = $page_link;
  372. }
  373. }
  374. $this->pages_urls[$key] = $full_urls;
  375. }
  376. return $this->pages_urls[$key];
  377. }
  378. /**
  379. * Workaround for get_pagenum_link function
  380. *
  381. * @param string $url
  382. * @param int $pagenum
  383. * @return string
  384. */
  385. function get_pagenum_link($url, $pagenum = 1) {
  386. $request_uri = $_SERVER['REQUEST_URI'];
  387. $_SERVER['REQUEST_URI'] = $url;
  388. if (is_admin()) {
  389. $link = $this->get_pagenum_link_admin($pagenum);
  390. } else {
  391. $link = get_pagenum_link($pagenum);
  392. }
  393. $_SERVER['REQUEST_URI'] = $request_uri;
  394. return $link;
  395. }
  396. /**
  397. * Workaround for get_pagenum_link function when in admin
  398. * @param $pagenum
  399. * @return string
  400. */
  401. function get_pagenum_link_admin($pagenum) {
  402. global $wp_rewrite;
  403. $pagenum = (int) $pagenum;
  404. $request = remove_query_arg( 'paged' );
  405. $home_root = parse_url(home_url());
  406. $home_root = ( isset($home_root['path']) ) ? $home_root['path'] : '';
  407. $home_root = preg_quote( trailingslashit( $home_root ), '|' );
  408. $request = preg_replace('|^'. $home_root . '|', '', $request);
  409. $request = preg_replace('|^/+|', '', $request);
  410. $qs_regex = '|\?.*?$|';
  411. preg_match( $qs_regex, $request, $qs_match );
  412. if ( !empty( $qs_match[0] ) ) {
  413. $query_string = $qs_match[0];
  414. $request = preg_replace( $qs_regex, '', $request );
  415. } else {
  416. $query_string = '';
  417. }
  418. $request = preg_replace( "|$wp_rewrite->pagination_base/\d+/?$|", '', $request);
  419. $request = preg_replace( '|^index\.php|', '', $request);
  420. $request = ltrim($request, '/');
  421. $base = trailingslashit( get_bloginfo( 'url' ) );
  422. if ( $wp_rewrite->using_index_permalinks() && ( $pagenum > 1 || '' != $request ) )
  423. $base .= 'index.php/';
  424. if ( $pagenum > 1 ) {
  425. $request = ( ( !empty( $request ) ) ? trailingslashit( $request ) : $request ) . user_trailingslashit( $wp_rewrite->pagination_base . "/" . $pagenum, 'paged' );
  426. }
  427. $result = $base . $request . $query_string;
  428. $result = apply_filters('get_pagenum_link', $result);
  429. return $result;
  430. }
  431. /**
  432. * Workaround for get_comments_pagenum_link function
  433. *
  434. * @param integer $post_id
  435. * @param integer $pagenum
  436. * @param integer $max_page
  437. * @return string
  438. */
  439. function get_comments_pagenum_link($post_id, $pagenum = 1, $max_page = 0) {
  440. if (isset($GLOBALS['post']) && is_object($GLOBALS['post'])) {
  441. $old_post = &$GLOBALS['post'];
  442. } else {
  443. $GLOBALS['post'] = new stdClass();
  444. $old_post = null;
  445. }
  446. $GLOBALS['post']->ID = $post_id;
  447. $link = get_comments_pagenum_link($pagenum, $max_page);
  448. if ($old_post) {
  449. $GLOBALS['post'] = &$old_post;
  450. }
  451. return $link;
  452. }
  453. /**
  454. * Returns number of posts in the archive
  455. *
  456. * @param int $year
  457. * @param int $month
  458. * @param int $day
  459. * @return int
  460. */
  461. function get_archive_posts_count($year = 0, $month = 0, $day = 0, $post_type/* = 'post'*/) {
  462. global $wpdb;
  463. $filters = array(
  464. 'post_type = "' . $post_type .'"',
  465. 'post_status = "publish"'
  466. );
  467. if ($year) {
  468. $filters[] = sprintf('YEAR(post_date) = %d', $year);
  469. }
  470. if ($month) {
  471. $filters[] = sprintf('MONTH(post_date) = %d', $month);
  472. }
  473. if ($day) {
  474. $filters[] = sprintf('DAY(post_date) = %d', $day);
  475. }
  476. $where = implode(' AND ', $filters);
  477. $sql = sprintf('SELECT COUNT(*) FROM %s WHERE %s', $wpdb->posts, $where);
  478. $count = (int) $wpdb->get_var($sql);
  479. return $count;
  480. }
  481. /**
  482. * Workaround for get_feed_link function, remove filtering.
  483. * @param string $feed
  484. * @param null|string $post_type
  485. * @return mixed
  486. */
  487. function get_feed_link($feed = '', $post_type=null) {
  488. /**
  489. * @var $wp_rewrite WP_Rewrite
  490. */
  491. global $wp_rewrite;
  492. if ($post_type)
  493. return get_post_type_archive_feed_link($post_type, $feed);
  494. $permalink = $wp_rewrite->get_feed_permastruct();
  495. if ( '' != $permalink ) {
  496. if ( false !== strpos($feed, 'comments_') ) {
  497. $feed = str_replace('comments_', '', $feed);
  498. $permalink = $wp_rewrite->get_comment_feed_permastruct();
  499. }
  500. if ( get_default_feed() == $feed )
  501. $feed = '';
  502. $permalink = str_replace('%feed%', $feed, $permalink);
  503. $permalink = preg_replace('#/+#', '/', "/$permalink");
  504. $output = home_url( user_trailingslashit($permalink, 'feed') );
  505. } else {
  506. if ( empty($feed) )
  507. $feed = get_default_feed();
  508. if ( false !== strpos($feed, 'comments_') )
  509. $feed = str_replace('comments_', 'comments-', $feed);
  510. $output = home_url("?feed={$feed}");
  511. }
  512. return $output;
  513. }
  514. /**
  515. * Workaround for get_post_comments_feed_link function, remove filtering.
  516. * @param int $post_id
  517. * @param string $feed
  518. * @return string
  519. */
  520. function get_post_comments_feed_link($post_id = 0, $feed = '') {
  521. $post_id = absint( $post_id );
  522. if ( ! $post_id )
  523. $post_id = get_the_ID();
  524. if ( empty( $feed ) )
  525. $feed = get_default_feed();
  526. if ( '' != get_option('permalink_structure') ) {
  527. if ( 'page' == get_option('show_on_front') && $post_id == get_option('page_on_front') )
  528. $url = _get_page_link( $post_id );
  529. else
  530. $url = get_permalink($post_id);
  531. $url = trailingslashit($url) . 'feed';
  532. if ( $feed != get_default_feed() )
  533. $url .= "/$feed";
  534. $url = user_trailingslashit($url, 'single_feed');
  535. } else {
  536. $type = get_post_field('post_type', $post_id);
  537. if ( 'page' == $type )
  538. $url = home_url("?feed=$feed&amp;page_id=$post_id");
  539. else
  540. $url = home_url("?feed=$feed&amp;p=$post_id");
  541. }
  542. return $url;
  543. }
  544. /**
  545. * Workaround for get_author_feed_link function, remove filtering.
  546. * @param $author_id
  547. * @param string $feed
  548. * @return string
  549. */
  550. function get_author_feed_link( $author_id, $feed = '' ) {
  551. $author_id = (int) $author_id;
  552. $permalink_structure = get_option('permalink_structure');
  553. if ( empty($feed) )
  554. $feed = get_default_feed();
  555. if ( '' == $permalink_structure ) {
  556. $link = home_url("?feed=$feed&amp;author=" . $author_id);
  557. } else {
  558. $link = get_author_posts_url($author_id);
  559. if ( $feed == get_default_feed() )
  560. $feed_link = 'feed';
  561. else
  562. $feed_link = "feed/$feed";
  563. $link = trailingslashit($link) . user_trailingslashit($feed_link, 'feed');
  564. }
  565. return $link;
  566. }
  567. /**
  568. * Workaround for get_term_feed_link function, remove filtering.
  569. * @param $term_id
  570. * @param string $taxonomy
  571. * @param string $feed
  572. * @return bool|string
  573. */
  574. function get_term_feed_link( $term_id, $taxonomy = 'category', $feed = '' ) {
  575. $term_id = ( int ) $term_id;
  576. $term = get_term( $term_id, $taxonomy );
  577. if ( empty( $term ) || is_wp_error( $term ) )
  578. return false;
  579. if ( empty( $feed ) )
  580. $feed = get_default_feed();
  581. $permalink_structure = get_option( 'permalink_structure' );
  582. if ( '' == $permalink_structure ) {
  583. if ( 'category' == $taxonomy ) {
  584. $link = home_url("?feed=$feed&amp;cat=$term_id");
  585. }
  586. elseif ( 'post_tag' == $taxonomy ) {
  587. $link = home_url("?feed=$feed&amp;tag=$term->slug");
  588. } else {
  589. $t = get_taxonomy( $taxonomy );
  590. $link = home_url("?feed=$feed&amp;$t->query_var=$term->slug");
  591. }
  592. } else {
  593. $link = get_term_link( $term_id, $term->taxonomy );
  594. if ( $feed == get_default_feed() )
  595. $feed_link = 'feed';
  596. else
  597. $feed_link = "feed/$feed";
  598. $link = trailingslashit( $link ) . user_trailingslashit( $feed_link, 'feed' );
  599. }
  600. return $link;
  601. }
  602. private function _term_hash($terms) {
  603. $term_hash = array();
  604. foreach($terms as $term)
  605. $term_hash[] = $term->term_id;
  606. $term_hashed = md5(implode(',', $term_hash));
  607. return $term_hashed;
  608. }
  609. /**
  610. * @param $post
  611. * @return string
  612. */
  613. private function _get_archive_slug($post) {
  614. $archive_slug = '';
  615. global $wp_post_types;
  616. $args = $wp_post_types[$post->post_type];
  617. if ( $args->has_archive ) {
  618. global $wp_rewrite;
  619. $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive;
  620. if ( $args->rewrite['with_front'] )
  621. $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
  622. else
  623. $archive_slug = $wp_rewrite->root . $archive_slug;
  624. }
  625. return $archive_slug;
  626. }
  627. }