support private pages
-
Great plugin thanks. I use private pages to control access to documentation and by default this plugin won’t show private pages. I have added this capability as a short-code attribute, pasted the code below (file ccchildpages.php), all altered lines contain “post_status”.
<?php /** * ccchildpages * */ class ccchildpages { // Used to uniquely identify this plugin's menu page in the WP manager const admin_menu_slug = 'ccchildpages'; // Plugin name const plugin_name = 'CC Child Pages'; // Plugin version const plugin_version = '1.35'; // ID Count protected static $cc_id_counter; // Initialise class public static function init($value=0) { self::$cc_id_counter = $value; } // Get unique ID public static function get_unique_id() { self::$cc_id_counter++; return self::$cc_id_counter; } public static function load_plugin_textdomain( ) { load_plugin_textdomain( 'cc-child-pages', FALSE, dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' ); } public static function show_child_pages( $atts ) { // Get unique id for this instance of CC Child Pages $cc_uid = self::get_unique_id(); // Store current page ID $cc_current_page_id = get_the_ID(); // Store image size details in case we need to output Video Thumbnails, etc. which may be external files $img_sizes = get_intermediate_image_sizes(); $img_sizes[] = 'full'; // allow "virtual" image size ... $default_atts = apply_filters( 'ccchildpages_defaults' , array( 'id' => get_the_ID(), 'page_ids' => '', 'posts_per_page' => -1, 'limit' => -1, 'page' => -1, 'cols' => '', 'depth' => '1', 'exclude' => '', 'exclude_tree' => '', 'skin' => 'simple', 'class' => '', 'orderby' => 'menu_order', 'order' => 'ASC', 'link_titles' => 'false', 'title_link_class' => 'ccpage_title_link', 'hide_more' => 'false', 'hide_excerpt' => 'false', 'show_page_content' => 'false', 'truncate_excerpt' => 'true', 'list' => 'false', 'link_thumbs' => 'false', 'thumbs' => 'false', 'more' => __('Read more ...', 'cc-child-pages'), 'link' => '', 'siblings' => 'false', 'show_current_page' => 'false', 'hide_wp_more' => 'false', 'use_custom_excerpt' => '', 'use_custom_title'=> '', 'use_custom_more' => '', 'use_custom_link' => 'cc_child_pages_link', 'use_custom_link_target' => 'cc_child_pages_link_target', 'ignore_sticky_posts' => 'true', 'offset' => 0, 'words' => 55, 'subpage_title' => '', 'link_target' => '', 'show_author' => 'false', 'show_date_created' => 'false', 'show_date_modified' => 'false', 'post_status' => 'publish', )); $a = shortcode_atts( $default_atts, $atts ); $a = apply_filters( 'ccchildpages_attributes', $a); $post_status = $a['post_status']; // If we are displaying siblings, set starting point to page parent and add current page to exclude list if ( strtolower(trim($a['siblings'])) == 'true' ) { $a['id'] = wp_get_post_parent_id( get_the_ID() ) ? wp_get_post_parent_id( get_the_ID() ) : 0; if ( strtolower(trim($a['show_current_page'])) != 'true' ) { if ( $a['exclude'] != '' ) $a['exclude'] .= ','; $a['exclude'] .= get_the_ID(); } } $depth = intval($a['depth']); if ( strtolower(trim($a['list'])) != 'true' && $a['cols'] == '' ) $a['cols']='3'; switch ( $a['cols'] ) { case '4': $class = 'fourcol'; $cols = 4; break; case '3': $class = 'threecol'; $cols = 3; break; case '2': $class = 'twocol'; $cols = 2; break; case '1': $class = 'onecol'; $cols = 1; break; default: $class = ''; $cols = 1; } switch ( $a['skin'] ) { case 'red': $skin = 'ccred'; break; case 'green': $skin = 'ccgreen'; break; case 'blue': $skin = 'ccblue'; break; default: $skin = 'simple'; } if ( strtolower(trim($a['list'])) == 'true' ) { $list = TRUE; } else { $list = FALSE; } if ( strtolower(trim($a['truncate_excerpt'])) == 'true' ) { $truncate_excerpt = TRUE; } else { $truncate_excerpt = FALSE; } if ( strtolower(trim($a['link_titles'])) == 'true' ) { $link_titles = TRUE; $title_link_class = trim($a['title_link_class']); } else { $link_titles = FALSE; } if ( strtolower(trim($a['hide_more'])) == 'true' ) { $hide_more = TRUE; } else { $hide_more = FALSE; } if ( strtolower(trim($a['hide_wp_more'])) == 'true' ) { $hide_wp_more = TRUE; } else { $hide_wp_more = FALSE; } if ( strtolower(trim($a['hide_excerpt'])) == 'true' ) { $hide_excerpt = TRUE; } else { $hide_excerpt = FALSE; } if ( strtolower(trim($a['show_page_content'])) == 'true' ) { $show_page_content = TRUE; } else { $show_page_content = FALSE; } if ( strtolower(trim($a['ignore_sticky_posts'])) == 'true' ) { $ignore_sticky_posts = TRUE; } else { $ignore_sticky_posts = FALSE; } if ( strtolower(trim($a['show_author'])) == 'true' ) { $show_author = TRUE; } else { $show_author = FALSE; } if ( strtolower(trim($a['show_date_created'])) == 'true' ) { $show_date_created = TRUE; } else { $show_date_created = FALSE; } if ( strtolower(trim($a['show_date_modified'])) == 'true' ) { $show_date_modified = TRUE; } else { $show_date_modified = FALSE; } $offset = ( intval($a['offset']) > 0 ) ? intval($a['offset']) : 0; if ( $a['order'] == 'ASC' ) { $order = 'ASC'; } else { $order = 'DESC'; } switch ( $a['orderby'] ) { case 'post_id': case 'id': case 'ID': $orderby = 'ID'; break; case 'post_author': case 'author': if ( $list ) { $orderby = 'post_author'; } else { $orderby = 'author'; } break; case 'random': case 'rand': case 'RANDOM': case 'RAND': $orderby = 'rand'; break; case 'post_date': case 'date': if ( $list ) { $orderby = 'post_date'; } else { $orderby = 'date'; } break; case 'post_modified': case 'modified': if ( $list ) { $orderby = 'post_modified'; } else { $orderby = 'modified'; } break; case 'post_title': case 'title': if ( $list ) { $orderby = 'post_title'; } else { $orderby = 'title'; } break; case 'post_name': case 'name': case 'slug': if ( $list ) { $orderby = 'post_name'; } else { $orderby = 'name'; } break; default: $orderby = 'menu_order'; } if ( strtolower(trim($a['link_thumbs'])) == 'true' ) { $link_thumbs = TRUE; } else { $link_thumbs = FALSE; } if ( strtolower(trim($a['thumbs'])) == 'true' ) { $thumbs = 'medium'; } else if ( strtolower(trim($a['thumbs'])) == 'false' ) { $thumbs = FALSE; } else { $thumbs = strtolower(trim($a['thumbs'])); if ( ! in_array( $thumbs, $img_sizes ) ) $thumbs = 'medium'; } $more = esc_html(trim($a['more'])); // default // if class is specified, substitue value for skin class if ( $a['class'] != '' ) $skin = trim(esc_html($a['class'])); $outer_template = str_replace( '{{class}}', $class, apply_filters('ccchildpages_outer_template','<div id="ccchildpages-' . $cc_uid . '" class="ccchildpages {{class}} {{skin}} ccclearfix">{{ccchildpages}}</div>', $a) ); $outer_template = str_replace( '{{skin}}', $skin, $outer_template ); $inner_template = apply_filters('ccchildpages_inner_template','<div class="ccchildpage {{page_class}}"><h3{{title_class}}>{{title}}</h3>{{meta}}{{thumbnail}}{{excerpt}}{{more}}</div>', $a); $meta_template = apply_filters('ccchildpages_meta_template','<p class="small cc-meta-info">{{meta}}</p>', $a); // $return_html = '<div class="ccchildpages ' . $class .' ' . $skin . ' ccclearfix">'; $page_id = $a['id']; if ( $list ) { $args = array( 'title_li' => '', 'child_of' => $page_id, 'echo' => 0, 'depth' => $depth, 'exclude' => $a['exclude'], 'sort_order' => $order, 'sort_column' => $orderby, 'post_status' => $post_status, ); $post_type = get_post_type( $page_id ); $args['post_type'] = $post_type; $args = apply_filters('ccchildpages_list_pages_args', $args, $a); $page_count = 0; $return_html = '<ul class="ccchildpages_list ccclearfix">'; $page_list = trim(wp_list_pages( $args )); if ( $page_list == '' ) return ''; $return_html .= $page_list; $return_html .= '</ul>'; } else { $return_html = ''; $posts_array = explode(',', $page_id); // Allow for comma separated lists of IDs $post_count = count ($posts_array); $posts_per_page = intval($a['posts_per_page']); $page = intval($a['page']); $ccpage_var = ( is_front_page() ? 'page' : 'ccpage' . $cc_uid ); $ccpaged = ( get_query_var( $ccpage_var ) ) ? absint( get_query_var( $ccpage_var ) ) : 1; $args = array( // 'post_type' => 'page', // 'post_type' => $post_type, 'posts_per_page' => $posts_per_page, // 'post_parent' => $page_id, 'order' => $order, 'orderby' => $orderby, // 'post__not_in' => explode(',', $a['exclude']), 'ignore_sticky_posts' => $ignore_sticky_posts, 'post_status' => $post_status, ); if ( trim($a['exclude']) != '' ) { $args['post__not_in'] = explode(',', $a['exclude']); } if ( $posts_per_page > 0 ) { $args['paged'] = $ccpaged; // If page has been set manually, override any pagination if ( $page > 0 ) { $args['paged'] = $page; } } else { if ( intval($a['limit']) > 0 ) { // If limit is specified, show only that number of pages $args['posts_per_page'] = intval($a['limit']); $args['paged'] = 1; } } if ( $offset > 0 ) $args['offset'] = $offset; if ( $post_count > 1 ) { // Multiple IDs specified, so set the post_parent__in parameter $args['post_parent__in'] = $posts_array; /* // get post_type for each post specified ... $post_type_array = array(); foreach ( $posts_array as $post_id ) { // Get post_type $post_type = get_post_type( $post_id ); if ( ! in_array($post_type, $post_type_array) ) $post_type_array[] = $post_type; } $args['post_type'] = $post_type_array; */ $args['post_type'] = 'any'; } else { // Single ID specified, so set the post_parent parameter $args['post_parent'] = $page_id; $args['post_type'] = get_post_type( $page_id ); } if ( $a['page_ids'] != '' ) { // Multiple specific posts specified, so unset unwanted values in $args then build the lists of IDs unset($args['post_parent']); unset($args['post_parent__in']); $posts_array = explode( ',', $a['page_ids'] ); $args['post__in'] = $posts_array; $args['orderby'] = 'post__in'; /* // get post_type for each post specified ... $post_type_array = array(); foreach ( $posts_array as $post_id ) { // Get post_type $post_type = get_post_type( $post_id ); if ( ! in_array($post_type, $post_type_array) ) $post_type_array[] = $post_type; } $args['post_type'] = $post_type_array; */ $args['post_type'] = 'any'; } $args['ccchildpages'] = 'true'; $args = apply_filters('ccchildpages_query_args', $args, $a); $parent = new WP_Query( $args ); if ( ! $parent->have_posts() ) return ''; $page_count = 0; while ( $parent->have_posts() ) { $tmp_html = $inner_template; $parent->the_post(); $id = get_the_ID(); $page_count++; if ( $page_count%$cols == 0 && $cols > 1) { $page_class = ' cclast'; } else if ( $page_count%$cols == 1 && $cols > 1 ) { $page_class = ' ccfirst'; } else { $page_class = ''; } if ( $page_count%2 == 0 ) { $page_class .= ' cceven'; } else { $page_class .= ' ccodd'; } $page_class .= ' ccpage-count-' . $page_count; $page_class .= ' ccpage-id-' . $id; $page_class .= ' ccpage-' . self::the_slug($id); /* Check to see if link has been specified */ if ( $a['link'] == '' ) { $link = get_permalink($id); } else { $link = $a['link']; } /* Check to see if custom link has been specified */ $use_custom_link = trim($a['use_custom_link']); if ( $use_custom_link != '' && $custom_meta_link = get_post_meta( $id, $use_custom_link, TRUE ) ) { $link = ( trim( $custom_meta_link ) != '' ) ? trim( $custom_meta_link ) : $link; } /* Check to see if target has been specified */ if ( $a['link_target'] == '' ) { $link_target = ''; } else { $link_target = $a['link_target']; } /* Check to see if custom target has been specified */ $use_custom_link_target = trim($a['use_custom_link_target']); if ( $use_custom_link_target != '' && $custom_meta_link_target = get_post_meta( $id, $use_custom_link_target, TRUE ) ) { $link_target = ( trim( $custom_meta_link_target ) != '' ) ? trim( $custom_meta_link_target ) : $link_target; } if ( $id == $cc_current_page_id ) { $page_class .= ' active current-page cccurrent'; } $tmp_html = str_replace('{{page_class}}', $page_class, $tmp_html); $title_value = get_the_title(); // default $use_custom_title = trim($a['use_custom_title']); $meta_title = ''; // default - no meta_title // If meta title field specified, get the value if ( $use_custom_title != '' ) { // Get value of custom field to be used as title $meta_title = trim(get_post_meta($id, $use_custom_title, TRUE)); // If value from custom field is set, use that - otherwise use page title if ( $meta_title != '' ) { $title_value = esc_html(trim($meta_title)); } } if ( ! $link_titles ) { $title_html = $title_value; $title_class = ''; } else { $title_html = '<a class="' . $title_link_class . '" href="' . $link . '"'; if ( $link_target != '' ) $title_html .= ' target="' . $link_target . '"'; $title_html .= ' title="' . $title_value . '">' . $title_value . '</a>'; $title_class = ' class="ccpage_linked_title"'; } $tmp_html = str_replace('{{title}}', $title_html, $tmp_html); $tmp_html = str_replace('{{title_class}}', $title_class, $tmp_html); $meta = array(); if ( $show_author ) { $meta[] = '<span class="cc-meta-data">' . __( 'Author: ', 'cc-child-pages') . get_the_author_link() . '</span>'; } if ( $show_date_created ) { $meta[] = '<span class="cc-meta-data">' . __( 'Created: ', 'cc-child-pages') . get_the_date() . '</span>'; } if ( $show_date_modified ) { $meta[] = '<span class="cc-meta-data">' . __( 'Modified: ', 'cc-child-pages') . get_the_date() . '</span>'; } if ( count( $meta ) > 0 ) { $tmp_meta = implode( ', ', $meta ); $meta_html = str_replace('{{meta}}', $tmp_meta, $meta_template); } else { $meta_html = ''; } $tmp_html = str_replace('{{meta}}', $meta_html, $tmp_html); $thumb_url = ''; $thumbs_html = ''; if ( $thumbs != FALSE ) { $thumb_attr = array( 'class' => "cc-child-pages-thumb", 'alt' => $title_value, 'title' => $title_value, ); // Get the thumbnail code ... $thumbnail = get_the_post_thumbnail($id, $thumbs, $thumb_attr); if ( $thumbnail != '' ) { // Thumbnail found, so set thumb_url to actual URL of thumbnail $tmp_thumb_id = get_post_thumbnail_id($id); $tmp_thumb_url_array = wp_get_attachment_image_src($tmp_thumb_id, 'thumbnail-size', true); $thumb_url = $tmp_thumb_url_array[0]; } // If no thumbnail found, request a "Video Thumbnail" (if plugin installed) // to try and force generation of thumbnail if ( $thumbnail == '' ) { // Check whether Video Thumbnail plugin is installed. // If so, call get_video_thumbnail() to make sure that thumnail is generated. if ( class_exists('Video_Thumbnails') && function_exists( 'get_video_thumbnail' ) ) { // Call get_video_thumbnail to generate video thumbnail $video_img = get_video_thumbnail($id); // If we got a result, display the image if ( $video_img != '' ) { // First, try to pick up the thumbnail in case it has been regenerated (may be the case if automatic featured image is turned on) $thumbnail = get_the_post_thumbnail($id, $thumbs, $thumb_attr); // If thumbnail hasn't been regenerated, use Video Thumbnail (may be the full size image) if ( $thumbnail == '' ) { // First, try and find the attachment ID from the URL $attachment_id = self::get_attachment_id($video_img); $thumb_url = $video_img; if ( $attachment_id != FALSE ) { // Attachment found, get thumbnail $thumbnail = wp_get_attachment_image( $attachment_id, $thumbs ) . "\n\n<!-- Thumbnail attachment -->\n\n"; } else { $thumbnail .= '<img src="' . $video_img . '" alt="' . $title_value . '" />'; } } } } } // If thumbnail is found, display it. if ( $thumbnail != '' ) { if ( $link_thumbs ) { $thumbs_html = '<a class="ccpage_linked_thumb" href="' . $link . '"'; if ( $link_target != '' ) $thumbs_html .= ' target="' . $link_target . '"'; $thumbs_html .= ' title="' . $title_value . '">' . $thumbnail . '</a>'; } else { $thumbs_html = $thumbnail; } } } $tmp_html = str_replace('{{thumbnail}}', $thumbs_html, $tmp_html); $tmp_html = str_replace('{{thumbnail_url}}', $thumb_url, $tmp_html); $page_excerpt = ''; $excerpt_template = apply_filters('ccchildpages_excerpt_template', '<div class="ccpages_excerpt">{{page_excerpt}}</div>', $a); if ( $show_page_content ) { if ( $hide_wp_more ) { $page_excerpt = get_the_content(''); } else { $hide_more = TRUE; $page_excerpt = get_the_content(); } // Remove any [child_pages] shortcodes to avoid creating an infinite loop $page_excerpt = ccchildpages::strip_shortcode( $page_excerpt ); $page_excerpt = do_shortcode( $page_excerpt ); $page_excerpt = apply_filters('the_content', $page_excerpt); $page_excerpt = str_replace( '{{page_excerpt}}', $page_excerpt, $excerpt_template ); } elseif ( ! $hide_excerpt ) { $words = ( intval($a['words']) > 0 ? intval($a['words']) : 55 ); $use_custom_excerpt = trim($a['use_custom_excerpt']); $meta_excerpt = ''; // default - no meta_excerpt // If meta excerpt field specified, get the value if ( $use_custom_excerpt != '' ) { // Get value of custom field to be used as excerpt $meta_excerpt = trim(get_post_meta($id, $use_custom_excerpt, TRUE)); } // If value from custom field is set, use that - otherwise use page content if ( $meta_excerpt != '' ) { $page_excerpt = trim($meta_excerpt); } else if ( has_excerpt() ) { $page_excerpt = get_the_excerpt(); if ( str_word_count(strip_tags($page_excerpt) ) > $words && $truncate_excerpt ) $page_excerpt = wp_trim_words( $page_excerpt, $words, '...' ); } else { if ( $hide_wp_more ) { $page_excerpt = get_the_content(''); // get full page content without continue link } else { $page_excerpt = get_the_content(); // get full page content including continue link } // Remove any [child_pages] shortcodes to avoid creating an infinite loop $page_excerpt = ccchildpages::strip_shortcode( $page_excerpt ); $page_excerpt = do_shortcode( $page_excerpt ); if ( str_word_count( wp_trim_words($page_excerpt, $words+10, '') ) > $words ) { // If page content is longer than allowed words, $trunc = '...'; } else { // If page content is within allowed word count, do not add anything to the end of it $trunc = ''; } $page_excerpt = wp_trim_words( $page_excerpt, $words, $trunc ); } $page_excerpt = str_replace( '{{page_excerpt}}', $page_excerpt, $excerpt_template ); } $child_list_html = ''; if ( $depth != 1) { $child_depth = ( $depth > 1 ) ? $depth -1 : $depth; $child_args = array( 'depth' => $child_depth, 'child_of' => $id, 'echo' => false, 'title_li' => '' ); $child_list_title = apply_filters('ccchildpages_child_list_title', '<h4 class="ccsubpages_title">{{subpage_title}}</h4>', $a); $child_list_title = ( trim($a['subpage_title']) == '' ) ? '' : str_replace('{{subpage_title}}', $a['subpage_title'], $child_list_title); $child_list_template = apply_filters('ccchildpages_child_list_template', '<div class="ccsubpages">{{child_list_title}}<ul>{{child_list}}</ul></div>', $a); $child_list = wp_list_pages($child_args); if ( trim($child_list) != '' ) { $child_list_html = str_replace('{{child_list_title}}', $child_list_title, $child_list_template);; $child_list_html = str_replace('{{child_list}}', $child_list, $child_list_html);; } } $tmp_html = str_replace('{{excerpt}}', $page_excerpt, $tmp_html); $more_html = ''; $use_custom_more = trim($a['use_custom_more']); // If meta more field specified, get the value if ( $use_custom_more != '' ) { // Get value of custom field to be used as excerpt $meta_more = trim(get_post_meta($id, $use_custom_more, TRUE)); // If value from custom field is set, use that - otherwise use page title if ( $meta_more != '' ) { $more = esc_html(trim($meta_more)); } } if ( ! $hide_more ) { $more_html = str_replace( '{{more}}', $more, apply_filters('ccchildpages_more_template', '<p class="ccpages_more"><a href="{{link}}" {{link_target}} title="{{more}}">{{more}}</a></p>', $a ) ); } $more_html .= $child_list_html; $tmp_html = str_replace('{{more}}', $more_html, $tmp_html); $tmp_html = str_replace('{{link}}', $link, $tmp_html); if ( $link_target != '' ) { $link_target = 'target="' . $link_target . '"'; } $tmp_html = str_replace('{{link_target}}', $link_target, $tmp_html); $return_html .= $tmp_html; } if ( $posts_per_page > 0 && $page < 1 ) { $cc_link_format = '?' . $ccpage_var . '=%#%'; $cc_num_results = $parent->found_posts; $cc_num_pages = intval(($cc_num_results - $offset)/$posts_per_page); if ( ($cc_num_results - $offset)%$posts_per_page > 0 ) $cc_num_pages++; $return_html .= '<div id="ccpages_nav-' . $cc_uid . '" class="ccpages_nav">' . paginate_links( array( 'format' => $cc_link_format, 'current' => $ccpaged, 'total' => $cc_num_pages ) ) . '</div>'; } // Reset global post query wp_reset_postdata(); } $return_html = str_replace('{{ccchildpages}}', $return_html, $outer_template); $return_html = apply_filters( 'ccchildpages_before_shortcode', '', $a ) . $return_html . apply_filters( 'ccchildpages_after_shortcode', '', $a ); // wp_reset_query(); // Should not be required return $return_html; } public static function enqueue_styles() { $css_file = plugins_url( 'css/styles.css' , __FILE__ ); $css_skin_file = plugins_url( 'css/skins.css' , __FILE__ ); $css_conditional_file = plugins_url( 'css/styles.ie.css' , __FILE__ ); if ( !is_admin() ) { // Load main styles wp_register_style( 'ccchildpagescss', $css_file, false, self::plugin_version ); wp_enqueue_style( 'ccchildpagescss' ); // Load skins wp_register_style( 'ccchildpagesskincss', $css_skin_file, false, self::plugin_version ); wp_enqueue_style( 'ccchildpagesskincss' ); // Conditionally load fallback for older versions of Internet Explorer wp_register_style( 'ccchildpagesiecss', $css_conditional_file, false, self::plugin_version ); wp_enqueue_style( 'ccchildpagesiecss' ); wp_style_add_data( 'ccchildpagesiecss', 'conditional', 'lt IE 8' ); // Load custom CSS $custom_css = self::custom_css(); if ( $custom_css != '' ) { wp_add_inline_style( 'ccchildpagesskincss', $custom_css ); } } } private static function the_slug($id) { $post_data = get_post($id, ARRAY_A); $slug = $post_data['post_name']; return $slug; } public static function dashboard_widgets() { if ( current_user_can( 'update_plugins' ) ) { wp_add_dashboard_widget('cc-child-pages-dashboard', 'CC Child Pages', 'ccchildpages::dashboard_widget_feed'); } } public static function dashboard_widget_feed() { $content = file_get_contents('https://ccplugins.co.uk/feed/'); $x = new SimpleXmlElement($content); echo '<ul>'; foreach($x->channel->item as $entry) { echo '<li><a href="' . $entry->link . '" title="' . $entry->title . '" target="_blank">' . $entry->title . '</a></li>'; } echo '</ul>'; } public static function tinymce_buttons() { if ( $options = get_option('cc_child_pages') ) { if ( empty( $options['show_button'] ) ) { // undefined - so set to true for backward compatibility $show_button = TRUE; } else if ( $options['show_button'] == 'true' ) { $show_button = TRUE; } else { $show_button = FALSE; } } else { $show_button = TRUE; } if ( $show_button ) { add_filter( 'mce_external_plugins', 'ccchildpages::add_childpages_buttons' ); add_filter( 'mce_buttons', 'ccchildpages::register_childpages_buttons' ); } } public static function add_childpages_buttons ( $plugin_array ) { $plugin_array['ccchildpages'] = plugins_url( 'js/ccchildpages-plugin.js' , __FILE__ ); return $plugin_array; } public static function register_childpages_buttons ( $buttons ) { array_push( $buttons, 'ccchildpages'); return $buttons; } /* * Add options page ... */ // Set default values on activation ... public static function options_activation () { $options = array(); $options['show_button'] = 'true'; $options['customcss'] = ''; $options = apply_filters( 'ccchildpages_options', $options ); add_option( 'cc_child_pages', $options, '', 'yes' ); } // Register settings ... public static function register_options () { register_setting( 'cc_child_pages', 'cc_child_pages' ); } // Add submenu public static function options_menu () { add_options_page( 'CC Child Pages', 'CC Child Pages', 'manage_options', 'cc-child-pages', 'ccchildpages::options_page' ); } // Display options page public static function options_page () { ?> <div class="wrap"> <form method="post" id="cc_child_page_form" action="options.php"> <?php $show_button = FALSE; settings_fields('cc_child_pages'); if ( $options = get_option('cc_child_pages') ) { if ( empty( $options['show_button'] ) ) { // undefined - so set to true for backward compatibility $show_button = TRUE; } else if ( $options['show_button'] == 'true' ) { $show_button = TRUE; } $customcss = empty( $options['customcss'] ) ? '' : $options['customcss']; } else { $show_button = TRUE; $customcss = ''; } ?> <h2><?php _e('CC Child Pages options', 'cc-child-pages' ) ?></h2> <p><label><?php _e( 'Add button to the visual editor:', 'cc-child-pages' ); ?> <input type="radio" name="cc_child_pages[show_button]" value="true" <?php checked(TRUE,$show_button) ?> > Yes <input type="radio" name="cc_child_pages[show_button]" value="false" <?php checked(FALSE,$show_button) ?> > No</label></p> <p><label><?php _e( 'Custom CSS:', 'cc-child-pages' ); ?><br /><textarea name="cc_child_pages[customcss]" class="large-text code" rows="10"><?php echo esc_textarea($customcss) ?></textarea></label></p> <?php do_action( 'ccchildpages_options_form', $options ); ?> <p class="submit"><input type="submit" name="submit" class="button-primary" value="<?php _e('Update Options','cc-child-pages'); ?>" /></p> </form> </div> <?php } /* * Output Custom CSS */ public static function custom_css() { $custom_css = ''; if ( $options = get_option('cc_child_pages') ) { if ( ! empty($options['customcss'])) { if ( trim($options['customcss']) != '' ) { $custom_css = trim( $options['customcss'] ); } } } return $custom_css; } /* * Show Excerpt for Pages ... */ public static function show_page_excerpt () { add_post_type_support( 'page', 'excerpt' ); } /* * Get Attachment ID from URL */ public static function get_attachment_id( $url ) { $dir = wp_upload_dir(); // baseurl never has a trailing slash if ( FALSE === strpos( $url, $dir['baseurl'] . '/' ) ) { // URL points to a place outside of upload directory return FALSE; } $file = basename( $url ); $query = array( 'post_type' => 'attachment', 'fields' => 'ids', 'meta_query' => array( array( 'value' => $file, 'compare' => 'LIKE', ),# ) ); $query['meta_query'][0]['key'] = '_wp_attached_file'; // query attachments $ids = get_posts( $query ); if ( ! empty( $ids ) ) { foreach ( $ids as $id ) { // first entry of returned array is the URL $tmp_url = wp_get_attachment_image_src( $id, 'full' ); if ( $url === array_shift( $tmp_url ) ) return $id; } } return FALSE; } /* * Get size information for thumbnail by size */ private static function get_image_dimensions($thumbs) { global $_wp_additional_image_sizes; $dimensions = array(); // If a default image size, use get options method if ( in_array( $thumbs, array( 'thumbnail', 'medium', 'large' ) ) ) { $dimensions['height'] = get_option( $thumbs . '_size_h' ); $dimensions['width'] = get_option( $thumbs . '_size_w' ); } elseif ( isset( $_wp_additional_image_sizes[ $thumbs ] ) ) { $dimensions['height'] = $_wp_additional_image_sizes[ $thumbs ]['height']; $dimensions['width'] = $_wp_additional_image_sizes[ $thumbs ]['width']; } return $dimensions; } /* * Show plugin links */ public static function plugin_action_links( $links ) { $links[] = '<a href="https://www.ads-software.com/support/view/plugin-reviews/cc-child-pages" target="_blank">Rate this plugin...</a>'; // $links[] = '<a href="https://www.ccplugins.co.uk" target="_blank">More from CC Plugins</a>'; return $links; } public static function plugin_row_meta( $links, $file ) { $current_plugin = basename(dirname($file)); if ( $current_plugin =='cc-child-pages' ) { $links[] = '<a href="options-general.php?page=cc-child-pages">' . __('Settings...', 'cc-child-pages') . '</a>'; $links[] = '<a href="https://www.ads-software.com/support/view/plugin-reviews/cc-child-pages" target="_blank">' . __('Rate this plugin...', 'cc-child-pages') . '</a>'; $links[] = '<a href="https://ccchildpages.ccplugins.co.uk/donate/" target="_blank">' . __('Donate...', 'cc-child-pages') . '</a> ' . __('(Your donations keep this plugin free & supported)', 'cc-child-pages'); } return $links; } public static function add_query_strings ( $vars ) { // Register query strings for paging ... for ( $i=1; $i<25; $i++ ) { $vars[] = 'ccpage' . $i; } $vars[] = 'ccchildpages'; return $vars; } public static function query_offset ( &$query ) { // Check that query was called from CC Child Pages if ( ! isset( $query->query_vars['ccchildpages'] ) ) return; if ( $query->query_vars['ccchildpages'] != 'true' ) return; // Check whether offset has been specified $offset = ( isset($query->query_vars['offset']) ) ? intval ( $query->query_vars['offset'] ) : -1; if ( $offset < 1 ) return; // If we made it this far, the query is from CC Child Pages and an Offset has been specified! $posts_per_page = ( isset($query->query_vars['posts_per_page']) ) ? intval( $query->query_vars['posts_per_page'] ) : -1; if ( $query->is_paged ) { $paged = intval( $query->query_vars['paged'] ); if ( $paged > 0 ) { $page_offset = $offset + ( ($paged-1) * $posts_per_page ); } else { $page_offset = $offset; } } else { $page_offset = $offset; } $query->set('offset',$page_offset); // By default, if posts_per_page is set to -1 offset is ignored. // To get around this, if posts_per_page is set to -1 we will set it to something large if ( $posts_per_page < 1 ) $query->set('posts_per_page', 1000000); } public static function exempt_from_wptexturize( $shortcodes ) { $shortcodes[] = 'child_pages'; return $shortcodes; } public static function strip_shortcode( $page_excerpt ) { // Remove any [child_pages] shortcodes to avoid the possibility creating a loop, // and also to avoid the mess that may be created by having nested child pages displayed $page_excerpt = str_replace( '[child_pages]', '', $page_excerpt ); // remove basic shortcode $page_excerpt = preg_replace("~(?:\[child_pages/?)[^/\]]+/?\]~s", '', $page_excerpt); //remove shortcode with parameters return $page_excerpt; } }
Viewing 1 replies (of 1 total)
Viewing 1 replies (of 1 total)
- The topic ‘support private pages’ is closed to new replies.