PageRenderTime 49ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/plugins/next-page/next-page.php

https://github.com/petergibbons/OpenCounterWP
PHP | 306 lines | 234 code | 51 blank | 21 comment | 22 complexity | 3f17539a9fdd5eed449999c3df31cd67 MD5 | raw file
  1. <?php
  2. /*
  3. Plugin Name: Next Page
  4. Plugin URI: http://sillybean.net/code/wordpress/next-page/
  5. Description: Provides shortcodes and template tags for next/previous navigation in pages.
  6. Version: 1.5.1
  7. License: GPLv2
  8. Author: Stephanie Leary
  9. Author URI: http://sillybean.net/
  10. */
  11. add_action('admin_menu', 'next_page_add_pages');
  12. register_activation_hook(__FILE__, 'next_page_activation');
  13. function next_page_activation() {
  14. // remove old options
  15. $oldoptions = array();
  16. $oldoptions[] = get_option('next_page__before_prev_link');
  17. $oldoptions[] = get_option('next_page__prev_link_text');
  18. $oldoptions[] = get_option('next_page__after_prev_link');
  19. $oldoptions[] = get_option('next_page__before_parent_link');
  20. $oldoptions[] = get_option('next_page__parent_link_text');
  21. $oldoptions[] = get_option('next_page__after_parent_link');
  22. $oldoptions[] = get_option('next_page__before_next_link');
  23. $oldoptions[] = get_option('next_page__next_link_text');
  24. $oldoptions[] = get_option('next_page__after_next_link');
  25. $oldoptions[] = get_option('next_page__exclude');
  26. delete_option('next_page__before_prev_link');
  27. delete_option('next_page__prev_link_text');
  28. delete_option('next_page__after_prev_link');
  29. delete_option('next_page__before_parent_link');
  30. delete_option('next_page__parent_link_text');
  31. delete_option('next_page__after_parent_link');
  32. delete_option('next_page__before_next_link');
  33. delete_option('next_page__next_link_text');
  34. delete_option('next_page__after_next_link');
  35. delete_option('next_page__exclude');
  36. // set defaults
  37. $options = array();
  38. $options['before_prev_link'] = '<div class="alignleft">';
  39. $options['prev_link_text'] = __('Previous:', 'next-page').' %title%';
  40. $options['after_prev_link'] = '</div>';
  41. $options['before_parent_link'] = '<div class="aligncenter">';
  42. $options['parent_link_text'] = __('Up one level:', 'next-page').' %title%';
  43. $options['after_parent_link'] = '</div>';
  44. $options['before_next_link'] = '<div class="alignright">';
  45. $options['next_link_text'] = __('Next:', 'next-page').' %title%';
  46. $options['after_next_link'] = '</div>';
  47. $options['exclude'] = '';
  48. $options['loop'] = 0;
  49. // set new option
  50. add_option('next_page', array_merge($oldoptions, $options), '', 'yes');
  51. }
  52. // when uninstalled, remove option
  53. register_uninstall_hook( __FILE__, 'next_page_delete_options' );
  54. function next_page_delete_options() {
  55. delete_option('next_page');
  56. }
  57. // i18n
  58. if (!defined('WP_PLUGIN_DIR'))
  59. define('WP_PLUGIN_DIR', dirname(dirname(__FILE__)));
  60. $lang_dir = basename(dirname(__FILE__)). '/languages';
  61. load_plugin_textdomain( 'next_page', 'WP_PLUGIN_DIR'.$lang_dir, $lang_dir );
  62. function next_page_plugin_actions($links, $file) {
  63. if ($file == 'next-page/next-page.php' && function_exists("admin_url")) {
  64. $settings_link = '<a href="' . admin_url('options-general.php?page=next-page') . '">' . __('Settings', 'next-page') . '</a>';
  65. array_unshift($links, $settings_link);
  66. }
  67. return $links;
  68. }
  69. add_filter('plugin_action_links', 'next_page_plugin_actions', 10, 2);
  70. add_action('admin_init', 'register_next_page_options' );
  71. function register_next_page_options(){
  72. register_setting( 'next_page', 'next_page' );
  73. }
  74. function next_page_add_pages() {
  75. // Add a new submenu under Options:
  76. $css = add_options_page('Next Page', 'Next Page', 'manage_options', 'next-page', 'next_page_options');
  77. add_action("admin_head-$css", 'next_page_css');
  78. }
  79. function next_page_css() { ?>
  80. <style type="text/css">
  81. #next-page, #parent-page, #previous-page { float: left; width: 30%; margin-right: 5%; }
  82. #next-page { margin-right: 0; }
  83. </style>
  84. <?php
  85. }
  86. // displays the options page content
  87. function next_page_options() { ?>
  88. <div class="wrap">
  89. <form method="post" id="next_page_form" action="options.php">
  90. <?php settings_fields('next_page');
  91. $options = get_option('next_page'); ?>
  92. <h2><?php _e( 'Next Page Options', 'next-page'); ?></h2>
  93. <p><?php _e("On the first and last pages in the sequence:", 'next-page'); ?><br />
  94. <label><input type="radio" name="next_page[loop]" id="loop" value="1" <?php checked('1', $options['loop']); ?> />
  95. <?php _e("Loop around, showing links back to the beginning or end", 'next-page'); ?></label><br />
  96. <label><input type="radio" name="next_page[loop]" id="loop" value="0" <?php checked('0', $options['loop']); ?> />
  97. <?php _e("Omit the empty link", 'next-page'); ?></label>
  98. </p>
  99. <p><label><?php _e("Exclude pages: ", 'next-page'); ?><br />
  100. <input type="text" name="next_page[exclude]" id="exclude"
  101. value="<?php echo $options['exclude']; ?>" /><br />
  102. <small><?php _e("Enter page IDs separated by commas.", 'next-page'); ?></small></label></p>
  103. <div id="previous-page">
  104. <h3><?php _e("Previous Page Display:", 'next-page'); ?></h3>
  105. <p><label><?php _e("Before previous page link: ", 'next-page'); ?><br />
  106. <input type="text" name="next_page[before_prev_link]" id="before_prev_link"
  107. value="<?php echo esc_html($options['before_prev_link']); ?>" /> </label></p>
  108. <p><label><?php _e("Previous page link text: <small>Use %title% for the page title</small>", 'next-page'); ?><br />
  109. <input type="text" name="next_page[prev_link_text]" id="prev_link_text"
  110. value="<?php echo esc_html($options['prev_link_text']); ?>" /> </label></p>
  111. <p><label><?php _e("After previous page link: ", 'next-page'); ?><br />
  112. <input type="text" name="next_page[after_prev_link]" id="after_prev_link"
  113. value="<?php echo esc_html($options['after_prev_link']); ?>" /> </label></p>
  114. <p><?php _e('Shortcode:'); ?> <strong>[previous]</strong><br />
  115. <?php _e('Template tag:'); ?> <strong>&lt;?php previous_link(); ?&gt;</strong></p>
  116. </div>
  117. <div id="parent-page">
  118. <h3><?php _e("Parent Page Display:", 'next-page'); ?></h3>
  119. <p><label><?php _e("Before parent page link: ", 'next-page'); ?><br />
  120. <input type="text" name="next_page[before_parent_link]" id="before_parent_link"
  121. value="<?php echo esc_html($options['before_parent_link']); ?>" /> </label></p>
  122. <p><label><?php _e("Parent page link text: <small>Use %title% for the page title</small>", 'next-page'); ?><br />
  123. <input type="text" name="next_page[parent_link_text]" id="parent_link_text"
  124. value="<?php echo esc_html($options['parent_link_text']); ?>" /> </label></p>
  125. <p><label><?php _e("After parent page link: ", 'next-page'); ?><br />
  126. <input type="text" name="next_page[after_parent_link]" id="after_parent_link"
  127. value="<?php echo esc_html($options['after_parent_link']); ?>" /> </label></p>
  128. <p><?php _e('Shortcode:'); ?> <strong>[parent]</strong><br />
  129. <?php _e('Template tag:'); ?> <strong>&lt;?php parent_link(); ?&gt;</strong></p>
  130. </div>
  131. <div id="next-page">
  132. <h3><?php _e("Next Page Display:", 'next-page'); ?></h3>
  133. <p><label><?php _e("Before next page link: ", 'next-page'); ?><br />
  134. <input type="text" name="next_page[before_next_link]" id="before_next_link"
  135. value="<?php echo esc_html($options['before_next_link']); ?>" /> </label></p>
  136. <p><label><?php _e("Next page link text: <small>Use %title% for the page title</small>", 'next-page'); ?><br />
  137. <input type="text" name="next_page[next_link_text]" id="next_link_text"
  138. value="<?php echo esc_html($options['next_link_text']); ?>" /> </label></p>
  139. <p><label><?php _e("After next page link: ", 'next-page'); ?><br />
  140. <input type="text" name="next_page[after_next_link]" id="after_next_link"
  141. value="<?php echo esc_html($options['after_next_link']); ?>" /> </label></p>
  142. <p><?php _e('Shortcode:'); ?> <strong>[next]</strong><br />
  143. <?php _e('Template tag:'); ?> <strong>&lt;?php next_link(); ?&gt;</strong></p>
  144. </div>
  145. <p class="submit">
  146. <input type="submit" name="submit" class="button-primary" value="<?php _e('Update Options', 'next-page'); ?>" />
  147. </p>
  148. </form>
  149. </div>
  150. <?php
  151. } // end function next_page_options()
  152. // make the magic happen
  153. function flatten_page_list($exclude = '') {
  154. $args = 'sort_column=menu_order&sort_order=asc';
  155. $pagelist = get_pages($args);
  156. $mypages = array();
  157. if (!empty($exclude)) {
  158. $excludes = split(',', $exclude);
  159. foreach ($pagelist as $thispage) {
  160. if (!in_array($thispage->ID, $excludes)) {
  161. $mypages[] += $thispage->ID;
  162. }
  163. }
  164. }
  165. else {
  166. foreach ($pagelist as $thispage) {
  167. $mypages[] += $thispage->ID;
  168. }
  169. }
  170. return $mypages;
  171. }
  172. function get_next_link() {
  173. global $post;
  174. $options = get_option('next_page');
  175. $exclude = $options['exclude'];
  176. $pagelist = flatten_page_list($exclude);
  177. $current = array_search($post->ID, $pagelist);
  178. $nextID = $pagelist[$current+1];
  179. if (!isset($nextID))
  180. if ($options['loop'])
  181. $nextID = $pagelist[0];
  182. else
  183. return '';
  184. $before_link = stripslashes($options['before_next_link']);
  185. $linkurl = get_permalink($nextID);
  186. $title = get_the_title($nextID);
  187. $linktext = $options['next_link_text'];
  188. if (strpos($linktext, '%title%') !== false)
  189. $linktext = str_replace('%title%', $title, $linktext);
  190. $after_link = stripslashes($options['after_next_link']);
  191. $link = $before_link . '<a href="' . $linkurl . '" title="' . $title . '">' . $linktext . '</a>' . $after_link;
  192. return $link;
  193. }
  194. function get_previous_link() {
  195. global $post;
  196. $options = get_option('next_page');
  197. $exclude = $options['exclude'];
  198. $pagelist = flatten_page_list($exclude);
  199. $current = array_search($post->ID, $pagelist);
  200. $prevID = $pagelist[$current-1];
  201. if (!isset($prevID))
  202. if ($options['loop'])
  203. $prevID = $pagelist[count($pagelist) - 1];
  204. else
  205. return '';
  206. $before_link = stripslashes($options['before_prev_link']);
  207. $linkurl = get_permalink($prevID);
  208. $title = get_the_title($prevID);
  209. $linktext = $options['prev_link_text'];
  210. if (strpos($linktext, '%title%') !== false)
  211. $linktext = str_replace('%title%', $title, $linktext);
  212. $after_link = stripslashes($options['after_prev_link']);
  213. $link = $before_link . '<a href="' . $linkurl . '" title="' . $title . '">' . $linktext . '</a>' . $after_link;
  214. return $link;
  215. }
  216. function get_parent_link() {
  217. global $post;
  218. $options = get_option('next_page');
  219. $parentID = $post->post_parent;
  220. $exclude = array($options['exclude']);
  221. if (in_array($parentID, $exclude)) return false;
  222. else {
  223. $before_link = stripslashes($options['before_parent_link']);
  224. $linkurl = get_permalink($parentID);
  225. $title = get_the_title($parentID);
  226. $linktext = $options['parent_link_text'];
  227. if (strpos($linktext, '%title%') !== false)
  228. $linktext = str_replace('%title%', $title, $linktext);
  229. $after_link = stripslashes($options['after_parent_link']);
  230. $link = $before_link . '<a href="' . $linkurl . '" title="' . $title . '">' . $linktext . '</a>' . $after_link;
  231. return $link;
  232. }
  233. }
  234. function next_link() {
  235. echo get_next_link();
  236. }
  237. function previous_link() {
  238. echo get_previous_link();
  239. }
  240. function parent_link() {
  241. echo get_parent_link();
  242. }
  243. // shortcodes
  244. add_shortcode('previous', 'get_previous_link');
  245. add_shortcode('next', 'get_next_link');
  246. add_shortcode('parent', 'get_parent_link');
  247. // pre-3.1 compatibility, lifted from wp-includes/formatting.php
  248. if (!function_exists('esc_html')) {
  249. function esc_html( $text ) {
  250. $safe_text = wp_check_invalid_utf8( $text );
  251. $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
  252. return apply_filters( 'esc_html', $safe_text, $text );
  253. }
  254. }
  255. ?>