340 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			340 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * MLA Child for Twenty Twelve functions and definitions
 | |
|  *
 | |
|  * Sets up the theme and provides some helper functions, which are used
 | |
|  * in the theme as custom template tags. Others are attached to action and
 | |
|  * filter hooks in WordPress to change core functionality.
 | |
|  *
 | |
|  * @package Media Library Assistant
 | |
|  * @subpackage MLA_Child_Theme
 | |
|  * @version 1.01
 | |
|  * @since MLA 1.80
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Remove the link rel='prev' and link rel='next' tags in the wp_head();
 | |
|  * this prevents a couple of "query_posts" calls.
 | |
|  * The other remove_action statements have been suggested in various support topics.
 | |
|  */
 | |
| if ( ! is_admin() ) {
 | |
|     //remove_action( 'wp_head', 'feed_links', 2 ); // Display the links to the general feeds: Post and Comment Feed
 | |
| 	//remove_action( 'wp_head', 'feed_links_extra', 3 ); // Display the links to the extra feeds such as category feeds
 | |
| 	//remove_action( 'wp_head', 'rsd_link' ); // Display the link to the Really Simple Discovery service endpoint, EditURI link
 | |
| 	//remove_action( 'wp_head', 'wlwmanifest_link' ); // Display the link to the Windows Live Writer manifest file.
 | |
| 	remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ); // Display relational links for the posts adjacent to the current post. OBSOLETE?
 | |
| 	remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); // Display relational links for the posts adjacent to the current post.
 | |
| 	//remove_action( 'wp_head', 'wp_generator' ); // Display the XHTML generator that is generated on the wp_head hook, WP version
 | |
| 	//remove_action( 'wp_head', 'rel_canonical' ); // Display the canonical link fo a singular page
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Loads the text domain(s) for the mla-child-theme, from the WordPress language directory
 | |
|  * and/or from the theme's own directory.
 | |
|  *
 | |
|  * @return void 
 | |
|  */
 | |
| function mla_after_setup_theme_action() {
 | |
| 	$domain = 'mla-child-theme';
 | |
| 
 | |
| 	load_theme_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain );
 | |
| 	load_theme_textdomain( $domain, get_stylesheet_directory() . '/languages' );
 | |
| 
 | |
| 	//the third call is made in the parent theme twentytwelve_setup() function
 | |
| 	//load_theme_textdomain( $domain, get_template_directory() . '/languages' );
 | |
| }
 | |
| add_action( 'after_setup_theme', 'mla_after_setup_theme_action' );
 | |
| 
 | |
| /**
 | |
|  * Customize the <title> tag content for the Tag Gallery and Single Image pages
 | |
|  *
 | |
|  * @param string The default page title
 | |
|  * @param string $sep How to separate the various items within the page title
 | |
|  * @param string $seplocation Optional. Direction to display title, 'right'.
 | |
|  *
 | |
|  * @return string updated title value
 | |
|  */
 | |
| function mla_wp_title_filter( $title, $sep, $seplocation ) {
 | |
| 	$sep = " {$sep} ";
 | |
| 
 | |
| 	if ( is_page() ) {
 | |
| 		$page = single_post_title( '', false );
 | |
| 
 | |
| 		/*
 | |
| 		 * Match specific page titles and replace the default, page title,
 | |
| 		 * with more interesting term or file information.
 | |
| 		 */
 | |
| 		if ( 'Tag Gallery' == $page ) {
 | |
| 			$taxonomy = isset( $_REQUEST['my_taxonomy'] ) ? $_REQUEST['my_taxonomy'] : NULL;
 | |
| 			$slug = isset( $_REQUEST['my_term'] ) ? $_REQUEST['my_term'] : NULL;
 | |
| 			if ( $taxonomy && $slug ) {
 | |
| 				$term = get_term_by( 'slug', $slug, $taxonomy );
 | |
| 				return $term->name . $sep;
 | |
| 			}
 | |
| 		} elseif ( 'Single Image' == $page ) {
 | |
| 			$post_id = isset( $_REQUEST['post_id'] ) ? $_REQUEST['post_id'] : 0;
 | |
| 			if ( $post_id ) {
 | |
| 				$file = get_attached_file( $post_id );
 | |
| 				$pathinfo = pathinfo( $file );
 | |
| 				return $pathinfo['basename'] . $sep;
 | |
| 			}
 | |
| 		}
 | |
| 	} // is_page
 | |
| 
 | |
| 	return $title;
 | |
| }
 | |
| add_filter( 'wp_title', 'mla_wp_title_filter', 10, 3 );
 | |
| 
 | |
| /**
 | |
|  * Generate a taxonomy- and term-specific [mla_gallery]
 | |
|  *
 | |
|  * @param array Attributes of the function: taxonomy, term
 | |
|  *
 | |
|  * @return void echoes HTML <h3>, <p> and <a> tags
 | |
|  */
 | |
| function mla_tag_gallery( $attr = NULL ) {
 | |
| 	/*
 | |
| 	 * Make sure $attr is an array, even if it's empty
 | |
| 	 */
 | |
| 	if ( empty( $attr ) ) {
 | |
| 		$attr = array();
 | |
| 	} elseif ( is_string( $attr ) ) {
 | |
| 		$attr = shortcode_parse_atts( $attr );
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 	 * Create the PHP variables we need
 | |
| 	 */
 | |
| 	extract( shortcode_atts( array(
 | |
| 		'taxonomy' => 'attachment_tag',
 | |
| 		'term' => ''
 | |
| 	), $attr ) );
 | |
| 
 | |
| 	/*
 | |
| 	 * Convert to objects for validation and labels
 | |
| 	 */
 | |
| 	$taxonomy = get_taxonomy( $taxonomy );
 | |
| 	$term = get_term_by( 'slug', $term, $taxonomy->name );
 | |
| 
 | |
| 	if ( empty( $taxonomy ) ) {
 | |
| 		$output = __( 'Taxonomy does not exist.', 'mla-child-theme' );
 | |
| 	}
 | |
| 	elseif ( empty( $term ) ) {
 | |
| 		$output = __( 'Term does not exist.', 'mla-child-theme' );
 | |
| 	}
 | |
| 	else {
 | |
| 		/* translators: 1: term name, 2: taxonomy label */
 | |
| 		$output = '<h3>' . sprintf( __( 'Gallery for term "%1$s" in taxonomy "%2$s"', 'mla-child-theme' ), $term->name, $taxonomy->labels->name ) . '</h3>';
 | |
| 		$output .= '<p>' . do_shortcode( sprintf( '[mla_gallery %1$s="%2$s" post_mime_type=all mla_nolink_text="No items found" ]', $taxonomy->name, $term->slug ) . "</p>\r\n" );
 | |
| 	} // ! empty
 | |
| 
 | |
| 	echo $output;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Generate a taxonomy- and term-specific [mla_gallery], limited by current_page and posts_per_page
 | |
|  *
 | |
|  * This function uses $wpdb functions for efficiency.
 | |
|  *
 | |
|  * @param array Attributes of the function: page, taxonomy, term, post_mime_type, posts_per_page, current_page
 | |
|  *
 | |
|  * @return integer number of posts matching taxonomy & term, before LIMIT. echoes HTML <h3>, <p> and <a> tags
 | |
|  */
 | |
| function mla_paginated_term_gallery( $attr = NULL ) {
 | |
| 	global $wpdb;
 | |
| 
 | |
| 	/*
 | |
| 	 * Make sure $attr is an array, even if it's empty
 | |
| 	 */
 | |
| 	if ( empty( $attr ) ) {
 | |
| 		$attr = array();
 | |
| 	} elseif ( is_string( $attr ) ) {
 | |
| 		$attr = shortcode_parse_atts( $attr );
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 	 * Create the PHP variables we need
 | |
| 	 */
 | |
| 	extract( shortcode_atts( array(
 | |
| 		'page' => NULL,
 | |
| 		'taxonomy' => 'attachment_tag',
 | |
| 		'term' => '',
 | |
| 		'post_mime_type' => 'all',
 | |
| 		'posts_per_page' =>10,
 | |
| 		'current_page' => 1
 | |
| 	), $attr ) );
 | |
| 
 | |
| 	/*
 | |
| 	 * Convert to objects for validation and labels
 | |
| 	 */
 | |
| 	$taxonomy = get_taxonomy( $taxonomy );
 | |
| 	$term = get_term_by( 'slug', $term, $taxonomy->name );
 | |
| 
 | |
| 	if ( empty( $taxonomy ) ) {
 | |
| 		echo __( 'Taxonomy does not exist.', 'mla-child-theme' );
 | |
| 		return;
 | |
| 	}
 | |
| 	elseif ( empty( $term ) ) {
 | |
| 		echo __( 'Term does not exist.', 'mla-child-theme' );
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	$offset = absint( $current_page - 1 ) * $posts_per_page;
 | |
| 
 | |
| 	if ( 'all' == strtolower( $post_mime_type ) ) {
 | |
| 		$count = $wpdb->get_var( 'SELECT COUNT(*) FROM ' . $wpdb->term_relationships . ' WHERE ( term_taxonomy_id = ' . $term->term_taxonomy_id . ' )' );
 | |
| 		$posts = implode( ',', $wpdb->get_col( 'SELECT object_id FROM ' . $wpdb->term_relationships . ' WHERE ( term_taxonomy_id = ' . $term->term_taxonomy_id . ' ) LIMIT ' . $offset . ', ' . $posts_per_page ) );
 | |
| 	} else {
 | |
| 		/*
 | |
| 		 * $posts contains all post types, so we further limit the results to select attachments of the
 | |
| 		 * desired MIME type, then apply the limit criteria.
 | |
| 		 */
 | |
| 		$mime_where = wp_post_mime_type_where( $post_mime_type, 'p' );
 | |
| 
 | |
| 		$posts = implode( ',', $wpdb->get_col( 'SELECT object_id FROM ' . $wpdb->term_relationships . ' WHERE ( term_taxonomy_id = ' . $term->term_taxonomy_id . ' )' ) );
 | |
| 		$count = $wpdb->get_var( 'SELECT COUNT(*) FROM ' . $wpdb->posts . ' AS p WHERE ( p.ID IN ( ' . $posts . ' )' . $mime_where . ')' );
 | |
| 		$posts = implode( ',', $wpdb->get_col( 'SELECT p.ID FROM ' . $wpdb->posts . ' as p WHERE ( p.ID IN ( ' . $posts . ' )' . $mime_where . ') LIMIT ' . $offset . ', ' . $posts_per_page ) );
 | |
| 	}
 | |
| 
 | |
| 	$href = empty( $page ) ? '{+link_url+}' : "{+site_url+}{$page}";
 | |
| 	/* translators: 1: term name, 2: taxonomy label */
 | |
| 	$output = '<h3>' . sprintf( __( 'Gallery for term "%1$s" in taxonomy "%2$s"', 'mla-child-theme' ), $term->name, $taxonomy->labels->name ) . '</h3>';
 | |
| 	$output .= '<p>' . do_shortcode( sprintf( '[mla_gallery ids="%1$s" post_mime_type="%2$s" mla_paginate_current=1 mla_nolink_text="No items found" update_post_term_cache="false" mla_link_href="%3$s?post_id={+attachment_ID+}"]', $posts, $post_mime_type, $href ) . "</p>\r\n" );
 | |
| 
 | |
| 	echo $output;
 | |
| 	return $count;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Generate a list of taxonomy- and term-specific links to the page of your choice,
 | |
|  * listing the terms assigned to a specific post or Media Library item.
 | |
|  *
 | |
|  * @param integer ID of the post/page to generate terms for
 | |
|  * @param array Attributes of the function: site_url, page_url, taxonomy
 | |
|  *
 | |
|  * @return void echoes HTML <h3>, <p> and <a> tags
 | |
|  */
 | |
| function mla_custom_terms_list( $ID, $attr = NULL ) {
 | |
| 	/*
 | |
| 	 * Make sure $attr is an array, even if it's empty
 | |
| 	 */
 | |
| 	if ( empty( $attr ) ) {
 | |
| 		$attr = array();
 | |
| 	} elseif ( is_string( $attr ) ) {
 | |
| 		$attr = shortcode_parse_atts( $attr );
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 	 * Create the three PHP variables we need
 | |
| 	 */
 | |
| 	extract( shortcode_atts( array(
 | |
| 		'site_url' => site_url(),
 | |
| 		'page_path' => '/tag-gallery/',
 | |
| 		'taxonomy' => 'attachment_tag',
 | |
| 	), $attr ) );
 | |
| 
 | |
| 	/*
 | |
| 	 * Get the terms associated with the current attachment.
 | |
| 	 * Return nothing if there are no terms associated with the attachment.
 | |
| 	 */
 | |
| 	$terms = get_the_terms( $ID, $taxonomy );
 | |
| 	if ( empty( $terms ) ) {
 | |
| 		return '';
 | |
| 	}
 | |
| 
 | |
| 	/* translators: 1: taxonomy slug */
 | |
| 	$output = '<h3>' . sprintf( __( 'Terms list for taxonomy: %1$s', 'mla-child-theme' ), $taxonomy ) . '</h3>';
 | |
| 	/* translators: 1: term name */
 | |
| 	$title = sprintf( __( 'Gallery for %1$s', 'mla-child-theme' ), $taxonomy );
 | |
| 	foreach ( $terms as $term ) {
 | |
| 		$output .= '<p>' . sprintf( '<a href=%1$s%2$s?my_taxonomy=%3$s&my_term=%4$s title="%5$s">%6$s</a>', $site_url, $page_path, $taxonomy, $term->slug, $title, $term->name ) . "</p>\n";
 | |
| 	}// foreach term
 | |
| 
 | |
| 	echo $output;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Generate a list of taxonomy- and term-specific links to the page of your choice.
 | |
|  * Best used with the Collapse-O-Matic plugin, which uses the [expand] shortcode to
 | |
|  * display an "accordian-style" list.
 | |
|  *
 | |
|  * @param array Attributes of the function: taxonomy
 | |
|  *
 | |
|  * @return string HTML <h3>, <p> and <a> tags
 | |
|  */
 | |
| function mla_taxonomy_terms_list( $attr = NULL ) {
 | |
| 	/*
 | |
| 	 * Make sure $attr is an array, even if it's empty
 | |
| 	 */
 | |
| 	if ( empty( $attr ) ) {
 | |
| 		$attr = array();
 | |
| 	} elseif ( is_string( $attr ) ) {
 | |
| 		$attr = shortcode_parse_atts( $attr );
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 	 * Create the PHP variables we need
 | |
| 	 */
 | |
| 	extract( shortcode_atts( array(
 | |
| 		'taxonomy' => 'attachment_tag',
 | |
| 	), $attr ) );
 | |
| 
 | |
| 	$terms = MLAQuery::mla_wp_get_terms( $taxonomy );
 | |
| 	if ( empty( $terms ) ) {
 | |
| 		return __( 'There are no non-empty taxonomy values', 'mla-child-theme' );
 | |
| 	}
 | |
| 
 | |
| 	/* translators: 1: taxonomy slug */
 | |
| 	$output = '<h3>' . sprintf( __( 'Terms list for taxonomy: %1$s', 'mla-child-theme' ), $taxonomy ) . '</h3>';
 | |
| 	foreach ( $terms as $term ) {
 | |
| 		$output .= '<p>' . do_shortcode( sprintf( '[expand title="%1$s" tag="div" trigclass="level-2 third" targclass="level-2-targ"][mla_gallery %2$s="%3$s" post_mime_type=all mla_nolink_text="%4$s" size=icon mla_style=table mla_markup=table columns=1][/expand]', $term->name, $taxonomy, $term->slug, __( 'No items found', 'mla-child-theme' ) ) . "</p>\r\n" );
 | |
| 	}// foreach term
 | |
| 
 | |
| 	return $output;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Insert thumbnail image tags for Facebook, Twitter, etc.
 | |
|  *
 | |
|  * @return void echoes HTML <meta> tags
 | |
|  */
 | |
| function mla_insert_social_tags() {
 | |
| 	if ( is_page() ) {
 | |
| 		global $post;
 | |
| 		if ( empty( $post->post_content ) ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$count = preg_match( '/\[mla_gallery.*attachment_category="([^\"]*)\"/', $post->post_content, $mla_matches );
 | |
| 		if ( $count ) {
 | |
| 			$matched_category = $mla_matches[1]; // for preg_match
 | |
| 			$gallery = do_shortcode( sprintf( '[mla_gallery %1$s="%2$s" size=full link=none mla_style=none posts_per_page=5]', 'attachment_category', $matched_category ) );
 | |
| 			$count = preg_match_all( '/src=\"([^\"]*)\"/', $gallery, $mla_matches );
 | |
| 			if ( $count ) {
 | |
| 				foreach ( $mla_matches[1] as $match ) {
 | |
| 					echo sprintf( '<meta property="og:image" content="%1$s" />', $match ) . "\n";
 | |
| 				}
 | |
| 
 | |
| 				echo sprintf( '<meta name="twitter:image:src" content="%1$s" />', $mla_matches[1][0] ) . "\n";
 | |
| 			}
 | |
| 
 | |
| 			return;
 | |
| 		} // found mla_gallery
 | |
| 
 | |
| 		$count = preg_match( '/\[gallery.*ids="([^\"]*)\"/', $post->post_content, $mla_matches );
 | |
| 		if ( $count ) {
 | |
| 			$matched_posts = $mla_matches[1]; // for preg_match
 | |
| 			$gallery = do_shortcode( sprintf( '[mla_gallery %1$s="%2$s" size=full link=none mla_style=none posts_per_page=5]', 'ids', $matched_posts ) );
 | |
| 			$count = preg_match_all( '/src=\"([^\"]*)\"/', $gallery, $mla_matches );
 | |
| 			if ( $count ) {
 | |
| 				foreach ( $mla_matches[1] as $match ) {
 | |
| 					echo sprintf( '<meta property="og:image" content="%1$s" />', $match ) . "\n";
 | |
| 				}
 | |
| 
 | |
| 				echo sprintf( '<meta name="twitter:image:src" content="%1$s" />', $mla_matches[1][0] ) . "\n";
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 	} // found gallery
 | |
| }
 | |
| ?>
 |