WordPress Yazı Formatları ve Kullanımı

WordPress Yazı Formatları ve Kullanımı

Yazı Formatları (Post Formats) WordPress 3.1 ile birlikte gelen bir tema özelliği olarak betimlenebilir. Themeforest gibi tema sitelerinden satın alabileceğiniz çoğu tema içerisinde temayı oluşturan kişilerin desteğini eklediği ama kullanıcıların büyük bir çoğunluğunun kullanmadığı bir özellik. Her bir formatın kendine has bir özelliği var ve bunları tema içerisinde farklı düzende gösterebilirsiniz. Bu özelliğin asıl kullanımı her farklı türün içerisindeki meta bilgisini ve tanımını SEO amacı ile de kullanabilmek. Örnek olarak haber sitelerindeki video içeriklerinin arama sonuçlarında ayrı görünmesi gibi.

WordPress Yazı Formatları Nelerdir?

WordPress alt yapısı dahilinde desteklenen yazı formatları listesi aşağıdaki gibidir. Temanızda destek olarak eklendiyse ya da temanıza destek olarak eklemeyi planlıyorsanız bunları göz önünde bulundurabilirsiniz. Açıklamalarıyla beraber ekliyorum.

  • aside : Başlıksız yazı paylaşımı. Facebook Güncellemesi gibi
  • audio : Ses dosyası yazı formatı. Yayınları (Podcast) tanımlamak için kullanılabilir.
  • chat : Konuşma transkripti
  • gallery : Bildiğimiz galeri, birden fazla galeri ekleyebilirsiniz.
  • link : Link için oluşturabileceğiniz yazı türü
  • image : Resim. Tekil resim yazı formatı
  • quote : Alıntı için kullanabileceğiniz format
  • status : Durum güncellemeleri için. aside formatından farklıdır
  • video : Video olarak yazıyı formatlamak için kullanılabilir

Bütün bunların yanında hali hazırda tanımlanmış olan standart adında bir format vardır. Bu WordPress sisteminin otomatik olarak kullandığı formattır.

Yazı Formatlarını sisteminizde aktifleştirmek

Temanızda bulunan functions.php dosyasına aşağıdaki kodu eklemek temanıza formatların desteğini ekler ve yazı yazma alanında sağ tarafta şu şekilde görüntülenir. Bu tabii ki sadece normal yazı türü için destek açacaktır.

add_theme_support( 'post-formats', array( 'aside', 'image','video','quote','link' ) );

Yukarıdaki kod aside,image, video, quote ve link desteğini sitenize ekleyecektir. Bunu yazı formatları ile ilgili başka bir fonksiyonunuz varsa ondan önce tanımlamalısınız. Eklendikten sonra görüntüsü ile şu şekilde olacaktır.

WordPress Yazı Formatları ve Kullanımı

Özel Yazı Türleri için eklemek

Yukarıda bu özelliğin sadece WordPress standart yazı türü için ekleneceğini söylemiştim. Aşağıdaki kodu destek için yukarıdaki kodu ekledikten sonra eklemelisiniz yine functions.php dosyanıza.

add_action('init', 'sayfaya_ya_da_ozel_yazi_turune_ekle', 11);

function sayfaya_ya_da_ozel_yazi_turune_ekle(){
    add_post_type_support( 'page', 'post-formats' );
    register_taxonomy_for_object_type( 'post_format', 'page' );
}

Yukarıdaki kod ile WordPress sayfalarına yazı format desteğini eklemiş olduk. Özel Yazı Türleri için de add_post_type_support fonksiyonunu çoğaltabilirsiniz. Özel Yazı Türü ne yada nasıl eklenir diye sorularınız varsa sizi şu linke alalım.

Yazı Formatlarını Temada Kullanmak

Desteğimizi ekledik ancak temamız içerisinde buna uygun desteğimiz yani şablonlarımız var mı? Yok ise aşağıdaki gibi bir loop ile yazı formatlarına özel şablon oluşturabiliriz. Oluşturulabilen formatlar için Örnekler alanına bakabilirsiniz.

Kullanılabilen Fonksiyonlar

Yazı formatları için üç farklı fonksiyon vardır;
set_post_format() : Var olan bir yazı için yazı formatı belirleme fonksiyonu
get_post_format() : Var olan bir yazının formatını getirme fonksiyonu
has_format() : Yazı belirlenmiş bir formatta mı diye sorgulama fonksiyonu

Kullanımları

set_post_format($post->ID, 'gallery');	//Kullanılacak yazının yazı formatını "gallery" olarak değiştirir
$format = get_post_format($post->ID);	//Kullanılan yazının formatını $format değerine atar
$varmiformat = has_post_format('gallery');	//If else ya da switch içine kullanılabilek şekilde sorgu için $varmiformat içine true false döner

Örnekler

Örnek kod WordPress orjinal teması olan Twenty Seventeen içerisinden alınmıştır.

index.php dosyası içeriği (The Loop Alanı);

	<div id="primary" class="content-area">
		<main id="main" class="site-main" role="main">

			<?php
			if ( have_posts() ) :

				/* Start the Loop */
				while ( have_posts() ) : the_post();

					/*
					 * Include the Post-Format-specific template for the content.
					 * If you want to override this in a child theme, then include a file
					 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
					 */
					get_template_part( 'template-parts/post/content', get_post_format() );

				endwhile;

				the_posts_pagination( array(
					'prev_text' => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
					'next_text' => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
					'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
				) );

			else :

				get_template_part( 'template-parts/post/content', 'none' );

			endif;
			?>

		</main><!-- #main -->
	</div><!-- #primary -->

Yukarıda gördüğünüz üzere tema içerisine template-parts/post/ klasöründe bulunan code-aside.php gibi dosyaları çağırmak için get_template_part fonksiyonu kullanılıyor. İçerik bulunamadığında ise sadece content.php çağırılacak şekilde bir düzen yapılmış. Bu durumda örnek olarak video içeriği dosyasına bakalım.
content-video.php dosyası içeriği;

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
	<?php
		if ( is_sticky() && is_home() ) {
			echo twentyseventeen_get_svg( array( 'icon' => 'thumb-tack' ) );
		}
	?>
	<header class="entry-header">
		<?php
			if ( 'post' === get_post_type() ) {
				echo '<div class="entry-meta">';
					if ( is_single() ) {
						twentyseventeen_posted_on();
					} else {
						echo twentyseventeen_time_link();
						twentyseventeen_edit_link();
					}
				echo '</div><!-- .entry-meta -->';
			};

			if ( is_single() ) {
				the_title( '<h1 class="entry-title">', '</h1>' );
			} elseif ( is_front_page() && is_home() ) {
				the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h3>' );
			} else {
				the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );
			}
		?>
	</header><!-- .entry-header -->

	<?php
		$content = apply_filters( 'the_content', get_the_content() );
		$video = false;

		// Only get video from the content if a playlist isn't present.
		if ( false === strpos( $content, 'wp-playlist-script' ) ) {
			$video = get_media_embedded_in_content( $content, array( 'video', 'object', 'embed', 'iframe' ) );
		}
	?>

	<?php if ( '' !== get_the_post_thumbnail() && ! is_single() && empty( $video ) ) : ?>
		<div class="post-thumbnail">
			<a href="<?php the_permalink(); ?>">
				<?php the_post_thumbnail( 'twentyseventeen-featured-image' ); ?>
			</a>
		</div><!-- .post-thumbnail -->
	<?php endif; ?>

	<div class="entry-content">

		<?php
		if ( ! is_single() ) {

			// If not a single post, highlight the video file.
			if ( ! empty( $video ) ) {
				foreach ( $video as $video_html ) {
					echo '<div class="entry-video">';
						echo $video_html;
					echo '</div>';
				}
			};

		};

		if ( is_single() || empty( $video ) ) {

			/* translators: %s: Name of current post */
			the_content( sprintf(
				__( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'twentyseventeen' ),
				get_the_title()
			) );

			wp_link_pages( array(
				'before'      => '<div class="page-links">' . __( 'Pages:', 'twentyseventeen' ),
				'after'       => '</div>',
				'link_before' => '<span class="page-number">',
				'link_after'  => '</span>',
			) );
		};
		?>

	</div><!-- .entry-content -->

	<?php
	if ( is_single() ) {
		twentyseventeen_entry_footer();
	}
	?>

</article><!-- #post-## -->

Bu da yazı formatını video seçtiğinizde oluşturabileceğiniz örnek yazı şablonudur. Bu şablon hem iç yazı is_single() hem de normal düzende kullanıldığı için faklı bir loop görüyor olabilirsiniz.

Bu bölümde ana sayfa yada kullanılan düzen için ayrı bir loop ve iç sayfa için ayrı bir düzen kullanılmıştır. Öncelikli olarak ana sayfa ve yazı listesi için yazıya eklenmiş olan öne çıkan görsel çekilerek düzende bunun kullanılması sağlanmış. İç sayfada ise yazıya eklenmiş olan video embed kodu alınarak yazının başına gelecek şekilde işlenmiş.

Bunlar için siz de ayrı şablonlar oluşturabilirsiniz.

Selametle