WordPress, 2.9 sürümünden bu yana özel yazı türlerini kullanma olanağı sunuyor. Şimdi 3.0 sürümüyle birlikte, özel yazı türleriniz için panel oluşturma seçeneğiyle işler biraz daha ileri götürüldü. Bu eğitimde, sitenizdeki Özel Yazı türlerini WordPress sitenize nasıl uygulayacağınızı göstereceğiz.
Özel Yazı Türleri Oluşturma – Eklentileri Kullanma
3.0 sürümünden itibaren WordPress, özel yazı türleri oluşturmak için herhangi bir yerleşik kullanıcı arayüzüne (kullanıcı arayüzü) sahip değildir. Özel yazı türleri oluşturmak için kullanabileceğimiz yalnızca iki seçenek vardır: eklentiler veya bunları temanızın functions.php dosyasına kodlamak. İlk olarak, özel yazı türleri oluşturmak için eklentileri nasıl kullanabileceğimize bakalım.
Özel Yazı Tipi Kullanıcı Arayüzü
Custom Post Type UI, WebDevStudios ‘tan Brad Williams tarafından geliştirilen ve kolayca özel yazı türleri ve taksonomiler oluşturmanızı sağlayan bir eklentidir. Bu eklentinin en güzel özelliklerinden biri, özel yazı türleri oluşturmak için bir kod oluşturmasıdır, böylece daha sonra bunu temanızın functions.php dosyasına yapıştırabilirsiniz. Bu eklentinin tuhaflıklarından biri, taksonomileri tüm post_types’leriniz arasında paylaşamamasıdır.
Özel Yazı Tipi UI panelinden “Yeni Ekle “ye tıklayın.
Daha sonra doldurmanız için size birkaç seçenek sunulur. “Yazı Türü Adı”, WordPress tarafından söz konusu yazı türündeki tüm yazıları sorgulamak için kullanılacak olan addır. “Etiket”, normal “Yazı” menüsünde olduğu gibi Gösterge Tablonuzun kenar çubuğunda görüntülenecek olan şeydir. “Gelişmiş Seçenekleri Görüntüle “yi genişletirseniz yapılandırabileceğiniz birkaç seçenek daha görürsünüz. “Herkese Açık” ve “Kullanıcı Arayüzünü Göster” gibi çoğu kendi kendini açıklayıcı niteliktedir. İlki true olarak ayarlandığında özel yazı tipi menüsünün kenar çubuğunda görüntülenmesini sağlar ve diğeri (show ui) true olarak ayarlandığında menü panelini oluşturur.
“Rewrite” özel yazı türünün SEO Dostu WordPress URL’lerini (Kalıcı Bağlantılar) kullanmasını sağlayan şeydir. “Custom Rewrite Slug” istediğiniz herhangi bir şeye ayarlanabilir. WordPress kalıcı bağlantıları oluşturmak için bu slug’ı kullanacaktır. Dolayısıyla, “filmler” özel yeniden yazma slug’ına sahip example.com adresimiz varsa, özel yazı türünüzün kalıcı bağlantıları example. com/moviesgibi görünecektir
WordPress “Query Var” fonksiyonu, özel yazı türünüzün gönderisini sorgulamanızı sağlar. Yani daha önce verilen örneği kullanırsak, Filmler yazı tipi altında yazılan İlk Film Yazım başlıklı bir yazıya erişmek için example.com/?movies=my-first-movie-post yazabiliriz. Böylece sorgu değişkeni şu şekilde görünür: ?posttypename
Son olarak, özel gönderi türünüz tarafından desteklenen küçük resimler/özellikli resim ve alıntılar gibi farklı özellikleri seçebilirsiniz.
Özel Yazı Türleri Oluşturma – Functions.php dosyasını kullanma
Özel gönderi türlerini bir eklenti olmadan kullanmayı tercih ediyorsanız, aşağıdaki kodu temanızın functions.php dosyasına eklemeniz yeterlidir:
// Creates Movies post type register_post_type('movies', array( 'label' => 'Movies', 'public' => true, 'show_ui' => true, 'capability_type' => 'post', 'hierarchical' => false, 'rewrite' => array('slug' => 'movies'), 'query_var' => true, 'supports' => array( 'title', 'editor', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'thumbnail', 'author', 'page-attributes',) ) );
Kodu inceleyelim.
register_post_type( $post_type, $args ): Bu fonksiyon iki parametre alır: $post_type veya gönderi türünün adı ve $args, bir argüman dizisi.
etiket: Yönetici paneli kenar çubuğunda görüntülenen gönderi türüne verilen çoğul ad.
public: true/false. Yönetici kullanıcı arayüzünün bu türdeki gönderilerle doldurulmasına izin verir.
show_ui: true/false. Bu gönderi türünü yönetmek için varsayılan bir kullanıcı arayüzünü gösterir veya gizler.
capability_type: Varsayılan: post Okuma, düzenleme ve silme yeteneklerini kontrol etmek için kullanılacak gönderi türü.
hiyerarşik: Gönderi türünün hiyerarşik olup olmadığı.
rewrite: true/false. Varsayılan: true Slug argümanı girilirse, slug adı gönderilere eklenir.
query_var: true/false Yazı türü adını bir sorgu değişkeni olarak ayarlar.
destekler: Varsayılan: başlık ve yazar Yazı türünün izin verdiği farklı destek özelliklerini ayarlar.
register_post_type() hakkında daha fazla bilgi için WordPress Codex ‘i ziyaret edin.
Özel Yazı Türü Gönderilerini Görüntüleme
Özel gönderi türünüzdeki gönderileri görüntülemek için aşağıdaki kodları döngüye ekleyin. “name” yerine yazı türünüzün adını yazın. Not: Özel yazı türlerini index.php dosyanıza eklemek zorunda değilsiniz. Özel bir WordPress sayfası oluşturabilir ve aşağıdaki sorguyu Döngü içinde çalıştırabilirsiniz.
$query = new WP_Query( 'post_type=name' );
Birden fazla gönderi türündeki gönderileri görüntülemek için yukarıdaki kodu aşağıdakiyle değiştirin. Filmleri özel gönderi türü adınızla değiştirin.
$query = new WP_Query( array( 'post_type' => array( 'post', 'movies' ) ) );
Yukarıdaki kod, normal gönderi türündeki (post) ve özel gönderi türü olan filmlerdeki tüm gönderileri görüntüleyecektir.
İşte bu kadar. Umarız bu eğitim faydalı olmuştur ve sorularınızı yorumlarda belirtmeyi unutmayın.
Gaby Izarra
Ok I’m having a little trouble and you may be able to help….. here’s my Wordpress forum page. I’m trying to adapt an event list from a different theme on to the one I’m using.
http://wordpress.org/support/topic/php-query-for-custom-post-type-not-displaying-creating-theme-event-list?replies=1#post-5587886
dave
Ive created two custom post types but only the first one is showing on my page. ive added this
$query = new WP_Query( array( ‘post_type’ => array( ‘post’, ‘featured’, ‘latest’ )
) );
inside my loop file but nothing. how can i resolve this?
Jeroen
Do you know how i can add custom post types to the blog archive page, and rss feed ?
WPBeginner Support
Yes we do have guides on both topics. Please checkout how to create a custom post types archive page in WordPress, and how to add custom post types to your main WordPress RSS feed.
Yönetici
wizdom networks
Firstly, great article! I’m working through implementing custom post types via code. Noteworthy that the current WordPress documentation (http://codex.wordpress.org/Function_Reference/query_posts) specifies that the query_posts function should generally not be used and that the pre_get_posts hook is used to modify queries.
“It is strongly recommended that you use the pre_get_posts filter instead, and alter the main query by checking is_main_query”
Again, great article, thanks for sharing.
Cheers.
WPBeginner Support
Thanks Wisdom, we have updated the article with WP_Query
Yönetici
Thom Abbott
WOW…for a novice who uses WP to run their website, this is not Beginner stuff by any means! I’ll probably have to reach out to some WP developer to set up my Custom Page that I want.
Editorial Staff
Custom Post Types were created for developers to extend WordPress functionality. It was never meant for beginners.
Yönetici
mark shirley
query_posts( ‘post_type=movies’);
?>
I cant get this to work in my twentyeleven child theme page template where would i put it to pull a page of movies. Actually its the excerpts i really want. Thanks Mark
muntzdesigns
When using this plugin and adding the above code to loop.php you will lose control over categories…my custom post type is added to all categories…any help?
wpbeginner
@muntzdesigns This is why you have multiple loops… your main blog loop, archive.php, category.php etc… On a custom designed site, you will have to utilize that in order for this to work appropriately.
muntzdesigns
@wpbeginner@muntzdesigns So just add the above code to all files? (loop.php, archive.php and category.php). Thanks.
wpbeginner
@muntzdesigns No. You only add the code on the front pages. The issue you had was that custom post types were being added to all categories… You need to add the above code only to the main loop. Then create a new loop for category archive, taxonomy archive, author archive …
PriyaVerma
Nice article thanks you so much
dazuaga
No, I was wrong.
dazuaga
Never mind: %category%/%type%/%postname% I think will do the trick
dazuaga
What exactly does Content Type Identifier in CMS Press plugin? I’m looking for a way to prepend a the category slug to the custom post type (example.com/category/post_type/postname) but when using %category%/%identifier%/%postname% in Content Type Identifier automaticaly transforms this way: %categoryidentifierpostname
murphymakes
excellent info as per usual. thanks
whimba
I like Custom Post Type UI. It’s light and easy to use but is limited in functionality. So I created my own – http://wordpress.org/extend/plugins/mp-former/. You can try it
simplywendz
This is such a great tutorial for creating a custom post in wordpress. The steps are given on details one could easily follow. This is a big, big help!
hoss9009
I’ve been wondering this too!!
Cupbearer
Wow, I had the whole CMS Press thing working, but couldn’t figure out how to get it to show up in the posts. I guess it’s been around for so long that everyone just assumes that it should already be known. Perfect Answer to getting my Custom Post Type to show up in the Loop.
Jerry Craig
Cupbearer
Noel Boaz
Thsnks this helped me a lot to get my Custom post type on the front page. Definetly bookmarked, thanks.
Ed
I have tried the plugin, very impressive. However, I am trying to get a page attribute to appear from my themes ‘Pages’ attributes i.e the ability to use a full width page option. Am I to assume that your plugin only pulls attributes from Post type layouts rather than Page type layouts? All I want is to have the option of setting a post to a full, pre-determined template.
Great job though – I shall be using this a lot.
Cheers
Ed
Simon
I have tried the plugin way but couldn’t get the post to show up. Maybe that’s because I coulndn’t find the loop.php file.
Anyways, thanks a lot, I’m pretty sure it will work sometime soon.
I want to say that one super awesome thing that would be great to do with wordpress is to have the possibility to create custom views of content just like in drupal with the views module.
I know there is a plugin called pods and pods cms that is suppose to make that possible. Perhaphs you could ask the developper to help out in a post on wpbeginner if you do not understand it at all like me. I’m sure lots of people would love this. Presenting views is what realy makes a cms a realy dynamic cms after all.
Editorial Staff
The loop.php might not exist in your theme. Loop can also be found in your index.php, archive.php, category.php etc. You may also create a custom loop if you like.
Yönetici
Peter
Good tutorial, thank you for sharing.
I have a question on this.
I made a custom post type through functions.php (a calendar) which has a custom meta box in the admin UI. This meta box uses jQuery on one field.(http://jqueryui.com/demos/datepicker/).
For this datepicker to work, I need to embed the required scripts.
add_action(‘admin_enqueue_scripts’,’enqueue_my_scripts’);
works but my scripts get loaded on the entire admin UI. (which interferes with the default WP admin jquery)
So what I need is the hook for my custom post type.
this:
add_action(‘register_post_type’,’enqueue_my_scripts’);
doesn’t work because register_post_type isn’t a hook.
So, what is the hook for a custom post_type?
Amanda
You could try adding the following to your function definition before registering the script:
if(is_admin()) return;
So something like:
function some-function(){
// we don't need this on admin pages, so...
if(is_admin()) return;
//register the custom script
wp_enqueue_script( 'some-script' );
}
Evan
How do I get each content type to show up in the loop? I mean, it’s almost like Tumblr. If I post a picture… I need to customize the code in the loop – same thing I post a link.
Editorial Staff
You can see in the post, there is an option to show both a custom post types, and posts inside one loop…
Yönetici
Michael
I cannot seem to get the loop to work to query posts of my custom type. Your example seems easy enough so I tried the following $var = query_posts( ‘post_type=sponsor’);
Then I started a loop
while ($var ->have_posts()) : $var ->the_post();
Do stuff
endwhile;
this returns a php error:
Fatal error: Call to a member function have_posts() on a non-object in single-sponsor.php on line 22
line 22 is the line with the while loop.
Ideas? What am I doing wrong?
Romero
I have tried to create a tag for custom field, and when I use get_the_tags within the loop of custom type, it doesn’t print anything.
Any suggestions?
Jan
Im very excited about this new feature ^-^ You made a nice video. Altough in your example, why use custom post types and not just make up a category books and movies for the posts? That way you save all the hassle of a custom post type.
Editorial Staff
First, it lets you organize things differently. Second, you can have a completely different write panel with different options. It allows for much more customizations…
Yönetici
Sandra
Thanks for this great article! I’m a real wp beginner, and maybe you can help me with this question:
Is it possible to display archives of one custom post type in the sidebar like one can do by using the “display archives by cat”-plugin by kwebble?
Editorial Staff
Yes it is possible to display custom post types as archives. Just create a custom loop in the sidebar to display posts or categories from a specific post type.
Yönetici
lukeMV
Any easy to understand guides on how to add options to the custom posts? For example, if a movie is drama, comedy, horror…. to have those options as check boxes WITHIN the custom post edit panel? I can’t seem to find a guide or plug-in for that.
Paul
Hi, That was a great article. I was hoping that you may know the answer to my question.
In the last couple of lines you have:
this returns all posts and post_types named movies.
Do you know how to return both post_types named ‘movies’ and posts in the category ‘movies’ but exclude all other posts that do not have this category??
Editorial Staff
You would use the category parameters for the query_posts – http://codex.wordpress.org/Function_Reference/query_posts
Yönetici
Walter
Can you go one step back: Why do I need custom post types in the first place? What’s the use-case?
Editorial Staff
Custom Post Types are good for users who are using WordPress for more than a Blog, for example CMS. Lets say if you want to have a site that has your portfolio and your blog. Obviously you don’t want your blogs to look the same way as your portfolio does. That is when custom post types comes in handy. This is a very versatile feature for taking WordPress to the next level. For average blog user, they probably don’t need custom post types.
Yönetici
Tracy B.
Okay, but I’m still trying to understand the difference between this and just categorizing things. I’ve made plenty of sites for people where separate pages do things like list only the “current events” category and another the “projects” category or whatever. How is this better?
Editorial Staff
This is better in terms of organization. You can have custom taxonomy, write panel etc for a specific post type.
Chris
I can’t help but think that this would have been more useful if you showed something out of the ordinary with post types, rather than use the old “movies and books” bit.
How about a sideblog using post types, or something a bit more practical? All this does is re-state what the WP Codex will eventually have, if it isn’t already on there.
Editorial Staff
We are sorry that you feel this way Chris. WP Codex will not have a video that will show you how to do this. It does not matter what names we use for the custom post types, the idea is how to add them. We will not create an extra-ordinary site just to write a post about custom post type. If you seek that knowledge, you are probably better off doing it yourself. This blog still has to fulfill the needs of the beginner level users hence why we shared the plugin method.
Yönetici
Kevin Elliott
Will this work on WordPress 2.9 or is it only for 3.0?
I tried using 3.0, but some quirk happened where none of my plugins would activate, even the ones that said they activated. Was very strange!
-Kevin
Editorial Staff
This would work with 3.0, so use it on 3.0 only. Try reinstalling WordPress 3.0, we are running a few sites on it.
Yönetici
Marc
Just watched the video…
Is it true that we need to edit php files (= hard code) to get the whole thing working?
Editorial Staff
No, you have to do one or the other. In our video, we showed both ways. Either you can do the hard codes way, or the plugin way.
Yönetici
Marc
Allright, I see, thnx!
Then I suppose you started the hard code way? At the time seeing all the coding stuff only, I just quit. Therefore didn’t see the plugin way I guess…
Rilwis
Very nice article. The Custom Post Type UI plugin has the options very similar to raw PHP code of registering post types, that is great for developers.
Thanks for introducing many useful plugin to work with custom post types.
Kaye Media
Great article, looking forward to Wp3 =)
Bryan
I’m happy that Wordpress has integrated custom post types right into the wp framework. However I’m not seeing how it is any better than using plugins already available such as Magic Fields or Flutter. With those plugins you get the same effect plus easy to setup custom fields with lots of different types and flexibility in how to enter and display your data. Does wp 3.0 support anything like that right out of the gate?
Editorial Staff
You can create a UI for custom fields and just about anything in the backend with Custom Post Types. You are right that those plugins make it very easy for users, but if any of those plugins fall on development, then you are left with no choice.
Yönetici
Bryan
Fair enough. I’ve played around with the beta a bit, but not as much as I should I suppose. It would be exciting if it did go more that direction. Since I’ve become experienced using those plugins I almost don’t make a site now with one
So that would be great if all those tools were available and handled within the original application. I can see it leading to better backend management and encourage more people to contribute to it rather than a smaller group supporting a particular plugin.
Ian
I think they have intentionally left some of the custom post type code as code. To allow the average user to have to deal with it.
Abdul Wahid
This is awesome article
ravalde
I cant get any taxonomies to display in twentyeleven neither can I find a tutorial that shows me how from start to finish all seem to focus on twentyten and the loop