Version Description
Download this release
Release Info
Developer | greenshady |
Plugin | Breadcrumb Trail |
Version | 0.4 |
Comparing to | |
See all releases |
Code changes from version 0.3.2 to 0.4
- breadcrumb-trail-en_EN.mo +0 -0
- breadcrumb-trail-en_EN.po +30 -19
- breadcrumb-trail.php +214 -65
- readme.html +4 -2
- readme.txt +11 -3
breadcrumb-trail-en_EN.mo
CHANGED
Binary file
|
breadcrumb-trail-en_EN.po
CHANGED
@@ -2,7 +2,7 @@ msgid ""
|
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Breadcrumb Trail WordPress Plugin\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
-
"POT-Creation-Date:
|
6 |
"PO-Revision-Date: \n"
|
7 |
"Last-Translator: Justin Tadlock <justin@justintadlock.com>\n"
|
8 |
"Language-Team: <justin@justintadlock.com>\n"
|
@@ -15,62 +15,73 @@ msgstr ""
|
|
15 |
"X-Poedit-Basepath: .\n"
|
16 |
"X-Poedit-SearchPath-0: .\n"
|
17 |
|
18 |
-
#: breadcrumb-trail.php:
|
19 |
msgid "Browse:"
|
20 |
msgstr ""
|
21 |
|
22 |
-
#: breadcrumb-trail.php:
|
23 |
msgid "Home"
|
24 |
msgstr ""
|
25 |
|
26 |
-
#: breadcrumb-trail.php:
|
27 |
msgid "g:i a"
|
28 |
msgstr ""
|
29 |
|
30 |
-
#: breadcrumb-trail.php:
|
31 |
#, php-format
|
32 |
msgid "Minute %1$s"
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: breadcrumb-trail.php:
|
36 |
msgid "i"
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: breadcrumb-trail.php:
|
40 |
msgid "g a"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: breadcrumb-trail.php:
|
44 |
-
#: breadcrumb-trail.php:
|
45 |
-
#: breadcrumb-trail.php:
|
46 |
-
#: breadcrumb-trail.php:
|
|
|
47 |
msgid "Y"
|
48 |
msgstr ""
|
49 |
|
50 |
-
#: breadcrumb-trail.php:
|
51 |
-
#: breadcrumb-trail.php:
|
|
|
52 |
msgid "F"
|
53 |
msgstr ""
|
54 |
|
55 |
-
#: breadcrumb-trail.php:
|
56 |
-
|
|
|
57 |
msgstr ""
|
58 |
|
59 |
-
#: breadcrumb-trail.php:
|
60 |
#, php-format
|
61 |
msgid "Week %1$s"
|
62 |
msgstr ""
|
63 |
|
64 |
-
#: breadcrumb-trail.php:
|
65 |
msgid "W"
|
66 |
msgstr ""
|
67 |
|
68 |
-
#: breadcrumb-trail.php:
|
69 |
#, php-format
|
70 |
msgid "Search results for "%1$s""
|
71 |
msgstr ""
|
72 |
|
73 |
-
#: breadcrumb-trail.php:
|
74 |
msgid "404 Not Found"
|
75 |
msgstr ""
|
76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Breadcrumb Trail WordPress Plugin\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2011-03-19 15:52-0600\n"
|
6 |
"PO-Revision-Date: \n"
|
7 |
"Last-Translator: Justin Tadlock <justin@justintadlock.com>\n"
|
8 |
"Language-Team: <justin@justintadlock.com>\n"
|
15 |
"X-Poedit-Basepath: .\n"
|
16 |
"X-Poedit-SearchPath-0: .\n"
|
17 |
|
18 |
+
#: breadcrumb-trail.php:62
|
19 |
msgid "Browse:"
|
20 |
msgstr ""
|
21 |
|
22 |
+
#: breadcrumb-trail.php:65
|
23 |
msgid "Home"
|
24 |
msgstr ""
|
25 |
|
26 |
+
#: breadcrumb-trail.php:314
|
27 |
msgid "g:i a"
|
28 |
msgstr ""
|
29 |
|
30 |
+
#: breadcrumb-trail.php:317
|
31 |
#, php-format
|
32 |
msgid "Minute %1$s"
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: breadcrumb-trail.php:317
|
36 |
msgid "i"
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: breadcrumb-trail.php:320
|
40 |
msgid "g a"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: breadcrumb-trail.php:331
|
44 |
+
#: breadcrumb-trail.php:337
|
45 |
+
#: breadcrumb-trail.php:342
|
46 |
+
#: breadcrumb-trail.php:347
|
47 |
+
#: breadcrumb-trail.php:411
|
48 |
msgid "Y"
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: breadcrumb-trail.php:332
|
52 |
+
#: breadcrumb-trail.php:343
|
53 |
+
#: breadcrumb-trail.php:415
|
54 |
msgid "F"
|
55 |
msgstr ""
|
56 |
|
57 |
+
#: breadcrumb-trail.php:333
|
58 |
+
#: breadcrumb-trail.php:419
|
59 |
+
msgid "d"
|
60 |
msgstr ""
|
61 |
|
62 |
+
#: breadcrumb-trail.php:338
|
63 |
#, php-format
|
64 |
msgid "Week %1$s"
|
65 |
msgstr ""
|
66 |
|
67 |
+
#: breadcrumb-trail.php:338
|
68 |
msgid "W"
|
69 |
msgstr ""
|
70 |
|
71 |
+
#: breadcrumb-trail.php:354
|
72 |
#, php-format
|
73 |
msgid "Search results for "%1$s""
|
74 |
msgstr ""
|
75 |
|
76 |
+
#: breadcrumb-trail.php:358
|
77 |
msgid "404 Not Found"
|
78 |
msgstr ""
|
79 |
|
80 |
+
#: breadcrumb-trail.php:415
|
81 |
+
msgid "F Y"
|
82 |
+
msgstr ""
|
83 |
+
|
84 |
+
#: breadcrumb-trail.php:419
|
85 |
+
msgid "F j, Y"
|
86 |
+
msgstr ""
|
87 |
+
|
breadcrumb-trail.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Breadcrumb Trail
|
4 |
* Plugin URI: http://justintadlock.com/archives/2009/04/05/breadcrumb-trail-wordpress-plugin
|
5 |
* Description: A WordPress plugin that gives you the <code>breadcrumb_trail()</code> template tag to use anywhere in your theme to show a breadcrumb menu.
|
6 |
-
* Version: 0.
|
7 |
* Author: Justin Tadlock
|
8 |
* Author URI: http://justintadlock.com
|
9 |
*
|
@@ -21,7 +21,7 @@
|
|
21 |
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
22 |
*
|
23 |
* @package BreadcrumbTrail
|
24 |
-
* @version 0.
|
25 |
* @author Justin Tadlock <justin@justintadlock.com>
|
26 |
* @copyright Copyright (c) 2008 - 2010, Justin Tadlock
|
27 |
* @link http://justintadlock.com/archives/2009/04/05/breadcrumb-trail-wordpress-plugin
|
@@ -29,36 +29,33 @@
|
|
29 |
*/
|
30 |
|
31 |
/**
|
32 |
-
* Yes, we're localizing the plugin. This partly makes sure non-English
|
33 |
-
*
|
34 |
-
*
|
35 |
* @link http://poedit.net
|
36 |
*
|
37 |
-
* @since 0.1
|
38 |
*/
|
39 |
load_plugin_textdomain( 'breadcrumb-trail', false, 'breadcrumb-trail' );
|
40 |
|
41 |
/**
|
42 |
-
* Shows a breadcrumb for all types of pages.
|
43 |
-
*
|
|
|
44 |
*
|
45 |
-
* @since 0.1
|
46 |
* @param array $args Mixed arguments for the menu.
|
47 |
* @return string Output of the breadcrumb menu.
|
48 |
*/
|
49 |
function breadcrumb_trail( $args = array() ) {
|
50 |
-
global $wp_query
|
51 |
|
52 |
/* Get the textdomain. */
|
53 |
-
$textdomain =
|
54 |
|
55 |
/* Create an empty variable for the breadcrumb. */
|
56 |
$breadcrumb = '';
|
57 |
|
58 |
-
/* Create an empty array for the trail. */
|
59 |
-
$trail = array();
|
60 |
-
$path = '';
|
61 |
-
|
62 |
/* Set up the default arguments for the breadcrumb. */
|
63 |
$defaults = array(
|
64 |
'separator' => '/',
|
@@ -66,7 +63,6 @@ function breadcrumb_trail( $args = array() ) {
|
|
66 |
'after' => false,
|
67 |
'front_page' => true,
|
68 |
'show_home' => __( 'Home', $textdomain ),
|
69 |
-
'single_tax' => null, // @deprecated 0.3 Use singular_{$post_type}_taxonomy.
|
70 |
'echo' => true
|
71 |
);
|
72 |
|
@@ -78,22 +74,75 @@ function breadcrumb_trail( $args = array() ) {
|
|
78 |
$args = apply_filters( 'breadcrumb_trail_args', $args );
|
79 |
|
80 |
/* Parse the arguments and extract them for easy variable naming. */
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
|
83 |
-
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
|
87 |
/* If $show_home is set and we're not on the front page of the site, link to the home page. */
|
88 |
-
if ( !is_front_page() && $show_home )
|
89 |
-
$trail[] = '<a href="' . home_url() . '" title="' . esc_attr( get_bloginfo( 'name' ) ) . '" rel="home" class="trail-begin">' . $show_home . '</a>';
|
90 |
|
91 |
/* If viewing the front page of the site. */
|
92 |
if ( is_front_page() ) {
|
93 |
-
if (
|
94 |
-
$trail =
|
95 |
-
elseif ( $show_home )
|
96 |
-
$trail['trail_end'] = "{$show_home}";
|
97 |
}
|
98 |
|
99 |
/* If viewing the "home"/posts page. */
|
@@ -110,15 +159,44 @@ function breadcrumb_trail( $args = array() ) {
|
|
110 |
$post = $wp_query->get_queried_object();
|
111 |
$post_id = absint( $wp_query->get_queried_object_id() );
|
112 |
$post_type = $post->post_type;
|
113 |
-
$parent = $post->post_parent;
|
114 |
|
115 |
-
/*
|
116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
|
118 |
-
|
|
|
119 |
|
120 |
/* If $front has been set, add it to the $path. */
|
121 |
-
if (
|
122 |
$path .= trailingslashit( $wp_rewrite->front );
|
123 |
|
124 |
/* If there's a slug, add it to the $path. */
|
@@ -135,11 +213,15 @@ function breadcrumb_trail( $args = array() ) {
|
|
135 |
}
|
136 |
|
137 |
/* If the post type path returns nothing and there is a parent, get its parents. */
|
138 |
-
if ( empty( $path ) && 0 !== $parent || 'attachment' == $post_type )
|
|
|
|
|
|
|
|
|
139 |
$trail = array_merge( $trail, breadcrumb_trail_get_parents( $parent, '' ) );
|
140 |
|
141 |
/* Display terms for specific post type taxonomy if requested. */
|
142 |
-
if (
|
143 |
$trail[] = $terms;
|
144 |
|
145 |
/* End with the post title. */
|
@@ -178,7 +260,10 @@ function breadcrumb_trail( $args = array() ) {
|
|
178 |
$trail = array_merge( $trail, breadcrumb_trail_get_term_parents( $term->parent, $term->taxonomy ) );
|
179 |
|
180 |
/* Add the term name to the trail end. */
|
181 |
-
|
|
|
|
|
|
|
182 |
}
|
183 |
|
184 |
/* If viewing a post type archive. */
|
@@ -245,7 +330,7 @@ function breadcrumb_trail( $args = array() ) {
|
|
245 |
if ( is_day() ) {
|
246 |
$trail[] = '<a href="' . get_year_link( get_the_time( 'Y' ) ) . '" title="' . get_the_time( esc_attr__( 'Y', $textdomain ) ) . '">' . get_the_time( __( 'Y', $textdomain ) ) . '</a>';
|
247 |
$trail[] = '<a href="' . get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ) . '" title="' . get_the_time( esc_attr__( 'F', $textdomain ) ) . '">' . get_the_time( __( 'F', $textdomain ) ) . '</a>';
|
248 |
-
$trail['trail_end'] = get_the_time( __( '
|
249 |
}
|
250 |
|
251 |
elseif ( get_query_var( 'w' ) ) {
|
@@ -272,43 +357,97 @@ function breadcrumb_trail( $args = array() ) {
|
|
272 |
elseif ( is_404() )
|
273 |
$trail['trail_end'] = __( '404 Not Found', $textdomain );
|
274 |
|
275 |
-
/*
|
276 |
-
|
|
|
277 |
|
278 |
-
|
279 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
|
281 |
-
|
282 |
-
|
283 |
-
$breadcrumb .= '<span class="trail-before">' . $before . '</span> ';
|
284 |
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
|
289 |
-
|
290 |
-
|
291 |
-
$separator = '<span class="sep">' . $separator . '</span>';
|
292 |
|
293 |
-
|
294 |
-
|
|
|
295 |
|
296 |
-
|
297 |
-
|
298 |
-
$breadcrumb .= ' <span class="trail-after">' . $after . '</span>';
|
299 |
|
300 |
-
|
301 |
-
|
302 |
-
}
|
303 |
|
304 |
-
/*
|
305 |
-
$
|
306 |
|
307 |
-
/*
|
308 |
-
if ( $
|
309 |
-
|
310 |
-
|
311 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
312 |
}
|
313 |
|
314 |
/**
|
@@ -316,7 +455,7 @@ function breadcrumb_trail( $args = array() ) {
|
|
316 |
* a clear path back to home given what would normally be a "ghost" directory. If any page matches the given
|
317 |
* path, it'll be added. But, it's also just a way to check for a hierarchy with hierarchical post types.
|
318 |
*
|
319 |
-
* @since 0.3
|
320 |
* @param int $post_id ID of the post whose parents we want.
|
321 |
* @param string $path Path of a potential parent page.
|
322 |
* @return array $trail Array of parent page links.
|
@@ -399,7 +538,7 @@ function breadcrumb_trail_get_parents( $post_id = '', $path = '' ) {
|
|
399 |
* Searches for term parents of hierarchical taxonomies. This function is similar to the WordPress
|
400 |
* function get_category_parents() but handles any type of taxonomy.
|
401 |
*
|
402 |
-
* @since 0.3
|
403 |
* @param int $parent_id The ID of the first parent.
|
404 |
* @param object|string $taxonomy The taxonomy of the term whose parents we want.
|
405 |
* @return array $trail Array of links to parent terms.
|
@@ -435,4 +574,14 @@ function breadcrumb_trail_get_term_parents( $parent_id = '', $taxonomy = '' ) {
|
|
435 |
return $trail;
|
436 |
}
|
437 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
438 |
?>
|
3 |
* Plugin Name: Breadcrumb Trail
|
4 |
* Plugin URI: http://justintadlock.com/archives/2009/04/05/breadcrumb-trail-wordpress-plugin
|
5 |
* Description: A WordPress plugin that gives you the <code>breadcrumb_trail()</code> template tag to use anywhere in your theme to show a breadcrumb menu.
|
6 |
+
* Version: 0.4
|
7 |
* Author: Justin Tadlock
|
8 |
* Author URI: http://justintadlock.com
|
9 |
*
|
21 |
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
22 |
*
|
23 |
* @package BreadcrumbTrail
|
24 |
+
* @version 0.4.0
|
25 |
* @author Justin Tadlock <justin@justintadlock.com>
|
26 |
* @copyright Copyright (c) 2008 - 2010, Justin Tadlock
|
27 |
* @link http://justintadlock.com/archives/2009/04/05/breadcrumb-trail-wordpress-plugin
|
29 |
*/
|
30 |
|
31 |
/**
|
32 |
+
* Yes, we're localizing the plugin. This partly makes sure non-English users can use it too.
|
33 |
+
* To translate into your language use the breadcrumb-trail-en_EN.po file as as guide. Poedit
|
34 |
+
* is a good tool to for translating.
|
35 |
* @link http://poedit.net
|
36 |
*
|
37 |
+
* @since 0.1.0
|
38 |
*/
|
39 |
load_plugin_textdomain( 'breadcrumb-trail', false, 'breadcrumb-trail' );
|
40 |
|
41 |
/**
|
42 |
+
* Shows a breadcrumb for all types of pages. This function is formatting the final output of the
|
43 |
+
* breadcrumb trail. The breadcrumb_trail_get_items() function returns the items and this function
|
44 |
+
* formats those items.
|
45 |
*
|
46 |
+
* @since 0.1.0
|
47 |
* @param array $args Mixed arguments for the menu.
|
48 |
* @return string Output of the breadcrumb menu.
|
49 |
*/
|
50 |
function breadcrumb_trail( $args = array() ) {
|
51 |
+
global $wp_query;
|
52 |
|
53 |
/* Get the textdomain. */
|
54 |
+
$textdomain = breadcrumb_trail_textdomain();
|
55 |
|
56 |
/* Create an empty variable for the breadcrumb. */
|
57 |
$breadcrumb = '';
|
58 |
|
|
|
|
|
|
|
|
|
59 |
/* Set up the default arguments for the breadcrumb. */
|
60 |
$defaults = array(
|
61 |
'separator' => '/',
|
63 |
'after' => false,
|
64 |
'front_page' => true,
|
65 |
'show_home' => __( 'Home', $textdomain ),
|
|
|
66 |
'echo' => true
|
67 |
);
|
68 |
|
74 |
$args = apply_filters( 'breadcrumb_trail_args', $args );
|
75 |
|
76 |
/* Parse the arguments and extract them for easy variable naming. */
|
77 |
+
$args = wp_parse_args( $args, $defaults );
|
78 |
+
|
79 |
+
/* Get the trail items. */
|
80 |
+
$trail = breadcrumb_trail_get_items( $args );
|
81 |
+
|
82 |
+
/* Connect the breadcrumb trail if there are items in the trail. */
|
83 |
+
if ( !empty( $trail ) && is_array( $trail ) ) {
|
84 |
+
|
85 |
+
/* Open the breadcrumb trail containers. */
|
86 |
+
$breadcrumb = '<div class="breadcrumb breadcrumbs"><div class="breadcrumb-trail">';
|
87 |
+
|
88 |
+
/* If $before was set, wrap it in a container. */
|
89 |
+
$breadcrumb .= ( !empty( $args['before'] ) ? '<span class="trail-before">' . $args['before'] . '</span> ' : '' );
|
90 |
|
91 |
+
/* Wrap the $trail['trail_end'] value in a container. */
|
92 |
+
if ( !empty( $trail['trail_end'] ) )
|
93 |
+
$trail['trail_end'] = '<span class="trail-end">' . $trail['trail_end'] . '</span>';
|
94 |
+
|
95 |
+
/* Format the separator. */
|
96 |
+
$separator = ( !empty( $args['separator'] ) ? '<span class="sep">' . $args['separator'] . '</span>' : '<span class="sep">/</span>' );
|
97 |
+
|
98 |
+
/* Join the individual trail items into a single string. */
|
99 |
+
$breadcrumb .= join( " {$separator} ", $trail );
|
100 |
+
|
101 |
+
/* If $after was set, wrap it in a container. */
|
102 |
+
$breadcrumb .= ( !empty( $args['after'] ) ? ' <span class="trail-after">' . $args['after'] . '</span>' : '' );
|
103 |
+
|
104 |
+
/* Close the breadcrumb trail containers. */
|
105 |
+
$breadcrumb .= '</div></div>';
|
106 |
+
}
|
107 |
+
|
108 |
+
/* Allow developers to filter the breadcrumb trail HTML. */
|
109 |
+
$breadcrumb = apply_filters( 'breadcrumb_trail', $breadcrumb );
|
110 |
+
|
111 |
+
/* Output the breadcrumb. */
|
112 |
+
if ( $args['echo'] )
|
113 |
+
echo $breadcrumb;
|
114 |
+
else
|
115 |
+
return $breadcrumb;
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Gets the items for the breadcrumb trail. This is the heart of the script. It checks the current page
|
120 |
+
* being viewed and decided based on the information provided by WordPress what items should be
|
121 |
+
* added to the breadcrumb trail.
|
122 |
+
*
|
123 |
+
* @since 0.4.0
|
124 |
+
* @todo Build in caching based on the queried object ID.
|
125 |
+
* @param array $args Mixed arguments for the menu.
|
126 |
+
* @return array List of items to be shown in the trail.
|
127 |
+
*/
|
128 |
+
function breadcrumb_trail_get_items( $args = array() ) {
|
129 |
+
global $wp_query, $wp_rewrite;
|
130 |
+
|
131 |
+
/* Get the textdomain. */
|
132 |
+
$textdomain = breadcrumb_trail_textdomain();
|
133 |
+
|
134 |
+
/* Set up an empty trail array and empty path. */
|
135 |
+
$trail = array();
|
136 |
+
$path = '';
|
137 |
|
138 |
/* If $show_home is set and we're not on the front page of the site, link to the home page. */
|
139 |
+
if ( !is_front_page() && $args['show_home'] )
|
140 |
+
$trail[] = '<a href="' . home_url() . '" title="' . esc_attr( get_bloginfo( 'name' ) ) . '" rel="home" class="trail-begin">' . $args['show_home'] . '</a>';
|
141 |
|
142 |
/* If viewing the front page of the site. */
|
143 |
if ( is_front_page() ) {
|
144 |
+
if ( $args['show_home'] && $args['front_page'] )
|
145 |
+
$trail['trail_end'] = "{$args['show_home']}";
|
|
|
|
|
146 |
}
|
147 |
|
148 |
/* If viewing the "home"/posts page. */
|
159 |
$post = $wp_query->get_queried_object();
|
160 |
$post_id = absint( $wp_query->get_queried_object_id() );
|
161 |
$post_type = $post->post_type;
|
162 |
+
$parent = absint( $post->post_parent );
|
163 |
|
164 |
+
/* Get the post type object. */
|
165 |
+
$post_type_object = get_post_type_object( $post_type );
|
166 |
+
|
167 |
+
/* If viewing a singular 'post'. */
|
168 |
+
if ( 'post' == $post_type ) {
|
169 |
+
|
170 |
+
/* If $front has been set, add it to the $path. */
|
171 |
+
$path .= trailingslashit( $wp_rewrite->front );
|
172 |
+
|
173 |
+
/* If there's a path, check for parents. */
|
174 |
+
if ( !empty( $path ) )
|
175 |
+
$trail = array_merge( $trail, breadcrumb_trail_get_parents( '', $path ) );
|
176 |
+
|
177 |
+
/* Map the permalink structure tags to actual links. */
|
178 |
+
$trail = array_merge( $trail, breadcrumb_trail_map_rewrite_tags( $post_id, get_option( 'permalink_structure' ) ) );
|
179 |
+
}
|
180 |
+
|
181 |
+
/* If viewing a singular 'attachment'. */
|
182 |
+
elseif ( 'attachment' == $post_type ) {
|
183 |
+
|
184 |
+
/* If $front has been set, add it to the $path. */
|
185 |
+
$path .= trailingslashit( $wp_rewrite->front );
|
186 |
+
|
187 |
+
/* If there's a path, check for parents. */
|
188 |
+
if ( !empty( $path ) )
|
189 |
+
$trail = array_merge( $trail, breadcrumb_trail_get_parents( '', $path ) );
|
190 |
+
|
191 |
+
/* Map the post (parent) permalink structure tags to actual links. */
|
192 |
+
$trail = array_merge( $trail, breadcrumb_trail_map_rewrite_tags( $post->post_parent, get_option( 'permalink_structure' ) ) );
|
193 |
+
}
|
194 |
|
195 |
+
/* If a custom post type, check if there are any pages in its hierarchy based on the slug. */
|
196 |
+
elseif ( 'page' !== $post_type ) {
|
197 |
|
198 |
/* If $front has been set, add it to the $path. */
|
199 |
+
if ( $post_type_object->rewrite['with_front'] && $wp_rewrite->front )
|
200 |
$path .= trailingslashit( $wp_rewrite->front );
|
201 |
|
202 |
/* If there's a slug, add it to the $path. */
|
213 |
}
|
214 |
|
215 |
/* If the post type path returns nothing and there is a parent, get its parents. */
|
216 |
+
if ( ( empty( $path ) && 0 !== $parent ) || ( 'attachment' == $post_type ) )
|
217 |
+
$trail = array_merge( $trail, breadcrumb_trail_get_parents( $parent, '' ) );
|
218 |
+
|
219 |
+
/* Or, if the post type is hierarchical and there's a parent, get its parents. */
|
220 |
+
elseif ( 0 !== $parent && is_post_type_hierarchical( $post_type ) )
|
221 |
$trail = array_merge( $trail, breadcrumb_trail_get_parents( $parent, '' ) );
|
222 |
|
223 |
/* Display terms for specific post type taxonomy if requested. */
|
224 |
+
if ( !empty( $args["singular_{$post_type}_taxonomy"] ) && $terms = get_the_term_list( $post_id, $args["singular_{$post_type}_taxonomy"], '', ', ', '' ) )
|
225 |
$trail[] = $terms;
|
226 |
|
227 |
/* End with the post title. */
|
260 |
$trail = array_merge( $trail, breadcrumb_trail_get_term_parents( $term->parent, $term->taxonomy ) );
|
261 |
|
262 |
/* Add the term name to the trail end. */
|
263 |
+
if ( function_exists( 'single_term_title' ) )
|
264 |
+
$trail['trail_end'] = single_term_title( '', false );
|
265 |
+
else
|
266 |
+
$trail['trail_end'] = $term->name;
|
267 |
}
|
268 |
|
269 |
/* If viewing a post type archive. */
|
330 |
if ( is_day() ) {
|
331 |
$trail[] = '<a href="' . get_year_link( get_the_time( 'Y' ) ) . '" title="' . get_the_time( esc_attr__( 'Y', $textdomain ) ) . '">' . get_the_time( __( 'Y', $textdomain ) ) . '</a>';
|
332 |
$trail[] = '<a href="' . get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ) . '" title="' . get_the_time( esc_attr__( 'F', $textdomain ) ) . '">' . get_the_time( __( 'F', $textdomain ) ) . '</a>';
|
333 |
+
$trail['trail_end'] = get_the_time( __( 'd', $textdomain ) );
|
334 |
}
|
335 |
|
336 |
elseif ( get_query_var( 'w' ) ) {
|
357 |
elseif ( is_404() )
|
358 |
$trail['trail_end'] = __( '404 Not Found', $textdomain );
|
359 |
|
360 |
+
/* Allow devs to step in and filter the $trail array. */
|
361 |
+
return apply_filters( 'breadcrumb_trail_items', $trail );
|
362 |
+
}
|
363 |
|
364 |
+
/**
|
365 |
+
* Turns %tag% from permalink structures into usable links for the breadcrumb trail. This feels kind of
|
366 |
+
* hackish for now because we're checking for specific %tag% examples and only doing it for the 'post'
|
367 |
+
* post type. In the future, maybe it'll handle a wider variety of possibilities, especially for custom post
|
368 |
+
* types.
|
369 |
+
*
|
370 |
+
* @since 0.4.0
|
371 |
+
* @param int $post_id ID of the post whose parents we want.
|
372 |
+
* @param string $path Path of a potential parent page.
|
373 |
+
* @return array $trail Array of links to the post breadcrumb.
|
374 |
+
*/
|
375 |
+
function breadcrumb_trail_map_rewrite_tags( $post_id = '', $path = '' ) {
|
376 |
|
377 |
+
/* Set up an empty $trail array. */
|
378 |
+
$trail = array();
|
|
|
379 |
|
380 |
+
/* Make sure there's a $path and $post_id before continuing. */
|
381 |
+
if ( empty( $path ) || empty( $post_id ) )
|
382 |
+
return $trail;
|
383 |
|
384 |
+
/* Get the post based on the post ID. */
|
385 |
+
$post = get_post( $post_id );
|
|
|
386 |
|
387 |
+
/* If no post is returned, an error is returned, or the post does not have a 'post' post type, return. */
|
388 |
+
if ( empty( $post ) || is_wp_error( $post ) || 'post' !== $post->post_type )
|
389 |
+
return $trail;
|
390 |
|
391 |
+
/* Get the textdomain. */
|
392 |
+
$textdomain = breadcrumb_trail_textdomain();
|
|
|
393 |
|
394 |
+
/* Trim '/' from both sides of the $path. */
|
395 |
+
$path = trim( $path, '/' );
|
|
|
396 |
|
397 |
+
/* Split the $path into an array of strings. */
|
398 |
+
$matches = explode( '/', $path );
|
399 |
|
400 |
+
/* If matches are found for the path. */
|
401 |
+
if ( is_array( $matches ) ) {
|
402 |
+
|
403 |
+
/* Loop through each of the matches, adding each to the $trail array. */
|
404 |
+
foreach ( $matches as $match ) {
|
405 |
+
|
406 |
+
/* Trim any '/' from the $match. */
|
407 |
+
$tag = trim( $match, '/' );
|
408 |
+
|
409 |
+
/* If using the %year% tag, add a link to the yearly archive. */
|
410 |
+
if ( '%year%' == $tag )
|
411 |
+
$trail[] = '<a href="' . get_year_link( get_the_time( 'Y', $post_id ) ) . '" title="' . get_the_time( esc_attr__( 'Y', $textdomain ), $post_id ) . '">' . get_the_time( __( 'Y', $textdomain ), $post_id ) . '</a>';
|
412 |
+
|
413 |
+
/* If using the %monthnum% tag, add a link to the monthly archive. */
|
414 |
+
elseif ( '%monthnum%' == $tag )
|
415 |
+
$trail[] = '<a href="' . get_month_link( get_the_time( 'Y', $post_id ), get_the_time( 'm', $post_id ) ) . '" title="' . get_the_time( esc_attr__( 'F Y', $textdomain ), $post_id ) . '">' . get_the_time( __( 'F', $textdomain ), $post_id ) . '</a>';
|
416 |
+
|
417 |
+
/* If using the %day% tag, add a link to the daily archive. */
|
418 |
+
elseif ( '%day%' == $tag )
|
419 |
+
$trail[] = '<a href="' . get_day_link( get_the_time( 'Y', $post_id ), get_the_time( 'm', $post_id ), get_the_time( 'd', $post_id ) ) . '" title="' . get_the_time( esc_attr__( 'F j, Y', $textdomain ), $post_id ) . '">' . get_the_time( __( 'd', $textdomain ), $post_id ) . '</a>';
|
420 |
+
|
421 |
+
/* If using the %author% tag, add a link to the post author archive. */
|
422 |
+
elseif ( '%author%' == $tag )
|
423 |
+
$trail[] = '<a href="' . get_author_posts_url( $post->post_author ) . '" title="' . esc_attr( get_the_author_meta( 'display_name', $post->post_author ) ) . '">' . get_the_author_meta( 'display_name', $post->post_author ) . '</a>';
|
424 |
+
|
425 |
+
/* If using the %category% tag, add a link to the first category archive to match permalinks. */
|
426 |
+
elseif ( '%category%' == $tag ) {
|
427 |
+
|
428 |
+
/* Get the post categories. */
|
429 |
+
$terms = get_the_category( $post_id );
|
430 |
+
|
431 |
+
/* Check that categories were returned. */
|
432 |
+
if ( $terms ) {
|
433 |
+
|
434 |
+
/* Sort the terms by ID and get the first category. */
|
435 |
+
usort( $terms, '_usort_terms_by_ID' );
|
436 |
+
$term = get_term( $terms[0], 'category' );
|
437 |
+
|
438 |
+
/* If the category has a parent, add the hierarchy to the trail. */
|
439 |
+
if ( 0 !== $term->parent )
|
440 |
+
$trail = array_merge( $trail, breadcrumb_trail_get_term_parents( $term->parent, 'category' ) );
|
441 |
+
|
442 |
+
/* Add the category archive link to the trail. */
|
443 |
+
$trail[] = '<a href="' . get_term_link( $term, 'category' ) . '" title="' . esc_attr( $term->name ) . '">' . $term->name . '</a>';
|
444 |
+
}
|
445 |
+
}
|
446 |
+
}
|
447 |
+
}
|
448 |
+
|
449 |
+
/* Return the $trail array. */
|
450 |
+
return $trail;
|
451 |
}
|
452 |
|
453 |
/**
|
455 |
* a clear path back to home given what would normally be a "ghost" directory. If any page matches the given
|
456 |
* path, it'll be added. But, it's also just a way to check for a hierarchy with hierarchical post types.
|
457 |
*
|
458 |
+
* @since 0.3.0
|
459 |
* @param int $post_id ID of the post whose parents we want.
|
460 |
* @param string $path Path of a potential parent page.
|
461 |
* @return array $trail Array of parent page links.
|
538 |
* Searches for term parents of hierarchical taxonomies. This function is similar to the WordPress
|
539 |
* function get_category_parents() but handles any type of taxonomy.
|
540 |
*
|
541 |
+
* @since 0.3.0
|
542 |
* @param int $parent_id The ID of the first parent.
|
543 |
* @param object|string $taxonomy The taxonomy of the term whose parents we want.
|
544 |
* @return array $trail Array of links to parent terms.
|
574 |
return $trail;
|
575 |
}
|
576 |
|
577 |
+
/**
|
578 |
+
* Returns the textdomain used by the script and allows it to be filtered by plugins/themes.
|
579 |
+
*
|
580 |
+
* @since 0.4.0
|
581 |
+
* @returns string The textdomain for the script.
|
582 |
+
*/
|
583 |
+
function breadcrumb_trail_textdomain() {
|
584 |
+
return apply_filters( 'breadcrumb_trail_textdomain', 'breadcrumb-trail' );
|
585 |
+
}
|
586 |
+
|
587 |
?>
|
readme.html
CHANGED
@@ -111,13 +111,15 @@ Basically, this just checks to see if the plugin is activated and has loaded the
|
|
111 |
|
112 |
<p>If you're a theme developer, you can always add checks for this plugin and place it yourself within your template files or use <code>add_action()</code> to add it to a custom theme hook.</p>
|
113 |
|
114 |
-
<p>This plugin has
|
115 |
|
116 |
<dl>
|
117 |
<dt>breadcrumb_trail_args</dt>
|
118 |
<dd>Overwrite the arguments input and/or the defaults.</dd>
|
119 |
<dt>breadcrumb_trail</dt>
|
120 |
<dd>Completely overwrite the entire breadcrumb menu.</dd>
|
|
|
|
|
121 |
</dl>
|
122 |
|
123 |
<h2>Plugin support</h2>
|
@@ -132,7 +134,7 @@ Basically, this just checks to see if the plugin is activated and has loaded the
|
|
132 |
|
133 |
<p>This plugin is copyrighted to <a href="http://justintadlock.com" title="Justin Tadlock">Justin Tadlock</a>.</p>
|
134 |
|
135 |
-
<p>2008 – 
|
136 |
|
137 |
</body>
|
138 |
</html>
|
111 |
|
112 |
<p>If you're a theme developer, you can always add checks for this plugin and place it yourself within your template files or use <code>add_action()</code> to add it to a custom theme hook.</p>
|
113 |
|
114 |
+
<p>This plugin has three filter hooks for use as well:</p>
|
115 |
|
116 |
<dl>
|
117 |
<dt>breadcrumb_trail_args</dt>
|
118 |
<dd>Overwrite the arguments input and/or the defaults.</dd>
|
119 |
<dt>breadcrumb_trail</dt>
|
120 |
<dd>Completely overwrite the entire breadcrumb menu.</dd>
|
121 |
+
<dt>breadcrumb_trail_items</dt>
|
122 |
+
<dd>Overwrite or extend the rrray of items shown in the trail.</dd>
|
123 |
</dl>
|
124 |
|
125 |
<h2>Plugin support</h2>
|
134 |
|
135 |
<p>This plugin is copyrighted to <a href="http://justintadlock.com" title="Justin Tadlock">Justin Tadlock</a>.</p>
|
136 |
|
137 |
+
<p>2008 – 2011 © Justin Tadlock. All rights reserved.</p>
|
138 |
|
139 |
</body>
|
140 |
</html>
|
readme.txt
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
Contributors: greenshady
|
3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3687060
|
4 |
Tags: navigation, menu, breadcrumb, breadcrumbs
|
5 |
-
Requires at least: 3.
|
6 |
-
Tested up to: 3.
|
7 |
-
Stable tag: 0.
|
8 |
|
9 |
An easy-to-use template tag for showing a breadcrumb menu on your site.
|
10 |
|
@@ -56,6 +56,14 @@ There are no screenshots for this plugin.
|
|
56 |
|
57 |
== Changelog ==
|
58 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
**Version 0.3.1**
|
60 |
|
61 |
* Smarter logic in certain areas.
|
2 |
Contributors: greenshady
|
3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3687060
|
4 |
Tags: navigation, menu, breadcrumb, breadcrumbs
|
5 |
+
Requires at least: 3.1
|
6 |
+
Tested up to: 3.1
|
7 |
+
Stable tag: 0.4
|
8 |
|
9 |
An easy-to-use template tag for showing a breadcrumb menu on your site.
|
10 |
|
56 |
|
57 |
== Changelog ==
|
58 |
|
59 |
+
**Version 0.4.0**
|
60 |
+
|
61 |
+
* New function: `breadcrumb_trail_get_items()`, which grabs a list of all the trail items. This separates the items from the main `breadcrumb_trail()` function.
|
62 |
+
* New filter hook: `breadcrumb_trail_items`, which allows devs to filter just the items.
|
63 |
+
* New function: `breadcrumb_trail_map_rewrite_tags()`, which maps the permalink structure tags set under Permalink Settings in the admin to make for a much more accurate breadcrumb trail.
|
64 |
+
* New function: `breadcrumb_trail_textdomain()`, which can be filtered when integrating the plugin into a theme to match the theme's textdomain.
|
65 |
+
* Added functionality to handle WP 3.1 post type enhancements.
|
66 |
+
|
67 |
**Version 0.3.1**
|
68 |
|
69 |
* Smarter logic in certain areas.
|