Bir programcı olarak, yazı tiplerimi bağlamak için kendi kodumu yazmaya başlarım. Hızlı bir yol değil, kolay değil, ama çok eğlenceli.
Yazı türleri
Biz iki basit yazılan tipleri oluşturmaya başlayın, Authorve Books:
add_action('init', 'p2p2_register_author');
add_action('init', 'p2p2_register_book');
function p2p2_register_author(){
$labels = array(
'name' => 'Author',
'singular_name' => 'Author',
'add_new' => 'Add New',
'add_new_item' => 'Add New Author',
'edit_item' => 'Edit Author',
'new_item' => 'New Author',
'all_items' => 'All Authors',
'view_item' => 'View Authors',
'search_items' => 'Search Authors',
'not_found' => 'No authors found',
'not_found_in_trash' => 'No authors found in Trash',
'parent_item_colon' => '',
'menu_name' => 'Authors'
);
register_post_type(
'Author',
array (
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'author' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
)
);
}
function p2p2_register_book(){
$labels = array(
'name' => 'Books',
'singular_name' => 'Book',
'add_new' => 'Add New',
'add_new_item' => 'Add New Book',
'edit_item' => 'Edit Book',
'new_item' => 'New Book',
'all_items' => 'All Books',
'view_item' => 'View Book',
'search_items' => 'Search Books',
'not_found' => 'No books found',
'not_found_in_trash' => 'No books found in Trash',
'parent_item_colon' => '',
'menu_name' => 'Books'
);
register_post_type(
'Book',
array (
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'book' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
)
);
}
Orada fantezi bir şey yok. Aslında, Codex'tan !
Meta kutu
Kitap yayın türümüze yazarımız için bir meta kutu ekleyerek devam edelim:
add_action('admin_init', 'p2p2_add_author_metabox');
function p2p2_add_author_metabox(){
add_meta_box(
'book_author',
__('Book Author', 'bandpress'),
'p2p2_book_author_metabox',
'book',
'side',
'default',
array( 'id' => 'p2p2_author')
);
}
Burada p2p2_book_author_metabox, meta kutumuzun içindekiler olacak bir geri arama işlevi görebilirsiniz .
Meta kutunun içeriği
Fonksiyonu yaratalım:
function p2p2_book_author_metabox($post, $args){
wp_nonce_field( plugin_basename( __FILE__ ), 'p2p2_book_author_nonce' );
$author_id = get_post_meta($post->ID, 'p2p2_book_author', true);
echo "<p>Select the author of the book</p>";
echo "<select id='p2p2_book_author' name='p2p2_book_author'>";
// Query the authors here
$query = new WP_Query( 'post_type=author' );
while ( $query->have_posts() ) {
$query->the_post();
$id = get_the_ID();
$selected = "";
if($id == $author_id){
$selected = ' selected="selected"';
}
echo '<option' . $selected . ' value=' . $id . '>' . get_the_title() . '</option>';
}
echo "</select>";
}
İşte sihir burada. İlk önce veritabanını yazarlar için sorgulayacağız ve sonra a'yı <select>sorgu sonuçlarımızla dolduracağız . Hakkında daha fazla bilgi için Kodeksi kontrol edin WP_Query. Artık kitap yayın türünüze gidebilir ve açılır kutunuzu görebilirsiniz:

İçeriğimizi kaydetme
Tabii ki seçimimizi kaydetmek istiyoruz, böylece meta kutuyu bizim için kaydedecek başka bir işlev ekliyoruz:
add_action('save_post', 'p2p2_save_author_metabox', 1, 2);
function p2p2_save_author_metabox($post_id, $post){
// Don't wanna save this now, right?
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( !isset( $_POST['p2p2_book_author_nonce'] ) )
return;
if ( !wp_verify_nonce( $_POST['p2p2_book_author_nonce'], plugin_basename( __FILE__ ) ) )
return;
// We do want to save? Ok!
$key = 'p2p2_book_author';
$value = $_POST["p2p2_book_author"];
if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value
update_post_meta( $post->ID, $key, $value );
} else { // If the custom field doesn't have a value
add_post_meta( $post->ID, $key, $value );
}
if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank
}
Şimdi git ve bir yazarla bir kitap kaydet! Kitabın yazarı wp_postmetaveritabanı tablosuna kaydedilecek ve açılır menüden seçilen değer meta olacaktır.
Kitap için bir yazar sütunu
Kitaplarımız için yönetici alanını genişletelim. Sütunları değiştirerek başlayacağız:
add_filter('manage_edit-book_columns', 'p2p2_add_book_columns');
function p2p2_add_book_columns($columns){
$new_columns['cb'] = '<input type="checkbox" />';
$new_columns['title'] = _x('Title', 'column name', 'bandpress');
$new_columns['p2p2_author'] = __('Author', 'bandpress');
return $new_columns;
}
Bu işlev yalnızca p2p2_author sütunlarını görmemizi sağlar. WordPress'in toplu düzenleme işlevselliği için cb onay kutusu sütunu gereklidir. Şimdi sütunumuza bazı bilgiler eklememiz gerekiyor. Bu işlevi ekliyoruz:
add_action('manage_book_posts_custom_column', 'p2p2_fill_book_columns', 10, 2);
function p2p2_fill_book_columns($column_name, $id) {
global $wpdb;
switch ($column_name) {
case 'p2p2_author':
$author_id = get_post_meta($id, 'p2p2_book_author', true);
$author = get_post($author_id);
$permalink = get_permalink($author_id);
echo "<a href='" . $permalink . "'>" . $author->post_title . "</a>";
break;
default:
break;
} // end switch
}
Anahtar, önceki işlevde yeni eklediğiniz her sütun içindir. Göstermek istediğinizi yankılanarak doldurursunuz. Kitabımızın yazarı olan gönderiyi alıyoruz ve 'profil sayfasına' hoş bir kalıcı bağlantı oluşturuyoruz. Öyle görünüyor:

Devam edecek
WordPress sitemizin arka ucuna iki yazı türü bağladık, ancak ön uçta bir şey göremiyoruz. Bunu başarmak için çok daha fazla çalışmaya ihtiyaç duyulacak, ancak olasılıklar biraz sonsuz. Yapabiliriz:
- Kitapları yazara göre sırala
- Yazar sayfasında kitapların bir listesini göster
- Kitap sayfasında yazarın diğer kitaplarının bir listesini göster
- Yazarın resimlerini içeren süslü bir meta kutu oluşturun
- Yazdığı kitaplar için yazar yönetici sayfasında bir sütun oluşturun
- Ve daha fazlası ...
Bu çözüme kendim ihtiyacım olduğu için bu cevap üzerinde çalışmaya devam edeceğim. Ancak şimdilik çalışmayı bırakacağım. Bu cevabı yarın güncellemeye başlayacağım.