Hi!
Disclaim, first:
- I'm not criticizing Joost or any plugin developper huge and free work
- Sorry for my not to bad but not so good english level
- I'm not a php rudy/king/dev
- PLEASE, this is not a troll thread. Just collaborat in any constructive way, or… do nothing
- "Who doesn't try, have nothing."
This is the tread/post wich give me the idea of this one:
http://wordpress.org/support/topic/plugin-wordpress-seo-by-yoast-problem-with-titles-meta?replies=18#post-3064482
The ONLY consideration for this new thread is: how to deal safe before your favorit SEO wp tool brake?
My personnal motivation is: I'm now ready to launch a new site, but damn, an update (1.2.5 by Yoast) just break my SEO. (see mentionned thread/post above).
Ok, let's start the dance:
Plugin is plugin, you trust in them but, one day, it ruin your efforts. How to safely replace it/them, when it's possible??
The goal: natively replace all functions provided by WordPress SEO by Yoast, by hard coding to your theme.
How? Here, collecting php snippets wich achieve this.
The MAIN goal: Achive to have Title, Meta Desc, Meta Key, Meta Robots for Page, Post, Category, Tag, …, with the only help of Custom fields and/or conditionnal PHP and/or something more smart.
The submain goal: Giving food to the hope than one day, WordPress team include a large amount of SEO function, natively on wordpress.
Nice? Ok stop blabla.
There are the firsts littles I can provide quickly, for your FUNCTION.PHP:
Cleanup head section:
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );
Trailing slash 1 :
/*
Plugin Name: Smart Trailing Slash
Plugin URI: http://www.fastagent.de/res/download/smart-trailing-slash.zip
Description: Gives permalinks a trailing slash, but removes it in permalinks with a filename extension, e.g. .html
Version: 1.01
Author: Peter Claus Lamprecht
Author URI: http://www.fastagent.de/
*/
function pcl_smart_trailingslashit($string) {
/* ensure, that there is one trailing slash */
$string = rtrim($string, '/') . '/';
/* if there is a filename extension like .html or .php, then remove the trailing slash */
if ( 0 < preg_match("#\.[^/]+/$#", $string) ) {
$string = rtrim($string, '/');
}
return $string;
}
add_filter('user_trailingslashit', 'pcl_smart_trailingslashit');
Add trailing slash to CAT (not tested) :
if (is_admin()) return;
$permalink_structure = get_option('permalink_structure');
if (!$permalink_structure || '/' === substr($permalink_structure, -1))
return;
add_filter('user_trailingslashit', 'ppm_fixe_trailingslash', 10, 2);
Another trailing slash (not tested):
/**
* Appends a trailing slash if it's missing in the permalink structure.
*
* Conditionally adds a trailing slash if the url type is not "single".
*
* @param string $url A URL with or without a trailing slash.
* @param string $type The type of URL being considered (e.g. single, category, etc).
* @return string The URL with the trailing slash fixed.
*/
function ppm_fixe_trailingslash($url, $type)
{
if ('single' === $type)
return $url;
if ('page' === $type)
return $url;
return trailingslashit($url);
}
BREADCRUMB with MICRODATA support (by http://www.seomix.fr/fil-dariane-chemin-navigation/ updated 19-04-2012):
//***Fil d'arianne
function myget_category_parents($id, $link = false,$separator = '/',$nicename = false,$visited = array()) {
$chain = '';$parent = &get_category($id);
if (is_wp_error($parent))return $parent;
if ($nicename)$name = $parent->name;
else $name = $parent->cat_name;
if ($parent->parent && ($parent->parent != $parent->term_id ) && !in_array($parent->parent, $visited)) {
$visited[] = $parent->parent;$chain .= myget_category_parents( $parent->parent, $link, $separator, $nicename, $visited );}
if ($link) $chain .= '<span typeof="v:Breadcrumb"><a href="' . get_category_link( $parent->term_id ) . '" title="Voir tous les articles de '.$parent->cat_name.'" rel="v:url" property="v:title">'.$name.'</a></span>' . $separator;
else $chain .= $name.$separator;
return $chain;}
function mybread() {
global $wp_query;$ped=get_query_var('paged');$rendu = '<div xmlns:v="http://rdf.data-vocabulary.org/#">';
if ( !is_home() ) {$rendu .= '<span id="breadex">Vous êtes ici :</span> <span typeof="v:Breadcrumb"><a title="'. get_bloginfo('name') .'" id="breadh" href="'.home_url().'" rel="v:url" property="v:title">'. get_bloginfo('name') .'</a></span>';}
elseif ( is_home() ) {$rendu .= '<span id="breadex">Vous êtes ici :</span> <span typeof="v:Breadcrumb">Accueil de '. get_bloginfo('name') .'</span>';}
if ( is_category() ) {
$cat_obj = $wp_query->get_queried_object();$thisCat = $cat_obj->term_id;$thisCat = get_category($thisCat);$parentCat = get_category($thisCat->parent);
if ($thisCat->parent != 0) $rendu .= " » ".myget_category_parents($parentCat, true, " » ", true);
if ($thisCat->parent == 0) {$rendu .= " » ";}
if ( $ped <= 1 ) {$rendu .= single_cat_title("", false);}
elseif ( $ped > 1 ) {
$rendu .= '<span typeof="v:Breadcrumb"><a href="' . get_category_link( $thisCat ) . '" title="Voir tous les articles de '.single_cat_title("", false).'" rel="v:url" property="v:title">'.single_cat_title("", false).'</a></span>';}}
elseif ( is_author()){
global $author;$user_info = get_userdata($author);$rendu .= " » Articles de l'auteur ".$user_info->display_name."</span>";}
elseif ( is_tag()){
$tag=single_tag_title("",FALSE);$rendu .= " » Articles sur le thème <span>".$tag."</span>";}
elseif ( is_date() ) {
if ( is_day() ) {
global $wp_locale;
$rendu .= '<span typeof="v:Breadcrumb"><a href="'.get_month_link( get_query_var('year'), get_query_var('monthnum') ).'" rel="v:url" property="v:title">'.$wp_locale->get_month( get_query_var('monthnum') ).' '.get_query_var('year').'</a></span> ';
$rendu .= " » Archives pour ".get_the_date();}
else if ( is_month() ) {
$rendu .= " » Archives pour ".single_month_title(' ',false);}
else if ( is_year() ) {
$rendu .= " » Archives pour ".get_query_var('year');}}
elseif ( is_archive() && !is_category()){
$posttype = get_post_type();
$tata = get_post_type_object( $posttype );
$var = '';
$the_tax = get_taxonomy( get_query_var( 'taxonomy' ) );
$titrearchive = $tata->labels->menu_name;
if (!empty($the_tax)){$var = $the_tax->labels->name.' ';}
if (empty($the_tax)){$var = $titrearchive;}
$rendu .= ' » Archives sur "'.$var.'"';}
elseif ( is_search()) {
$rendu .= " » Résultats de votre recherche <span>» ".get_search_query()."</span>";}
elseif ( is_404()){
$rendu .= " » 404 Page non trouvée";}
elseif ( is_single()){
$category = get_the_category();
$category_id = get_cat_ID( $category[0]->cat_name );
if ($category_id != 0) {
$rendu .= " » ".myget_category_parents($category_id,TRUE,' » ')."<span>".the_title('','',FALSE)."</span>";}
elseif ($category_id == 0) {
$post_type = get_post_type();
$tata = get_post_type_object( $post_type );
$titrearchive = $tata->labels->menu_name;
$urlarchive = get_post_type_archive_link( $post_type );
$rendu .= ' » <span typeof="v:Breadcrumb"><a class="breadl" href="'.$urlarchive.'" title="'.$titrearchive.'" rel="v:url" property="v:title">'.$titrearchive.'</a></span> » <span>'.the_title('','',FALSE).'</span>';}}
elseif ( is_page()) {
$post = $wp_query->get_queried_object();
if ( $post->post_parent == 0 ){$rendu .= " » ".the_title('','',FALSE)."";}
elseif ( $post->post_parent != 0 ) {
$title = the_title('','',FALSE);$ancestors = array_reverse(get_post_ancestors($post->ID));array_push($ancestors, $post->ID);
foreach ( $ancestors as $ancestor ){
if( $ancestor != end($ancestors) ){$rendu .= '» <span typeof="v:Breadcrumb"><a href="'. get_permalink($ancestor) .'" rel="v:url" property="v:title">'. strip_tags( apply_filters( 'single_post_title', get_the_title( $ancestor ) ) ) .'</a></span>';}
else {$rendu .= ' » '.strip_tags(apply_filters('single_post_title',get_the_title($ancestor))).'';}}}}
if ( $ped >= 1 ) {$rendu .= ' (Page '.$ped.')';}
$rendu .= '</div>';
echo $rendu;}
BREADCRUMB THEME HOOK:
<?php if (function_exists('mybread')) mybread();?>
Pleas, take your turn and feel free to share yours!