settings = array( 'plugin_path' => plugin_dir_path(__FILE__), 'plugin_url' => plugin_dir_url(__FILE__), 'plugin_base' => dirname(plugin_basename(__FILE__)), 'plugin_file' => __FILE__, 'plugin_version' => self::version, 'image_size_width' => 300, 'image_size_height' => 300, 'image_size_crop' => true, ); $this->pirate_crew_load_textdomain(); $this->pirate_crew_start(); $this->pirate_crew_backend(); $this->pirate_crew_add_shortcodes(); } /*--------------------------------------------------------------------*/ /* Load Textdomain /*--------------------------------------------------------------------*/ public function pirate_crew_load_textdomain() { load_plugin_textdomain('pirate-crew', false, $this->settings['plugin_base'] . '/language'); } /*--------------------------------------------------------------------*/ /* Activation /*--------------------------------------------------------------------*/ public static function activation() { self::version_compare(); flush_rewrite_rules(); // Flush Rewrite-Regeln, so dass CPT und CT auf dem Front-End sofort vorhanden sind } /*--------------------------------------------------------------------*/ /* deactivate plugin /*--------------------------------------------------------------------*/ public static function deactivation() { flush_rewrite_rules(); // Flush Rewrite-Regeln, so dass CPT und CT auf dem Front-End sofort vorhanden sind } /*--------------------------------------------------------------------*/ /* Checking Versions /*--------------------------------------------------------------------*/ private static function version_compare() { $error = ''; if (version_compare(PHP_VERSION, self::php_version, '<')) { $error = sprintf('Your version of PHP (%s) is too old. Please update at least to version %s.', PHP_VERSION, self::php_version); } if (version_compare($GLOBALS['wp_version'], self::wp_version, '<')) { $error = sprintf('Your version of WordPress (%s) is too old. Please upgrade at least to version %s.', $GLOBALS['wp_version'], self::wp_version); } if (!empty($error)) { deactivate_plugins(plugin_basename(__FILE__), false, true); wp_die($error); } } /*--------------------------------------------------------------------*/ /* Main /*--------------------------------------------------------------------*/ public function pirate_crew_start() { add_action('init', array( $this, 'create_member_support' )); add_action('init', array( $this, 'pirate_crew_image_size' )); add_action('wp_enqueue_scripts', array( $this, 'embed_front_script_styles' )); } /*--------------------------------------------------------------------*/ /* Define Image Size for crew member thumbnail /*--------------------------------------------------------------------*/ public function pirate_crew_image_size(){ if ( function_exists( 'add_image_size' ) ) { add_image_size('pirate_crew', $this->settings['image_size_width'], $this->settings['image_size_height'], $this->settings['image_size_crop']); } } /*--------------------------------------------------------------------*/ /* Defines Shortcodes /*--------------------------------------------------------------------*/ public function pirate_crew_add_shortcodes() { add_shortcode('pirate', array( $this, 'pirate_team_member_shortcode' )); add_shortcode('crew', array( $this, 'pirate_crew_shortcodes' )); } public function pirate_crew_shortcodes($atts) { include('shortcodes/crew.php'); return $out; } public function pirate_team_member_shortcode($atts) { require('shortcodes/member.php'); return $out; } /*--------------------------------------------------------------------*/ /* Register Scripts and CSS /*--------------------------------------------------------------------*/ public function embed_front_script_styles() { $my_theme = wp_get_theme(); $my_theme_name = $my_theme->get( 'Name' ); if (!in_array($my_theme_name, Pirate_Crew::$themeswithowncss)) { wp_enqueue_script('pirate-crew', plugins_url('js/team.min.js', $this->settings['plugin_file']), array('jquery'), $this->settings['plugin_version'], true); wp_enqueue_style('pirate-crew', plugins_url('css/team.css', $this->settings['plugin_file']), false, $this->settings['plugin_version'], 'all'); } } /*--------------------------------------------------------------------*/ /* Create Custom Post Type /*--------------------------------------------------------------------*/ public function create_member_support() { // Create pirate_crew_member post type if (post_type_exists("pirate_crew_member")) { return; } $labels = array( 'name' => __('Pirate Crew Member', 'pirate-crew'), 'singular_name' => __('Pirate Crew Member', 'pirate-crew'), 'menu_name' => __('Pirate Crews', 'pirate-crew'), 'add_new' => __('Add New Member', 'pirate-crew'), 'add_new_item' => __('Add New Member', 'pirate-crew'), 'new_item' => __('New Crew Member', 'pirate-crew'), 'edit_item' => __('Edit Crew Member', 'pirate-crew'), 'view_item' => __('View Crew Member', 'pirate-crew'), 'all_items' => __('Members', 'pirate-crew'), 'search_items' => __('Search Crew Members', 'pirate-crew'), 'not_found' => __('No crew members found.', 'pirate-crew'), 'not_found_in_trash' => __('No crew members found in trash.', 'pirate-crew') ); $cp_args = array( 'labels' => $labels, 'description' => __('This is where you can create and manage crew members.', 'pirate-crew'), 'publicly_queryable' => false, 'show_ui' => true, 'show_in_menu' => true, 'capability_type' => 'post', 'supports' => array('title','editor', 'thumbnail' ), 'menu_icon' => 'dashicons-admin-users' ); register_post_type('pirate_crew_member', $cp_args); if (post_type_exists("pirate_crew")) { return; } $labels = array( 'name' => __('Pirate Crew', 'pirate-crew'), 'singular_name' => __('Pirate Crew', 'pirate-crew'), 'menu_name' => __('Pirate Crews', 'pirate-crew'), 'add_new' => __('Add New Crew', 'pirate-crew'), 'add_new_item' => __('Add New Crew', 'pirate-crew'), 'new_item' => __('New Crew', 'pirate-crew'), 'edit_item' => __('Edit Crew', 'pirate-crew'), 'view_item' => __('View Crew', 'pirate-crew'), 'all_items' => __('Crews', 'pirate-crew'), 'search_items' => __('Search Crews', 'pirate-crew'), 'not_found' => __('No crews found.', 'pirate-crew'), 'not_found_in_trash' => __('No crews found in trash.', 'pirate-crew') ); $cp_args = array( 'labels' => $labels, 'description' => __('This is where you can create and manage crews.', 'pirate-crew'), 'show_ui' => true, "show_in_menu" => 'edit.php?post_type=pirate_crew_member', 'capability_type' => 'post', 'supports' => array('title') ); register_post_type('pirate_crew', $cp_args); } /*--------------------------------------------------------------------*/ /* Admin Styles /*--------------------------------------------------------------------*/ public function pirate_crew_backend() { if (is_admin()) { add_action('add_meta_boxes', array( $this, 'register_metaboxes' )); add_action('save_post', array( $this, 'save_metabox_data' ), 10, 3); add_action('admin_init', array( $this, 'meta_box_scripts' )); add_action('admin_menu', array( $this, 'add_submenu_items' ), 12); add_action('edit_form_after_title', array( $this, 'shortcode_preview' )); add_filter('manage_pirate_crew_member_posts_columns' , array( $this, 'custom_columns_member' )); add_action('manage_pirate_crew_member_posts_custom_column' , array( $this, 'custom_columns_member_data' ) , 10, 2 ); add_filter('manage_pirate_crew_posts_columns' , array( $this, 'custom_columns_team' )); add_action('manage_pirate_crew_posts_custom_column' , array( $this, 'custom_columns_team_data' ) , 10, 2 ); add_filter('admin_post_thumbnail_size', array($this,'custom_admin_thumb_size')); } } /*--------------------------------------------------------------------*/ /* Admin Thumb SIze /*--------------------------------------------------------------------*/ function custom_admin_thumb_size($thumb_size){ global $post_type,$post; if($post_type == 'pirate_crew_member'){ $thumb_size = "pirate_crew"; } return $thumb_size; } /*--------------------------------------------------------------------*/ /* Crew Data /*--------------------------------------------------------------------*/ function custom_columns_member($columns){ $columns = array( 'cb' => '', 'title' => __('Name','pirate-crew'), 'featured_image' => __('Photo','pirate-crew'), 'designation' => __('Position','pirate-crew'), 'date' => 'Date' ); return $columns; } /*--------------------------------------------------------------------*/ /* Get Crew Member Data /*--------------------------------------------------------------------*/ function custom_columns_member_data($column,$post_ID){ $options = $this->get_options('pirate_crew_member',$post_ID ); switch ( $column ) { case 'featured_image': echo the_post_thumbnail( 'thumbnail' ); break; case 'designation': echo $options['pirate-crew-designation']; break; } } /** * Custom member column for team. * @since 1.0 */ function custom_columns_team($columns){ $columns = array( 'cb' => '', 'title' => __('Name','pirate-crew'), 'members' => __('Members','pirate-crew'), 'preset' => __('Preset','pirate-crew'), 'style' => __('Style','pirate-crew'), 'shortcode' =>__('Shortcode','pirate-crew') ); return $columns; } /** * Custom member column data for team. * @since 1.0 */ function custom_columns_team_data($column,$post_ID){ $options = $this->get_options('pirate_crew',$post_ID ); $post = get_post( $post_ID ); switch ( $column ) { case 'members': echo count($options['memberlist']); break; case 'preset': echo $options['team-style']; break; case 'style': echo $options['preset']; break; case 'shortcode': printf('[crew id="%s"]',$post_ID); break; } } /*--------------------------------------------------------------------*/ /* Helper for Shortcodes /*--------------------------------------------------------------------*/ public function shortcode_preview($post) { if ('pirate_crew' == $post->post_type && 'publish' == $post->post_status) { printf('

%1$s: [crew id="%2$s"]

', __("Shortcode", 'pirate-crew'), $post->ID, __("Copy", 'pirate-crew')); } elseif ('pirate_crew_member' == $post->post_type && 'publish' == $post->post_status) { printf('

%1$s: [pirate id="%2$s"]

', __("Shortcode", 'pirate-crew'), $post->ID, __("Copy", 'pirate-crew')); } return; } /*--------------------------------------------------------------------*/ /* Meta Boxes /*--------------------------------------------------------------------*/ public function meta_box_scripts() { global $pagenow, $typenow, $post; if (empty($typenow) && !empty($_GET['post'])) { $post = get_post($_GET['post']); $typenow = $post->post_type; } if (($pagenow == 'post-new.php' or $pagenow == 'post.php') and ($typenow == 'pirate_crew_member' or $typenow == 'pirate_crew')) { wp_enqueue_style('pirate-crew-admin', plugins_url('css/admin.css', $this->settings['plugin_file']), false, $this->settings['plugin_version'], 'all'); wp_enqueue_script('team-meta-box', plugins_url('js/team-admin.js', $this->settings['plugin_file']), array( 'jquery', 'jquery-ui-sortable', 'wp-util' ), $this->settings['plugin_version']); wp_enqueue_script('select2', plugins_url('js/select2.min.js', $this->settings['plugin_file']), array( 'jquery' ), $this->settings['plugin_version']); wp_enqueue_style('select2', plugins_url('css/select2.min.css', $this->settings['plugin_file']), false, $this->settings['plugin_version'], 'all'); wp_enqueue_style('pirate-crew-icomoon-css', plugins_url('css/icomoon.css', $this->settings['plugin_file']), false, $this->settings['plugin_version'], 'all'); } } /*--------------------------------------------------------------------*/ /* Add Submenu Items /*--------------------------------------------------------------------*/ public function add_submenu_items() { add_submenu_page('edit.php?post_type=pirate_crew_member', __('Add New Crew', 'pirate-crew'), __('Add New Crew', 'pirate-crew'), 'manage_options', 'post-new.php?post_type=pirate_crew'); } /*--------------------------------------------------------------------*/ /* Register metaboxes /*--------------------------------------------------------------------*/ public function register_metaboxes() { add_meta_box('member_details', __('Member Details', 'pirate-crew'), array( $this, 'member_details_meta' ), 'pirate_crew_member'); add_meta_box('team_details', __('Crew Details', 'pirate-crew'), array( $this, 'team_details_meta' ), 'pirate_crew', 'normal', 'high'); add_meta_box('team_details', __('Pirate Crew Member', 'pirate-crew'), array( $this, 'member_post_insert' ), 'post', 'normal', 'high'); } /*--------------------------------------------------------------------*/ /* Metabox for extra data of crew member /*--------------------------------------------------------------------*/ public function member_details_meta($post) { wp_nonce_field(basename(__FILE__), 'pirate_crew_meta_details'); $pirate_crew_contact = get_post_meta($post->ID, 'pirate_crew_contact', true); $pirate_crew_social = get_post_meta($post->ID, 'pirate_crew_social', true); $socialicons = array('mail', 'link', 'twitter','facebook', 'google-plus', 'google-plus2', 'hangouts', 'google-drive', 'facebook2', 'instagram', 'whatsapp', 'youtube', 'vimeo', 'vimeo2', 'flickr', 'dribbble', 'behance', 'behance2', 'dropbox', 'wordpress', 'blogger', 'tumblr', 'skype', 'linkedin2', 'linkedin', 'stackoverflow', 'pinterest2', 'pinterest', 'foursquare', 'github', 'flattr', 'xing', 'stumbleupon', 'stumbleupon2', 'delicious', 'lastfm', 'hackernews', 'reddit', 'soundcloud', 'soundcloud2', 'yahoo', 'ello', 'wordpress2', 'steam', 'steam2', '500px', 'deviantart', 'twitch', 'feed', 'sina-weibo', 'renren', 'vk', 'vine', 'telegram', 'spotify'); include $this->settings['plugin_path'] . 'includes/member-details.php'; } /** * Meta box display callback - Team details. * @since 1.0.0 * @param WP_Post $post Current post object. */ public function team_details_meta($post) { wp_nonce_field(basename(__FILE__), 'pirate_crew_meta_details'); $args = array( 'post_type' => 'pirate_crew_member', 'posts_per_page' => -1 ); $members = new WP_Query($args); $options = $this->get_options('pirate_crew', $post->ID); $defaultimage = $this->settings['plugin_url'] . 'images/default-member.jpg'; include $this->settings['plugin_path'] . 'includes/team-details.php'; } /** * Meta box display callback - Team details. * @since 1.0.0 * @param WP_Post $post Current post object. */ public function member_post_insert($post) { wp_nonce_field(basename(__FILE__), 'pirate_crew_meta_details'); $args = array( 'post_type' => 'pirate_crew_member', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', ); $members = new WP_Query($args); $preauthor = get_post_meta( $post->ID, 'pirate_crew_member_id', true ); $defaultimage = $this->settings['plugin_url'] . 'images/default-member.jpg'; include $this->settings['plugin_path'] . 'includes/member-post-insert.php'; } /*--------------------------------------------------------------------*/ /*Save Metabox Data /*--------------------------------------------------------------------*/ public function save_metabox_data($post_id, $post) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } if (!isset($_POST['pirate_crew_meta_details']) || !wp_verify_nonce($_POST['pirate_crew_meta_details'], basename(__FILE__))) { return $post_id; } $post_type = get_post_type_object($post->post_type); if (!current_user_can($post_type->cap->edit_post, $post_id)) { return $post_id; } $team_meta = array(); if ($post->post_type == 'pirate_crew_member') { $team_repeater = array( 'pirate_crew_contact' => array( 'label' => 'pirate-crew-label', 'content' => 'pirate-crew-content' ), 'pirate_crew_social' => array( 'icon' => 'pirate-crew-icon', 'link' => 'pirate-crew-link' ) ); $team_meta = array( 'pirate-crew-designation', 'pirate-crew-short-desc' ); foreach ($team_repeater as $key => $value) { $olddata = get_post_meta($post_id, $key, true); $newdata = $item = array(); foreach ($value as $k => $v) { $item[$k] = $_POST[$v]; } $count = count(reset($item)); for ($i = 0; $i < $count; $i++) { foreach ($value as $k => $v) { if ($item[$k][$i] != '') { $newdata[$i][$k] = stripslashes(strip_tags($item[$k][$i])); } } } if (!empty($newdata) && $newdata != $olddata) { update_post_meta($post_id, $key, $newdata); } elseif (empty($newdata) && $olddata) { delete_post_meta($post_id, $key, $olddata); } } } elseif ($post->post_type == 'pirate_crew') { $team_meta = array('memberlist', 'team-style', 'preset', 'columns'); } elseif ($post->post_type == 'post') { $team_meta = array('pirate_crew_member_id'); } foreach ($team_meta as $meta_key) { $olddata = get_post_meta($post_id, $meta_key, true); $newdata = array(); if (isset($_POST[$meta_key])) { if (is_array($_POST[$meta_key])) { $newdata = $_POST[$meta_key]; } else { $newdata = stripslashes(strip_tags($_POST[$meta_key])); } if (!empty($newdata) && $newdata != $olddata) { update_post_meta($post_id, $meta_key, $newdata); } elseif (empty($newdata) && $olddata) { delete_post_meta($post_id, $meta_key, $olddata); } } else { delete_post_meta($post_id, $meta_key, $olddata); } } } /** * Dropdown Builder * @since 1.0 */ public function selectbuilder($name, $options, $selected = "", $selecttext = "", $class = "", $optionvalue = 'value') { if (is_array($options)): $select_html = "