__( 'Hovedmeny' ) ) ); } add_action( 'init' , 'neuf_register_nav_menus' ); /** Enqueue various scripts we use. */ function neuf_enqueue_scripts() { global $AKTIV2016_VERSION; wp_deregister_script( 'jquery' ); wp_register_script('vendor', get_template_directory_uri().'/dist/scripts/vendor.js', array(), $AKTIV2016_VERSION); wp_register_script('app', get_template_directory_uri().'/dist/scripts/main.js', array('vendor'), $AKTIV2016_VERSION); wp_enqueue_script( 'app' ); wp_enqueue_style( 'app', get_stylesheet_directory_uri().'/dist/styles/main.css', array(), $AKTIV2016_VERSION); } add_action( 'wp_enqueue_scripts' , 'neuf_enqueue_scripts' ); /** * Force large uploaded images. * Denies uploads of images smaller (in pixels) than given width and height values. */ function neuf_handle_upload_prefilter( $file ) { /* Only check files with mime type 'image/*' */ $is_not_image = strpos($file['type'], 'image/') !== 0; if( $is_not_image ) { return $file; } $errors = array(); $minimum = array( 'width' => 512, 'height' => 480); $img = getimagesize( $file['tmp_name'] ); $width = $img[0]; $height = $img[1]; if ( $width < $minimum['width'] ) { $errors[] = "Minimum width is {$minimum['width']} px. Uploaded image wid th is $width px"; } if ($height < $minimum['height']) { $errors[] = "Minimum height is {$minimum['height']} px. Uploaded image h eight is $height px"; } if( count($errors) > 0 ) { return array( "error" => "Image dimensions are too small: ".implode(", " , $errors)."."); } return $file; } add_filter( 'wp_handle_upload_prefilter' , 'neuf_handle_upload_prefilter' ); /** * Adds more semantic classes to WP's body_class. * * Adds these classes: * i) For pages, adds 'page-slug' */ function neuf_body_class( $classes = '' ) { global $post; if ( $classes ) $classes .= ' '; if ( is_page() ) $classes .= 'page-' . $post->post_name ; body_class( $classes ); } /** * Trims $text down to $length words. * If $text is truncated, then "[..]" is appended. */ function trim_excerpt($text, $length) { $org_length = strlen($text); $text = explode(" ", $text); // word boundary $text = array_slice($text, 0, $length); $text = implode(" ", $text); $shorter = $org_length != strlen($text) ? " [...]" : ""; return $text . $shorter; } /** * Replaces the matching $pattern with $replacement in the string $subject. */ function linkify($subject, $pattern, $link) { $replacement = '[...]'; $output = preg_replace($pattern, $replacement, $subject); return $output; } /** * Gets the name of a term. * * Original author: Justin Tadlock (theme Hybrid). */ function neuf_get_term_name() { $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); return $term->name; } /* Widgets */ function neuf_widgets_init() { register_sidebar( array( 'name' => 'Home right sidebar', 'id' => 'main_sidebar', 'before_widget' => '
', ) ); } add_action( 'widgets_init', 'neuf_widgets_init' ); /** * Redirect user after successful login. * * @param string $redirect_to URL to redirect to. * @param string $request URL the user is coming from. * @param object $user Logged user's data. * @return string */ function neuf_login_redirect( $redirect_to, $request, $user ) { //is there a user to check? global $user; if ( isset($user) ) { // Redirect to homepage return home_url()."?yourin"; } else { return $redirect_to; } } add_filter( 'login_redirect', 'neuf_login_redirect', 10, 3 ); /* No admin bar for mortals */ function neuf_show_admin_bar($content) { return ( current_user_can( 'administrator' ) ) ? $content : false; } add_filter( 'show_admin_bar' , 'neuf_show_admin_bar'); function get_grav_url($user) { $default = "mm"; $size = 50; $grav_url = "https://www.gravatar.com/avatar/" . md5( strtolower( trim( $user->user_email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size; return $grav_url; } /* Load dash icons */ add_action( 'wp_enqueue_scripts', 'neuf_load_dashicons' ); function neuf_load_dashicons() { wp_enqueue_style( 'dashicons' ); } /* Read more link */ function neuf_excerpt_more( $more ) { return '...'; } add_filter( 'excerpt_more', 'neuf_excerpt_more' ); /* Save user meta options */ function neuf_save_user_meta() { $user_id = (int) $_POST['user_id']; $meta_key = $_POST['meta_key']; // TODO: sanitize $meta_value = $_POST['meta_value']; // TODO: sanitize $unique = (bool) $_POST['unique']; if( !get_userdata($user_id) ) { die(json_encode(array('error' => 'Invalid user_id: \''. $_POST['user_id'] .'\''))); } if( !is_user_logged_in() ) { die(json_encode(array('error' => 'Log in first'))); } if( !wp_verify_nonce( $_POST['_wpnonce'], 'user-meta' ) ) { die(json_encode(array('error' => 'Invalid nonce'))); } $meta_id = add_user_meta($user_id, $meta_key, $meta_value, $unique); if( !$meta_id ) { die(json_encode(array('result' => 'User meta NOT updated!'))); } else{ die(json_encode(array('result' => 'User meta updated.'))); } } add_action( 'wp_ajax_neuf_save_user_meta', 'neuf_save_user_meta' ); /* Save user meta options */ function neuf_get_user_meta() { $user_id = (int) $_GET['user_id']; $meta_key = $_GET['meta_key']; // TODO: sanitize $single = (bool) $_GET['single']; if( !get_userdata($user_id) ) { die(json_encode(array('error' => 'Invalid user_id: \''. $_GET['user_id'] .'\''))); } if( !is_user_logged_in() ) { die(json_encode(array('error' => 'Log in first'))); } if( !wp_verify_nonce( $_GET['_wpnonce'], 'user-meta' ) ) { die(json_encode(array('error' => 'Invalid nonce'))); } $meta_value = get_user_meta($user_id, $meta_key, $single); die(json_encode(array('result' => $meta_value))); } add_action( 'wp_ajax_neuf_get_user_meta', 'neuf_get_user_meta' ); function neuf_rsa_feed_override( $is_restricted ) { global $wp; // check query variables to see if this is the feed if ( ! empty( $wp->query_vars['feed'] ) ) $is_restricted = false; return $is_restricted; } add_filter( 'restricted_site_access_is_restricted', 'neuf_rsa_feed_override' ); function get_feed_url() { $url = get_bloginfo('url'); $feedurl = "$url/feed/"; if(is_user_logged_in()) { $user = wp_get_current_user(); $feedkey = get_user_meta($user->ID, 'feed_key', true); $feedurl .= "?feedkey=$feedkey"; } return $feedurl; } remove_action( 'wp_head', 'feed_links_extra', 3 ); // Display the links to the extra feeds such as category feeds remove_action( 'wp_head', 'feed_links', 2 ); // Display the links to the general feeds: Post and Comment Feed function get_category_formatted() { if( count(get_the_category()) >= 1 ) { $cat = get_the_category(); $cat = $cat[0]; return ''. $cat->name .''; } return ""; } /* Customize theme options * Ref: http://ottopress.com/2012/making-a-custom-control-for-the-theme-customizer/ */ if (class_exists('WP_Customize_Control')) { class Customize_Textarea_Control extends WP_Customize_Control { public $type = 'textarea'; public function render_content() { ?> add_setting( 'home_introduction_text' , array('default' => '') ); $wp_customize->add_control( new Customize_Textarea_Control( $wp_customize, 'home_introduction_text', array( 'label' => __( 'Introduksjonstekst', 'neuf-web' ), 'section' => 'static_front_page', 'settings' => 'home_introduction_text', ) ) ); /* Footer Section */ $wp_customize->add_section( 'footer_section' , array( 'title' => __( 'Footer', 'neuf-web' ), 'priority' => 30, ) ); $wp_customize->add_setting( 'footer_about_text' , array('default' => '') ); $wp_customize->add_control( new Customize_Textarea_Control( $wp_customize, 'footer_about_text', array( 'label' => __( 'Footer-tekst', 'neuf-web' ), 'section' => 'footer_section', 'settings' => 'footer_about_text', ) ) ); } add_action( 'customize_register', 'neuf_customize_register' ); require_once('neuf_widgets.php'); /* The following allows the Facebook bot and the login page to leak the title, excerpt and image info to users that are not logged in. */ add_action( 'restrict_site_access_handling', 'my_restrict_site_access_handling' ); function my_restrict_site_access_handling( $rsa_restrict_approach) { global $wp; $rsa_options = (array) get_option( 'rsa_options' ); if( $rsa_restrict_approach == 4 && !empty($rsa_options['page']) && ($page_id = get_post_field('ID', $rsa_options['page']))) { $wp->query_vars_restricted = $wp->query_vars; // Backup for later } } function get_restricted_post() { global $wp; if( !property_exists($wp, 'query_vars_restricted') || $wp->query_vars_restricted == null ) { return null; } $q = new WP_Query($wp->query_vars_restricted); if (!$q->have_posts()) { return null; } return $q->posts[0]; } function restricted_title($title){ $post = get_restricted_post(); if($post == null) { return $title; } return $post->post_title; } add_filter('wp_title', 'restricted_title'); add_filter('opengraph_title', 'restricted_title'); /* Mostly copied from opengraph plugin */ function restricted_image($image){ $post = get_restricted_post(); if($post == null) { return $image; } $id = $post->ID; $image_ids = array(); // As of July 2014, Facebook seems to only let you select from the first 3 images $max_images = 3; // list post thumbnail first if this post has one if ( has_post_thumbnail($id) ) { $image_ids[] = get_post_thumbnail_id($id); } // then list any image attachments $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') ); foreach ( $attachments as $attachment ) { if ( !in_array($attachment->ID, $image_ids) ) { $image_ids[] = $attachment->ID; if (sizeof($image_ids) >= $max_images) { break; } } } // get URLs for each image $image = array(); foreach ( $image_ids as $id ) { $thumbnail = wp_get_attachment_image_src( $id, 'medium'); if ($thumbnail) { $image[] = $thumbnail[0]; } } return $image; } add_filter('opengraph_image', 'restricted_image'); function restricted_url($url){ $post = get_restricted_post(); if($post == null) { return $url; } if ( is_singular() ) { $url = get_permalink($post->ID); } return $url; } add_filter('opengraph_url', 'restricted_url'); function restricted_description( $description ) { $post = get_restricted_post(); if($post == null) { return $description; } if (is_singular()) { if (!empty($post->post_excerpt)) { $description = $post->post_excerpt; } else { $description = $post->post_content; } } $description = wp_trim_words($description); return $description; } add_filter('opengraph_description', 'restricted_description'); /* Custom password reset URL */ function neuf_lostpassword_url( $pwd ) { return 'https://galtinn.neuf.no/auth/password_reset/'; } add_filter( 'lostpassword_url' , 'neuf_lostpassword_url');