Skip to content

WordPress SEO eklentisi ve Facebook Beğeni / Opengraph Sorunu

Bu hafta annemin Resimli Yemek Tariflerisitesini Yerleske.Net sistemine taşıdım. Yemek Tarifi ekleme eklentisi yarattım ve taşıma esnasında normal “post” custom post type’dan “yemek” custom post type’ına çevirmenin ne kadar işkence olduğunu da farkettim. Çevirmek değildi sorun.. Sorun, WordPress 3.5.1 kullandığımız şu günlerde cpt‘lerin %postname% permastruct’a sahip olamamasıydı. Örneğin “Kuru incir receli” için http://resimlitarif.com/kuru-incir-receli/ olan sayfa bağlantısı http://resimlitarif.com/yemek/kuru-incir-receli/ olmak zorunda kalıyordu. Ektra /yemek/ eklenince bağlantıya, haliyle bütün facebook yorumları ve beğenileri kayboluyordu. Bunu anneme kabul ettirmem imkansızdı haklı olarak -.-’ Çözüm için interneti aradım ama çözümün henüz olmadığı gördüm. Belki ileride 3.6+ olabilir ama şu an yoktu ve benim çözüm bulmam gerekiyordu. Ben de sırf bu sitede istisna olması için bir eklenti yazdım ve picasso’nun insan çizimleri gibi bi yaratık ortaya çıktı. Ahanda benim çözümüm:

remove_action('init', 'firmasite_yemek_cpt', 0);

add_action('init', 'firmasite_resimlitarif_cpt', 1);
function firmasite_resimlitarif_cpt() {

// Yemek Tarifi
  $args = array(
    'public' => true,
    'show_in_menu' => true, 
	'menu_position' => 4,
	'permalink_epmask' => EP_NONE,
	'menu_icon' => FIRMASITE_YEMEK_URL .'assets/img/icon16.png', // 16px16
	'rewrite' => array('slug'=>'/','with_front'=>false),
    'has_archive' => false,
    'supports' => array('title','editor','thumbnail')
  ); 
  register_post_type('yemek',$args);

}

remove_action('init', 'firmasite_yemek_tax', 0);
add_action('init', 'firmasite_resimlitarif_yemek_tax', 2);
function firmasite_resimlitarif_yemek_tax() 
{

  // Yemek Tarifi Belirgin Özellikleri
   register_taxonomy('yemekkonu','yemek',array(
    'show_in_nav_menus' => true,
    'show_ui' => false,
	'query_var' => true,
	'rewrite' => array('slug'=>'yemek/kategori','with_front'=>false),
	'update_count_callback' => '_update_post_term_count',
	'capabilities' => array(
		'manage_terms' => 'manage_network',
		'edit_terms' => 'manage_network',
		'delete_terms' => 'manage_network',
		'assign_terms' => 'edit_posts'
	)
  ));

  // Yemek Tarifi Filtreleri

  register_taxonomy('filtreyemek','yemek',array(
	'hierarchical' => true,
 	'rewrite' => array('slug'=>'yemek/filtre','with_front'=>false),
	'update_count_callback' => '_update_post_term_count'
  ));  

}

// http://wordpress.stackexchange.com/questions/37650/wordpress-3-3-custom-post-type-with-postname-permastruct
add_action("parse_query", 'firmasite_resimlitarif_parse_query');
function firmasite_resimlitarif_parse_query($query) {
	global $wp, $wp_rewrite;

	// Is this query for /%post_name%/? Is it main request query?
	if (isset($query->query['name'])
		&& substr($wp->matched_rule, 0, 7) == "([^/]+)"
		&& isset($query->query)
		&& isset($wp->query_vars)
		&& $query->query == $wp->query_vars)
	{
		if (!($post_types = get_query_var("post_type"))) {
			if ($wp_rewrite->permalink_structure == "/%postname%/")
				$post_types = array("post");
			else
				$post_types = array();
		}

		if (is_array($post_types)){
			$post_types[] = "yemek";
			$post_types[] = "page";
		}

		set_query_var("post_type", $post_types);
	} 
}

// http://wordpress.stackexchange.com/questions/57070/change-the-page-slug-in-pagination
if ( ! function_exists( 't5_page_to_sayfa' ) ){
    register_activation_hook(   __FILE__ , 't5_flush_rewrite_on_init' );
    register_deactivation_hook( __FILE__ , 't5_flush_rewrite_on_init' );
    add_action( 'init', 't5_page_to_sayfa' );
    function t5_page_to_sayfa()
    {
        $GLOBALS['wp_rewrite']->pagination_base = 'yemek/sayfa';
    }

    function t5_flush_rewrite_on_init()
    {
        add_action( 'init', 'flush_rewrite_rules', 11 );
    }
}

function firmasite_resimlitarif_activate() {

	firmasite_resimlitarif_cpt();

	flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'firmasite_resimlitarif_activate');

Open Graph Sorunu

Tek sorun bu sorun değildi. Bütün eklenti güncellemelerini yapınca WordPress SEO eklentisinin uyuzluğunu da bir kere daha içimde hissettim. Haliyle annem yeni yemek tarifi yayınlayınca bunu Facebook’da paylaşır: http://www.facebook.com/ResimliTarif  Annem bu hafta güncellemeden sonra yemek yayınlayıp paylaşmaya çalıştığında bi bakmış tarifin resmi görünmüyor. Ben kodlara bakınca bi gördüm ki bizim uyuz WordPress SEO eklentisi Facebook opengraph için eklemesi gereken kodları siteye eklemiyor. Neden? Sitede facebook admini  tanımlı olmayınca gerekli kodları eklemiyormuş paşamız. Yani og:image falan tanımlamaya çalışsan da nafile. Facebook tarifin resmini algılamıyordu. Bu sadece resimlitarif için değil bütün diğer siteler için de bir sorundu. Yani hadi resimlide admini tanımladık diyelim ya diğerleri? Bu sorunu kökten çözmek gerekiyordu ve böyle çözdüm:

add_filter('language_attributes', 'firmasite_opengraph_lang',9);
function firmasite_opengraph_lang($output) {
	global $wpseo_og;
	remove_filter( 'language_attributes', array( $wpseo_og, 'add_opengraph_namespace' ) );
	$output = $output . ' prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"';
	return $output;
}

Böylece bu sorunu da çözdük ama hala bu eklentiyi niye kullandığımı bilmiyorum. Tonla sorun çıkarıyor ve bir işe yaramıyor.. Sitemap özelliği olmasa 1 dakka durmam da..

Leave a Reply

Your email address will not be published. Required fields are marked *