" /> This function can take three optional parameters: before (default = blank) - text/html to insert before each keyword after (default = blank) - text/html to insert after each keyword separator (default = ",") - text/html to insert between keywords get_the_keywords() is a non-echoing version the_post_keywords() - must be used inside the loop Outputs a comma-separated list of the keywords for the current post. This function can take one optional parameters: include_cats (default=false) - if true, post categories are included in the list. get_the_post_keywords() is a non-echoing version. the_post_keytags() - must be used inside the loop Outputs the keywords for the current post as a series of links. By default these link a query for other posts with matching keywords (can also link to the WordPress search function or to Technorati's page for that tag) This function can take three optional parameters: include_cats (default=false) - if true, post categories are included in the list. local_search (default="tag") - if false or "technorati", the links will be to Technorati's tag page for the keyword instead, if "search", the links will be to the local Wordpress search function. link_title (default="") - alternate link title text to use, e.g. "My link title for" (tag name will be added at the end) An example from my site: [...]
[...]
>>> Tags:
[...] get_the_post_keytags() is a non-echoing version. is_keyword() - can be used outside the loop Returns true if the current view is a keyword/tag search the_search_keytag() - can be used outside the loop Outputs the keyword/tag used for the search get_the_search_keytag() is a non-echoing version Rewrite Rules - The plugin can generate new tag search rewrite rules automatically. You need to re-save your permalinks settings (Options -> Permalinks) for this to occur. If your .htaccess file cannot be written to by WordPress, add the following to your .htaccess file to use the tag search feature, preferably below the "# END WordPress" line: RewriteRule ^tag/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$ /index.php?tag=$1&feed=$2 [QSA,L] RewriteRule ^tag/(.+)/(feed|rdf|rss|rss2|atom)/?$ /index.php?tag=$1&feed=$2 [QSA,L] RewriteRule ^tag/(.+)/page/?([0-9]{1,})/?$ /index.php?tag=$1&paged=$2 [QSA,L] RewriteRule ^tag/(.+)/?$ /index.php?tag=$1 [QSA,L] */ /* You can change these constants if you wish for further customization*/ define('KEYWORDS_META', 'keywords'); // post meta key used in the wp database define('KEYWORDS_TECHNORATI', 'http://technorati.com/tag'); // Technorati link to use if local search is false define('KEYWORDS_ATOMTAGSON', '1'); // flag to add tags to Atom feed (required for Technorati) define('KEYWORDS_QUERYVAR', 'tag'); // get/post variable name for querying tag/keyword from WP define('KEYWORDS_TAGURL', 'tag'); // URL to use when querying tags define('KEYWORDS_TEMPLATE', 'keywords.php'); // template file to use for displaying tag queries define('KEYWORDS_SEARCHURL', 'search'); // local search URL (from mod_rewrite rules) define('KEYWORDS_REWRITERULES', '1'); // flag to determine if plugin can change WP rewrite rules /* Shouldn't need to change this - can set to 0 if you want to force permalinks off */ if (isset($wp_rewrite) && $wp_rewrite->using_permalinks()) { define('KEYWORDS_REWRITEON', '1'); // nice permalinks, yes please! define('KEYWORDS_LINKBASE', $wp_rewrite->root); // set to "index.php/" if using that style } else { define('KEYWORDS_REWRITEON', '0'); // old school links define('KEYWORDS_LINKBASE', ''); // don't need this } /* use in the loop*/ function get_the_post_keywords($include_cats=true) { $keywords = ''; if ($include_cats) { $categories = get_the_category(); foreach($categories as $category) { if (!empty($keywords)) $keywords .= ", "; $keywords .= $category->cat_name; } } $post_keywords = get_post_custom_values(KEYWORDS_META); if (!empty($keywords)) $keywords .= ", "; $keywords .= $post_keywords[0]; return( $keywords ); } /* use in the loop*/ function the_post_keywords($include_cats=true) { echo get_the_post_keywords($include_cats); } /* use in the loop*/ function get_the_post_keytags($include_cats=false, $localsearch="tag", $linktitle=false) { // determine link mode $linkmode = strtolower(trim($localsearch)); switch ($linkmode) { case '': case 'technorati': $linkmode = 'technorati'; break; case 'search': $linkmode = 'search'; break; //case 'tag': //case 'keyword': default: $linkmode = 'tag'; break; } $output = ""; if ($linktitle === false) $linktitle = ($linkmode == 'technorati') ? "Technorati tag page for" : "Search site for"; // do categories separately to get category links instead of tag links if ($include_cats) { $categories = get_the_category(); foreach($categories as $category) { $keyword = $category->cat_name; if ($linkmode == 'technorati') $taglink = KEYWORDS_TECHNORATI . "/" . str_replace('%2F', '/', urlencode($keyword)); else $taglink = get_category_link($category->category_id); $tagtitle = empty($linktitle) ? "" : " title=\"$linktitle $keyword\""; if (!empty($output)) $output .= ", "; $output .= "$keyword"; } } $post_keywords = get_post_custom_values(KEYWORDS_META); if (is_array($post_keywords)) { $keywordlist = array(); foreach($post_keywords as $post_keys) $keywordlist = array_merge($keywordlist, explode(",", $post_keys)); foreach($keywordlist as $keyword) { $keyword = trim($keyword); if (!empty($keyword)) { switch ($linkmode) { case 'tag': if (KEYWORDS_REWRITEON) $taglink = get_settings('home') . '/' . KEYWORDS_LINKBASE . KEYWORDS_TAGURL . '/' . str_replace('%2F', '/', urlencode($keyword)); else $taglink = get_settings('home') . "/?" . KEYWORDS_TAGURL . "=" . urlencode($keyword); break; case 'technorati': $taglink = KEYWORDS_TECHNORATI . "/" . str_replace('%2F', '/', urlencode($keyword)); break; case 'search': if (KEYWORDS_REWRITEON) $taglink = get_settings('home') . '/' . KEYWORDS_LINKBASE . KEYWORDS_SEARCHURL . '/' . str_replace('%2F', '/', urlencode($keyword)); else $taglink = get_settings('home') . '/?s=' . urlencode($keyword) . '&submit=Search'; break; } $tagtitle = empty($linktitle) ? "" : " title=\"$linktitle $keyword\""; if (!empty($output)) $output .= ", "; $output .= "$keyword"; } } } return($output); } /* use in the loop*/ function the_post_keytags($include_cats=false, $localsearch=true, $linktitle=false) { $taglist = get_the_post_keytags($include_cats, $localsearch, $linktitle); if (empty($taglist)) echo "none"; else echo $taglist; } /* works outside the loop*/ function get_the_keywords($before='', $after='', $separator=',') { global $cache_categories, $post_meta_cache; $keywords = ""; if (isset($cache_categories)) { foreach($cache_categories as $category) $keywordarray[$category->cat_name] += 1; } if (isset($post_meta_cache)) { foreach($post_meta_cache as $post_meta) $keywordarray[ $post_meta[KEYWORDS_META][0] ] += 1; } if (isset($keywordarray)) { foreach($keywordarray as $key => $count) { if (!empty($keywords)) $keywords .= $separator; $keywords .= $before . $key . $after; } } return ($keywords); } /* works outside the loop */ function the_keywords($before='', $after='', $separator=',') { echo get_the_keywords($before, $after, $separator); } function is_keyword() { if (!empty($GLOBALS[KEYWORDS_QUERYVAR])) return true; else return false; } function get_the_search_keytag() { return($GLOBALS[KEYWORDS_QUERYVAR]); } function the_search_keytag() { echo get_the_search_keytag(); } /***** Add actions *****/ /* editing */ add_filter('simple_edit_form', 'keywords_edit_form'); add_filter('edit_form_advanced', 'keywords_edit_form'); add_filter('edit_post', 'keywords_update'); add_filter('publish_post', 'keywords_update'); add_filter('save_post', 'keywords_update'); /* for keyword/tag queries */ add_filter('query_vars', 'keywords_addQueryVar'); add_action('parse_query', 'keywords_parseQuery'); /* generate rewrite rules for above queries */ if (KEYWORDS_REWRITEON && KEYWORDS_REWRITERULES) add_filter('search_rewrite_rules', 'keywords_createRewriteRules'); /* Atom feed */ if (KEYWORDS_ATOMTAGSON) { add_filter('the_excerpt_rss', 'keywords_appendTags'); if (!get_settings('rss_use_excerpt')) add_filter('the_content', 'keywords_appendTags'); } /***** Callback functions *****/ function keywords_edit_form() { global $postdata; $post_keywords = get_post_meta($postdata->ID, 'keywords', true); // output HTML & JS echo "
Keywords
"; } function keywords_update($id) { global $wpdb; // remove old value delete_post_meta($id, KEYWORDS_META); // clean up keywords list & save $keyword_list = ""; $post_keywords = explode(",", $_REQUEST['keywords_list']); foreach($post_keywords as $keyword) { if ( !empty($keyword ) ) { if ( !empty($keyword_list) ) $keyword_list .= ","; $keyword_list .= trim($keyword); } } if (!empty($keyword_list) ) add_post_meta($id, KEYWORDS_META, $keyword_list); } function keywords_appendTags(&$text) { global $doing_rss, $feed; if ( (!$doing_rss) || ($feed != 'atom') ) return($text); $local = KEYWORDS_REWRITEON ? "tag" : "technorati"; $taglist = get_the_post_keytags(true, $local, ""); if (empty($taglist)) return($text); else return($text . " \n Tags: " . $taglist); } function keywords_addQueryVar($wpvar_array) { $wpvar_array[] = KEYWORDS_QUERYVAR; return($wpvar_array); } function keywords_parseQuery() { // if this is a keyword query, then reset other is_x flags and add query filters if (is_keyword()) { global $wp_query; $wp_query->is_single = false; $wp_query->is_page = false; $wp_query->is_archive = false; $wp_query->is_search = false; $wp_query->is_home = false; // mini-posts plugin doesn't play nice with this plugin remove_filter('posts_where', 'mini_posts_where'); remove_filter('posts_join', 'mini_posts_join'); add_filter('posts_where', 'keywords_postsWhere'); add_filter('posts_join', 'keywords_postsJoin'); add_action('template_redirect', 'keywords_includeTemplate'); } } function keywords_postsWhere($where) { global $wpdb; $where .= " AND $wpdb->postmeta.meta_key = '" . KEYWORDS_META . "' "; $where .= " AND $wpdb->postmeta.meta_value LIKE '%" . $GLOBALS[KEYWORDS_QUERYVAR] . "%' "; return ($where); } function keywords_postsJoin($join) { global $wpdb; $join .= " LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) "; return ($join); } function keywords_includeTemplate() { if (is_keyword()) { $template = ''; if ( file_exists(TEMPLATEPATH . "/" . KEYWORDS_TEMPLATE) ) $template = TEMPLATEPATH . "/" . KEYWORDS_TEMPLATE; else if ( file_exists(TEMPLATEPATH . "/tags.php") ) $template = TEMPLATEPATH . "/tags.php"; else $template = get_category_template(); if ($template) { include($template); exit; } } return; } function keywords_createRewriteRules($rewrite) { global $wp_rewrite; // add rewrite tokens $keytag_token = '%' . KEYWORDS_QUERYVAR . '%'; $wp_rewrite->rewritecode[] = $keytag_token; $wp_rewrite->rewritereplace[] = '(.+)'; $wp_rewrite->queryreplace[] = KEYWORDS_QUERYVAR . '='; $keywords_structure = $wp_rewrite->root . KEYWORDS_QUERYVAR . "/$keytag_token"; $keywords_rewrite = $wp_rewrite->generate_rewrite_rules($keywords_structure); return ( $rewrite + $keywords_rewrite ); } ?>