PageRenderTime 116ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/nextpost-master/next-post.php

https://gitlab.com/bhargavi_dcw/dflocal
PHP | 279 lines | 204 code | 48 blank | 27 comment | 20 complexity | 12691781288c7b22f3c98d52cf05576f MD5 | raw file
  1. <?php
  2. /*
  3. Plugin Name: Next Post
  4. Plugin URI: http://adampatterson.ca
  5. Description: Provides shortcodes and template tags for next/previous navigation in custom post types.
  6. Version: 1
  7. License: GPLv2
  8. Author: Adam Patterson
  9. Author URI: http://adampatterson.ca
  10. */
  11. add_action('admin_menu', 'next_post_add_posts');
  12. register_activation_hook(__FILE__, 'next_post_activation');
  13. function next_post_activation() {
  14. // remove old options
  15. $oldoptions = array();
  16. $oldoptions[] = get_option('next_post__before_prev_link');
  17. $oldoptions[] = get_option('next_post__prev_link_text');
  18. $oldoptions[] = get_option('next_post__after_prev_link');
  19. $oldoptions[] = get_option('next_post__before_parent_link');
  20. $oldoptions[] = get_option('next_post__parent_link_text');
  21. $oldoptions[] = get_option('next_post__after_parent_link');
  22. $oldoptions[] = get_option('next_post__before_next_link');
  23. $oldoptions[] = get_option('next_post__next_link_text');
  24. $oldoptions[] = get_option('next_post__after_next_link');
  25. $oldoptions[] = get_option('next_post__exclude');
  26. delete_option('next_post__before_prev_link');
  27. delete_option('next_post__prev_link_text');
  28. delete_option('next_post__after_prev_link');
  29. delete_option('next_post__before_parent_link');
  30. delete_option('next_post__parent_link_text');
  31. delete_option('next_post__after_parent_link');
  32. delete_option('next_post__before_next_link');
  33. delete_option('next_post__next_link_text');
  34. delete_option('next_post__after_next_link');
  35. delete_option('next_post__exclude');
  36. // set defaults
  37. $options = array();
  38. $options['before_prev_link'] = '<div class="alignleft">';
  39. $options['prev_link_text'] = __('Previous:', 'next-post').' %title%';
  40. $options['after_prev_link'] = '</div>';
  41. $options['before_parent_link'] = '<div class="aligncenter">';
  42. $options['parent_link_text'] = __('Up one level:', 'next-post').' %title%';
  43. $options['after_parent_link'] = '</div>';
  44. $options['before_next_link'] = '<div class="alignright">';
  45. $options['next_link_text'] = __('Next:', 'next-post').' %title%';
  46. $options['after_next_link'] = '</div>';
  47. $options['exclude'] = '';
  48. $options['loop'] = 0;
  49. // set new option
  50. add_option('next_post', array_merge($oldoptions, $options), '', 'yes');
  51. }
  52. // when uninstalled, remove option
  53. register_uninstall_hook( __FILE__, 'next_post_delete_options' );
  54. function next_post_delete_options() {
  55. delete_option('next_post');
  56. }
  57. // i18n
  58. if (!defined('WP_PLUGIN_DIR'))
  59. define('WP_PLUGIN_DIR', dirname(dirname(__FILE__)));
  60. function next_post_plugin_actions($links, $file) {
  61. if ($file == 'next-post/next-post.php' && function_exists("admin_url")) {
  62. $settings_link = '<a href="' . admin_url('options-general.php?post=next-post') . '">' . __('Settings', 'next-post') . '</a>';
  63. array_unshift($links, $settings_link);
  64. }
  65. return $links;
  66. }
  67. add_filter('plugin_action_links', 'next_post_plugin_actions', 10, 2);
  68. add_action('admin_init', 'register_next_post_options' );
  69. function register_next_post_options(){
  70. register_setting( 'next_post', 'next_post' );
  71. }
  72. function next_post_add_posts() {
  73. // Add a new submenu under Options:
  74. $css = add_options_page('Next post', 'Next post', 'manage_options', 'next-post', 'next_post_options');
  75. add_action("admin_head-$css", 'next_post_css');
  76. }
  77. function next_post_css() { ?>
  78. <style type="text/css">
  79. #next-post, #parent-post, #previous-post { float: left; width: 30%; margin-right: 5%; }
  80. #next-post { margin-right: 0; }
  81. </style>
  82. <?php
  83. }
  84. // displays the options post content
  85. function next_post_options() { ?>
  86. <div class="wrap">
  87. <form method="post" id="next_post_form" action="options.php">
  88. <?php settings_fields('next_post');
  89. $options = get_option('next_post'); ?>
  90. <h2><?php _e( 'Next post Options', 'next-post'); ?></h2>
  91. <p><?php _e("On the first and last posts in the sequence:", 'next-post'); ?><br />
  92. <label><input type="radio" name="next_post[loop]" id="loop" value="1" <?php checked('1', $options['loop']); ?> />
  93. <?php _e("Loop around, showing links back to the beginning or end", 'next-post'); ?></label><br />
  94. <label><input type="radio" name="next_post[loop]" id="loop" value="0" <?php checked('0', $options['loop']); ?> />
  95. <?php _e("Omit the empty link", 'next-post'); ?></label>
  96. </p>
  97. <p><label><?php _e("Exclude posts: ", 'next-post'); ?><br />
  98. <input type="text" name="next_post[exclude]" id="exclude"
  99. value="<?php echo $options['exclude']; ?>" /><br />
  100. <small><?php _e("Enter post IDs separated by commas.", 'next-post'); ?></small></label></p>
  101. <div id="previous-post">
  102. <h3><?php _e("Previous post Display:", 'next-post'); ?></h3>
  103. <p><label><?php _e("Before previous post link: ", 'next-post'); ?><br />
  104. <input type="text" name="next_post[before_prev_link]" id="before_prev_link"
  105. value="<?php echo esc_html($options['before_prev_link']); ?>" /> </label></p>
  106. <p><label><?php _e("Previous post link text: <small>Use %title% for the post title</small>", 'next-post'); ?><br />
  107. <input type="text" name="next_post[prev_link_text]" id="prev_link_text"
  108. value="<?php echo esc_html($options['prev_link_text']); ?>" /> </label></p>
  109. <p><label><?php _e("After previous post link: ", 'next-post'); ?><br />
  110. <input type="text" name="next_post[after_prev_link]" id="after_prev_link"
  111. value="<?php echo esc_html($options['after_prev_link']); ?>" /> </label></p>
  112. <p><?php _e('Shortcode:'); ?> <strong>[previous_custom_post]</strong><br />
  113. <?php _e('Template tag:'); ?> <strong>&lt;?php previous_custom_post(); ?&gt;</strong></p>
  114. </div>
  115. <div id="next-post">
  116. <h3><?php _e("Next post Display:", 'next-post'); ?></h3>
  117. <p><label><?php _e("Before next post link: ", 'next-post'); ?><br />
  118. <input type="text" name="next_post[before_next_link]" id="before_next_link"
  119. value="<?php echo esc_html($options['before_next_link']); ?>" /> </label></p>
  120. <p><label><?php _e("Next post link text: <small>Use %title% for the post title</small>", 'next-post'); ?><br />
  121. <input type="text" name="next_post[next_link_text]" id="next_link_text"
  122. value="<?php echo esc_html($options['next_link_text']); ?>" /> </label></p>
  123. <p><label><?php _e("After next post link: ", 'next-post'); ?><br />
  124. <input type="text" name="next_post[after_next_link]" id="after_next_link"
  125. value="<?php echo esc_html($options['after_next_link']); ?>" /> </label></p>
  126. <p><?php _e('Shortcode:'); ?> <strong>[next_custom_post]</strong><br />
  127. <?php _e('Template tag:'); ?> <strong>&lt;?php next_custom_post(); ?&gt;</strong></p>
  128. </div>
  129. <p class="submit">
  130. <input type="submit" name="submit" class="button-primary" value="<?php _e('Update Options', 'next-post'); ?>" />
  131. </p>
  132. </form>
  133. </div>
  134. <?php
  135. } // end function next_post_options()
  136. // make the magic happen
  137. function flatten_post_list($exclude = '') {
  138. global $post, $wpdb;
  139. $category = get_the_category( $post->ID );
  140. $catid= $category[0]->term_id;
  141. if ( empty( $post ) )
  142. return null;
  143. // Get the list of post types. Default to current post type
  144. if ( empty($post_type) )
  145. $post_type = "'$post->post_type'";
  146. $args = 'sort_column=menu_order&sort_order=asc&posts_per_page=100&cat='.$catid.'&post_type='.$post_type;
  147. $postlist = get_posts($args);
  148. $myposts = array();
  149. if (!empty($exclude)) {
  150. $excludes = split(',', $exclude);
  151. foreach ($postlist as $thispost) {
  152. if (!in_array($thispost->ID, $excludes)) {
  153. $myposts[] += $thispost->ID;
  154. }
  155. }
  156. }
  157. else {
  158. foreach ($postlist as $thispost) {
  159. $myposts[] += $thispost->ID;
  160. }
  161. }
  162. return $myposts;
  163. }
  164. function get_next_custom_post() {
  165. global $post;
  166. $options = get_option('next_post');
  167. $exclude = $options['exclude'];
  168. $postlist = flatten_post_list($exclude);
  169. /*echo "<pre>";
  170. print_r($postlist);*/
  171. $current = array_search($post->ID, $postlist);
  172. $nextID = $postlist[$current+1];
  173. if (!isset($nextID))
  174. if ($options['loop'])
  175. $nextID = $postlist[0];
  176. else
  177. return '';
  178. $before_link = stripslashes($options['before_next_link']);
  179. $linkurl = get_permalink($nextID);
  180. $category = get_the_category( $post->ID );
  181. //$nxt='/work/?id='. $category[0]->term_id;
  182. $title = substr(get_the_title($nextID), 0, 10);
  183. $linktext = $options['next_link_text'];
  184. if (strpos($linktext, '%title%') !== false)
  185. $linktext = str_replace('%title%', $title, $linktext);
  186. $after_link = stripslashes($options['after_next_link']);
  187. $link = '<a href="'.$linkurl.'" title="' . $title . '"><h3>NEXT PROJECT:'. $title.'</h3>' .$before_link . $after_link.'</a>';
  188. //$link = $before_link . '<a href="' . $linkurl . '" title="' . $title . '">' . $linktext . '</a>' . $after_link;
  189. return $link;
  190. }
  191. function get_previous_custom_post() {
  192. global $post;
  193. $options = get_option('next_post');
  194. $exclude = $options['exclude'];
  195. $postlist = flatten_post_list($exclude);
  196. $current = array_search($post->ID, $postlist);
  197. $prevID = $postlist[$current-1];
  198. if (!isset($prevID))
  199. if ($options['loop'])
  200. $prevID = $postlist[count($postlist) - 1];
  201. else
  202. return '';
  203. $before_link = stripslashes($options['before_prev_link']);
  204. $linkurl = get_permalink($prevID);
  205. $title = get_the_title($prevID);
  206. $linktext = $options['prev_link_text'];
  207. if (strpos($linktext, '%title%') !== false)
  208. $linktext = str_replace('%title%', $title, $linktext);
  209. $after_link = stripslashes($options['after_prev_link']);
  210. $link = '<a href="'.$linkurl.'" title="' . $title . '"><i class="fa fa-backward" aria-hidden="true"></i>'. $before_link . $linktext . $after_link.'</a>';
  211. //$link = $before_link . '<a href="' . $linkurl . '" title="' . $title . '">' . $linktext . '</a>' . $after_link;
  212. return $link;
  213. }
  214. function next_custom_post() {
  215. echo get_next_custom_post();
  216. }
  217. function previous_custom_post() {
  218. echo get_previous_custom_post();
  219. }
  220. // shortcodes
  221. add_shortcode('next_custom_post', 'get_next_custom_post');
  222. add_shortcode('previous_custom_post', 'get_previous_link');
  223. // pre-3.1 compatibility, lifted from wp-includes/formatting.php
  224. if (!function_exists('esc_html')) {
  225. function esc_html( $text ) {
  226. $safe_text = wp_check_invalid_utf8( $text );
  227. $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
  228. return apply_filters( 'esc_html', $safe_text, $text );
  229. }
  230. }
  231. ?>