WordPress Custom Post Types. Ανάλυση και tutorial.

Το άρθρο δημοσιεύτηκε από τον Αρχιμήδης Μερτζάνος

Καλησπέρα και από εμένα. Ονομάζομαι Αρχιμήδης και μου αρέσει πολύ το web developing.Δεν μου αρέσει το "στημένο" γενικότερα οπότε γράφω άρθρα πάσης φύσεως σχετικά με το web development αλλά και γενικότερα πάντα με χαλαρή διάθεση. Διατηρώ μία πολύ νέα ιστοσελίδα , την Webapptester.com


Το wordpress είναι ξεκάθαρα από τις πιο δυνατές πλατφόρμες δημοσίευσης περιεχομένου. Το γεγονός ότι είναι open-source σε συνδυασμό με τις δυνατότητες που προσφέρει αλλά και τις δυνατότητες επέκτασης του το καθιστούν μία άριστη επιλογή στην επιλογή πλατφόρμας πάνω στην οποία θα βασίζουμε την ιστοσελίδα μας. Το σημερινό άρθρο εξηγεί μια ιδιαίτερη λειτουργία του WordPress που εμφανίστηκε από την έκδοση 3.0 και έπειτα. Η λειτουργία αυτή είναι η δυνατότητα δημιουργίας custom post types.Ας βουτήξουμε λίγο στα βαθιά λοιπόν και πάμε να εξηγήσουμε τι είναι τα custom post types.

Τι είναι τo “post type” στο wordpress;

Στο WordPress συμβαίνει πολλές φορές οι χρήστες να συγχέουν την έννοια “post” με την έννοια “post type“. Αυτά τα δύο ΔΕΝ είναι το ίδιο. Ένα “post” είναι μία δημοσίευση. Αποτελείται από κάποιο τίτλο , ένα body , έχει κάποιες tags κλπ. Αντιθέτως ένα “post-type” είναι κάτι γενικότερο. Το WordPress χρησιμοποιεί 5 post-types. Posts(δημοσιεύσεις), pages(σελίδες) , navigation-menus (μενού πλοήγησης), attachments (επισυνάψεις πχ μία φωτογραφία) και τέλος revisions ,όπου διατηρεί κάποια προσχέδια των διαφόρων δημοσιεύσεων που έχουμε κάνει καθώς και επαναλήψεις διαφόρων ήδη υπαρχόντων σελίδων και δημοσιεύσεων.Το post type ενός “αντικειμένου” φαίνεται στην παρακάτω φωτογραφία που δείχνει τον πίνακα που καταχωρείται ένα post στη βάση δεδομένων.

Τα post types του WordPress στη βάση δεδομένων

To post-type εδώ είναι “revision”

Άρα μία δημοσίευση -post- είναι μόνο ένας από τους 5 post-types που υποστηρίζει το wordpress.

Τι είναι τα custom post types;

Εκτός από τους παραπάνω 5 τύπους , το WordPress από τις τελευταίες εκδόσεις του μας δίνει τη δυνατότητα να δημιουργήσουμε το δικό μας ,προσαρμοσμένο τύπο post (custom post type). Αυτός ο τύπος post θα έχει τα δικά του χαρακτηριστικά ,δικό του control panel και θα μπορούμε να το ελέγξουμε από το admin control panel μας.

Γιατί να θέλω να δημιουργήσω ένα custom post type;

Από τη στιγμή που το wordpress μας προσφέρει πολλές δυνατότητες με τους post types που υποστηρίζει γιατί εμείς να θέλουμε να προσθέσουμε και άλλους τύπους; Γιατί πολύ απλά η ευελιξία και η δημιουργικότητα το απαιτούν πολλές φορές.
Μπορούμε να θέλουμε να έχουμε μία λίστα με τις αγαπημένες μας ταινίες, ή βιβλία, η αυτοκίνητα ή οτιδήποτε μας έρχεται στο μυαλό. Επίσης μπορούμε να έχουμε post-type τύπου “portfolio” και ότι δημοσιεύουμε με αυτόν τον τύπο να είναι εντελώς διαφορετικό και από οπτικής άποψης σε σχέση με το απλό post-δημοσίευση. Τα πάντα είναι ελεγχόμενα από εμάς. Ας ξεκινήσουμε λοιπόν με βήματα να δημιουργήσουμε ένα custom post type.

Σημαντικό Βήμα: Δηλώνοντας τον custom post type.

Το πρώτο βήμα είναι και το βασικότερο. Χωρίς αυτό δεν μπορούμε να χρησιμοποιήσουμε κάποιο custom post type. Πρέπει να τον δηλώσουμε..Κανονικά θα πρέπει να δηλωθεί στο αρχείο “functions.php”. Εγώ θα ακολουθήσω μία άλλη απλή προσέγγιση, θα δημιουργήσω ένα απλό plugin που θα το ενεργοποιώ και θα το απενεργοποιώ όποτε θέλω. Αυτό το plugin θα δημιουργεί στο admin menu μου ένα custom post type και εν συνεχεία θα μπορώ να κάνω τα υπόλοιπα. Ας ξεκινήσουμε.

Ο λόγος που δημιουργώ plugin αντί να γράψω απευθείας κώδικα στο functions.php είναι γιατί θέλω αυτός ο κώδικας να επαναχρησιμοποιείται με ευκολία και στα άλλα websites. Να είναι reusable όπως λέμε στον προγραμματισμό.

Δηλώνοντας το plugin.

Πριν γράψουμε τον κώδικα για το custom post type πρέπει να δηλώσουμε το plugin μας. Αυτό γίνεται ως εξής: Δημιουργούμε στον αγαπημένο μας editor ένα αρχείο, για παράδειγμα το “my_fav_cars.php”. Μέσα σε αυτό τα εξής έτσι ακριβώς όπως τα δείχνω παρακάτω:

<?php
/*
Plugin Name: My Favorites Car List
Plugin URI: http://webapptester.com/plugintest
Description: Το plugin αυτό δημιουργεί ένα custom Post type με θέμα τα αγαπημένα μας αυτοκίνητα.
Version: Version 0.1
Author: Archimidis Mertzanos
Author URI: http://webapptester.cm
License: GPL
*/
?>

 

Το παραπάνω ονομάζεται “header” του plugin και χωρίς αυτό δεν μπορεί να λειτουργήσει το plugin. Αυτό το αρχείο το τοποθετούμε στο “wp-content/plugins”. Αν τα κάνουμε όλα σωστά και πατήσουμε στο “Plugins” στο admin panel θα δούμε στα plugins μας:

Wordpress plugin για custom post type.

To wordpress plugin μας δηλώθηκε.

Βλέπουμε ότι όλα πήγαν καλά. Από δω και πέρα ότι κάνω θα μπορούσαμε να το κάνουμε κατευθείαν στο “functions.php” αρχείο.

 

Δηλώνοντας τον custom post type

Το πρώτο πράγμα που συμβουλευόμαστε είναι το wordpress codex για θέματα που αφορούν custom post types.
Βλέπουμε λοιπόν ότι πρέπει να ακολουθήσουμε απλά βήματα για να δηλώσουμε ένα custom post type. Προσοχή: Θα παραθέσω τον κώδικα και θα τον εξηγήσω. Στο αρχείο “my_fav_cars.php” ξεκινώ, δηλώνοντας τον custom type αλλά και τις παραμέτρους του.Συμβουλεύομαι τις σελίδες:

 

add_action('init','fav_cars_custom_type');
function fav_cars_custom_type(){
    register_post_type('fav_cars',

            array(
                'labels'=>array(
                    'name' => __( 'Favourite Cars' ),
	            'singular_name' => __( 'Favourite Car' )
                    ),
                'public'=>true,
                )
       );
 }

 

Επεξήγηση κώδικα για δήλωση custom post type.

Όπως εύκολα παρατηρούμε δημιουργούμε κατ’αρχάς μια συνάρτηση “fav_cars_custom_type“. Αυτή είναι υπεύθυνη για την δήλωση του custom post type μας. Αυτό το βλέπουμε διότι μέσα στη function μας καλείται η “register_post_type” συνάρτηση που δηλώνει το post type μας. Με το add_action ουσιαστικά αγκιστρώνουμε τη συνάρτηση που φτιάξαμε στο “init” που σημαίνει ότι η συνάρτηση μας θα τρέξει αφού πρώτα το wordpress μας φορτώσει πλήρως. Απαγορεύεται να δηλώσουμε το custom post type πριν το init.. Το ‘init’ είναι αυτό που ονομάζουμε στο WordPress, ‘hook’. Εκεί πάνω μπορούμε να ‘κρεμάμε’ δικές μας λειτουργίες. Υπάρχουν αρκετά είδη hooks στο wordpress.

Στη συνέχεια δηλώνουμε το όνομα του custom post type που στην περίπτωση μας είναι fav_cars και αρχίζουμε και συμπληρώνουμε τις παραμέτρους. Παραπάνω γράψαμε μόνο το όνομα που θα φαίνεται σε πληθυντικό και ενικό και εν συνεχεία δηλώνουμε ότι θέλουμε να φαίνεται ο custom Post type, να είναι δημόσιος. Ας ενεργοποιήσουμε το Plugin και ας δούμε λίγο το admin panel.

To custom post type που δημιουργήσαμε.

To custom post type που δημιουργήσαμε.

Όλα τα παραπάνω τα κάνουμε συμβουλευόμενοι πάντα το wordpress codex.

Κάνοντας πιο λειτουργικό τον custom post type μας.

Ο παραπάνω κώδικας είναι βασικός. Εμείς θα τον αλλάξουμε χρησιμοποιώντας πολλές παραμέτρους που μπορούμε να χρησιμοποιούμε με την “register_post_type” συνάρτηση .Για να δούμε..

 

add_action('init','fav_cars_custom_type');
function fav_cars_custom_type(){
    register_post_type('fav_cars',

            array(
                'labels'=>array(
                    'name' => __( 'Favourite Cars' ),
	            'singular_name' => __( 'Favourite Car' ),
                    'add_new'=>__('Add A New Car'),
                    'add_new_item'=>__('Add A New Favourite Car'),
                    'edit_item'=>__('Edit the Car'),
                    'view_item'=>__('View your Favorite Car')
                    ),
                'public'=>true,
                'menu_position' => 80,
                'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ),
                'has_archive'=>true,
                'taxonomies' => array(''),
                'show_ui'=>true
                )
       );
 }

Ο παραπάνω κώδικας εξηγείται από μόνος του. Το μόνο που θέλω να πω είναι ότι το ‘supports’ είναι παράμετρος που ουσιαστικά μας λέει τι υποστηρίζει ο custom type μας. Εδώ λοιπόν ο τύπος μας υποστηρίζει τίτλο, editor, featured image και custom – fields. Μπορούμε να προσθέσουμε comments , trackbacks και άλλα πράγματα. Επίσης, το ‘taxonomies’ είναι ουσιαστικά κατηγορίες που μπορεί να χρησιμοποιεί ο συγκεκριμένος τύπος post. Για παράδειγμα μπορούμε να έχουμε taxonomy “Mercentes”, “Porche” κλπ. Φανταστείτε τα taxonomies σαν κατηγορίες του ενός κανονικού post. Τις ‘taxonomies’ ενός custom post type τις δημιουργούμε με το register-taxonomy-customΤέλος το menu-position είναι 80. Εμφανίζεται κάτω από τα settings στο admin panel.Δείτε μία φωτογραφία.

Custom post type position

Ο custom post type είναι κάτω από τα setings.

 

Ωραία, δηλώσαμε τον custom post type.Τώρα τι;

Φτάσαμε μέχρι εδώ ,ενεργοποιήσαμε το Plugin μας, λειτουργεί και όντως αν πάμε να προσθέσουμε ένα post type -πατώντας στο “Add a New Car” θα δούμε ότι μπορούμε να γράψουμε τίτλο, περιεχόμενο , να έχουμε featured image και να έχουμε και custom fields. Τι μπορούμε να κάνουμε από εδώ και κάτω; Έχουμε 2 επιλογές. Η πρώτη είναι να δημιουργήσουμε κάποια posts σε αυτό το post-type και να τα εμφανίσουμε. Η δεύτερη είναι να πάμε ακόμα παραπέρα, να δημιουργήσουμε custom_taxonomies και custom metaboxes. Αυτή είναι πιο προχωρημένη προσέγγιση και ουσιαστικά κάνει το custom post type να είναι απόλυτα προσαρμοσμένο στις ανάγκες μας.Ας δούμε τις επιλογές αυτές μία μία…:))

Επιλογή #1:Δημιουργώντας posts και εμφανίζοντας τα.

Η πρώτη επιλογή είναι απλή. Πατάμε το “Add a new car” και δημιουργούμε 3 posts. Γράψτε τίτλο, περιεχόμενο και αν θέλετε βάλτε και ένα featured image. Αφού τα προσθέστε στο admin panel του custom type βλέπετε κάτι τέτοιο:

Custom Post type items

Προσθέσαμε τρία posts στο custom post type που δημιουργήσαμε.

 

Εάν φορτώσετε τη σελίδα σας δεν πρόκειται να δείτε κανένα από τα παραπάνω. Πρέπει να “πούμε” στο wordpress ότι μαζί με τα κανονικά posts στην αρχική σελίδα να εμφανίζει και τα post που προέρχονται από custom post type. Κάνουμε το εξής:
Στο plugin μας μέσα προσθέτουμε:

//Στην αρχική σελίδα δείχνε post, σελίδες αλλά και post με τύπο fav_cars.
add_action( 'pre_get_posts', 'hook_my_custom_type' );

function hook_my_custom_type($query) {
	if (is_home() && $query->is_main_query() )
		$query->set( 'post_type', array( 'post', 'fav_cars' ) );
	return $query;
}

Εδώ πάλι χρησιμοποιούμε ένα hook του WordPress το ‘pre_get_posts‘. Αυτό το hook λειτουργεί πριν κάνει το wordpress μας αναζήτηση για το ποιους τύπους post θα παρουσιάσει ,για παράδειγμα στην αρχική σελίδα. Εδώ του λέμε να εμφανίσει posts και custom posts με τύπο “fav_cars” που ορίσαμε παραπάνω, σε περίπτωση που είμαστε στην αρχική σελίδα. Τρέχουμε και πάλι τη σελίδα μας.Δείτε τι συμβαίνει:

Custom posts στην αρχική σελίδα.

Τα custom posts εμφανίζονται στην αρχική σελίδα!

Από κει έπειτα μπορείτε να πειράξετε την εμφάνιση τους με χρήση CSS όπως ακριβώς θα κάνετε με ένα κανονικό post. Εννοείται ότι μπορούμε να φτιάξουμε σελίδα που θα εμφανίζονται τα custom post types. Απλά προτιμώ να το κάνω στην επιλογή 2 παρακάτω σαν μια πιο ολοκληρωμένη λύση.

 

Επιλογή #2: Σύνθετη επιλογή δημιουργίας custom post type προσαρμοσμένη στις ανάγκες σας.

Είδαμε πόσο απλό είναι να έχουμε custom post types. Το πρόβλημα είναι ότι εάν ακολουθήσουμε την παραπάνω τεχνική δεν έχουμε και πολλές δυνατότητες. Εδώ λοιπόν θα κάνουμε το εξής. Θα δημιουργήσουμε δικές μας κατηγορίες για το custom post type, taxonomies που λέγαμε πριν , θα δημιουργήσουμε μία template όπου θα προβάλλονται αυτά τα custom post types και θα κάνουμε και custom User Interface με χρήση metaboxes. Πάμε να τα δούμε ένα – ένα…

Σημαντικό : από το plugin διαγράψτε το παραπάνω κομμάτι κώδικα που γράψαμε στην πρώτην επιλογή εμφάνισης των custom posts.

Δηλώνοντας μια custom taxonomy

Για να δηλώσουμε custom taxonomies θα χρησιμοποιήσουμε την register taxonomy function του wordpress και θα την γράψουμε μέσα στο plugin μας. Εκεί θα προσδιορίσουμε κάποιες παραμέτρους της function αυτής όπως κάναμε και παραπάνω με την “register_post_type” function. Η συνάρτηση έχει τις εξής παραμέτρους:

<?php register_taxonomy( $taxonomy, $object_type, $args ); ?>

Όπου

  • $taxonomy: Το όνομα της κατηγορίας για παράδειγμα “fav_cars_maker”
  • $object_type: Εδώ δηλώνουμε ότι η taxonomy αυτή είναι τύπου “fav_cars” ανήκει δηλαδή στο custom post type που ορίσαμε.
  • $args: Πίνακας διαφόρων παραμέτρων.

Ο κώδικας είναι:

add_action('init','add_my_taxonomy');
function add_my_taxonomy(){
    register_taxonomy('fav_cars_maker',
                      'fav_cars',
                      array(
                      'labels'=>array(
                      'name'=>__('Car Makers'),
                      'singular_name'=>__('Car Maker'),
                      'search_items'=>__('Search Car Makers'),
                      'update_item' =>__('Update Car Maker'),
                      'add_new_item'=>__('Add New Car Maker'),
                      'new_item_name'=>__('New Maker')   
                      ),   
                     'public'=>true,
                     'hierarchical'=>true,
                     'show_ui'=> true,
                     'rewrite'=> array( 'slug' => 'maker' )
            ));
}

Ο παραπάνω κώδικας εξηγείται ουσιαστικά από μόνος του. Το μόνο που θέλω να πω είναι ότι βάζοντας ‘hierarchical’=>’true’ αυτό δίνει τη δυνατότητα σε αυτή την custom taxonomy να συμπεριφέρεται όπως μία κανονική κατηγορία στο wordpress έχοντας δηλαδή υποκατηγορίες κλπ. Εάν το είχαμε στο false τότε η taxonomy αυτή θα συμπεριφερόταν σαν wordpress tag.
Για να δούμε λίγο τώρα πώς έγινε το administrator interface μας.

Custom taxonomy στο admin menu του wordpress.

Δημιουργήσαμε την custom taxonomy.

Ας πατήσουμε το link να δούμε ότι μας ανοίγει μία σελίδα στην οποία μπορούμε να προσθέσουμε αντικείμενα σε αυτή την taxonomy.Προσθέστε 2-3 μάρκες και εν συνεχεία πατήστε το “add a new car”. Θα δείτε ότι στα δεξιά υπάρχει ένα κουτί, ένα metabox με τις custom taxonomies.

Custom taxonomy metabox.

Το metabox που δημιουργήθηκε στη σελιδα που προσθέτουμε τα αυτοκινητα.

Έτοιμες οι custom κατηγορίες μας!

 

Δημιουργία metaboxes για τα custom post types μας.

To WordPress μας παρέχει ένα editor όπως είδαμε πιο πάνω στο οποίο μπορούμε να γράφουμε τίτλο, περιγραφή και να διαλέγουμε taxonomies. Γιατί λοιπόν να μην κάνουμε και τον editor μας εντελώς customized; Δηλαδή γιατί να μην δημιουργήσουμε κουτιά που θα παίρνουν επιπλέον πληροφορίες για το κάθε αυτοκίνητο όπως τιμή και ιπποδύναμη?Αυτό πλέον είναι δυνατό με το Plugin μας με το οποίο θα δημιουργήσουμε metaboxes.Για πάμε να το δούμε:

Στο plugin μας προσθέτουμε:

add_action('admin_init','my_custom_post_admin');

Το ‘admin_init’ είναι ένα hook που ενεργοποιείται όταν είμαστε στην περιοχή administration του wordpress μας.
Πρέπει να γράψουμε την ‘my_custom_post_admin’ function με την οποία θα δημιουργούμε τα metaboxes στη σελίδες που θα προσθέτουμε ή θα επεξεργαζόμαστε ένα custom post type. Η συνάρτηση που δηλώνει τα metaboxes είναι η:

<?php add_meta_box( $id, $title, $callback, $post_type, $context, $priority, $callback_args ); ?>

όπου:

  • $id: Είναι το id που φαίνεται στο HTML αρχείο στο browser.
  • $title: Ο τίτλος του metabox που βλέπει ο χρήστης.
  • $callback: Η συνάρτηση που παράγει τον HTML κώδικα για τη σελίδα όπου βρίσκεται το metabox.
  • $post_type: Ο τύπος του post στον οποίο θα συναντούμε το metabox όταν πάμε στη σελίδα του editor.Εδώ είναι ‘fav_cars’.
  • $context: Το μέρος της σελίδας που βρίσκεται το metabox για παράδειγμα στο πλάι-‘side’.
  • $priority: Τη προτεραιότητα έχει το metabox σε σχέση με τα άλλα κουτιά στη οθόνη αν είναι πιο πάνω πιο κάτω κλπ.
  • $callback args: Είναι οι παράμετροι που στέλνουμε στην callback συνάρτηση που μιλήσαμε 4 bullets πιο πάνω.

Ας δούμε λοιπόν πως δημιουργώ, δηλώνω και εμφανίζω 2 metaboxes ένα για την ιπποδύναμη και ένα για την τιμή:
Προσθέτω στο plugin:

function my_custom_post_admin(){
    add_meta_box('car-price',
                 'Car Price',
                 'get_car_price_box',
                 'fav_cars',
                 'normal',
                 'low');

    add_meta_box('car-horsepower',
                 'Horse Power',
                 'get_horsepower_box',
                 'fav_cars',
                 'normal',
                 'low');
}

Αυτό που λείπει βέβαια είναι να δημιουργήσω τις callback functions. Η μία είναι η ‘get_car_price_box‘ και η άλλη η ‘get_horsepower_box‘. Ας τις δημιουργήσουμε!Μετά από τον παραπάνω κώδικα προσθέτουμε:

function get_car_price_box(){
  global $post;// Για να πάρουμε το id του post.
  $post_id = $post->ID;
  //επιστρέφει τιμή εάν έχει ήδη οριστεί.Αυτό επιτελείται με το true και την τοποθετεί στο key=thePrice
  $thePrice = get_post_meta($post_id,'thePrice',true); 
  echo '<input type="text" name="thePrice" value="' . $thePrice.'" />';

  }

  function get_horsepower_box(){
  global $post;// Για να πάρουμε το id του post.
  $post_id = $post->ID;
  //επιστρέφει τιμή εάν έχει ήδη οριστεί.Αυτό επιτελείται με το true.
  $theHPower = get_post_meta($post_id,'theHPower',true); 
  echo '<input type="text" name="theHPower" value="' . $theHPower.'" />';

  }

Εάν πάμε στο editor θα δούμε ότι προστέθηκαν τα δύο πεδία. Δείτε το.

Δύο metaboxes προστέθηκαν κάτω από τον custom post type editor.

Δύο metaboxes προστέθηκαν κάτω από τον editor.

Υπάρχει όμως ένα θέμα. Αν γράψουμε κάτι στα κουτιά αυτά δεν σώζεται πουθενά.
Για αυτό θα χρησιμοποιήσουμε μία συνάρτηση του wordpress, την update_post_meta η οποία με το που σώζουμε το Post ή το ανανεώνουμε θα αποθηκεύει και τις τιμές από τα Metaboxes.

 

Αποθήκευση των τιμών των metaboxes.

Στον κώδικα του plugin προσθέτουμε:

add_action('save_post', 'save_all_the_meta');
  function save_all_the_meta(){
  global $post;
  update_post_meta($post->ID, "thePrice", $_POST["thePrice"]);//παίρνει την τιμή από το metabox με το name="thePrice".   
  update_post_meta($post->ID, "theHPower", $_POST["theHPower"]);      
  }

Ο παραπάνω κώδικας εξηγείται μόνος του. Κάθε φορά που σώζουμε το post ανανεώνονται και οι τιμές στα metaboxes. Ας το δούμε:

Metaboxes updated στο wordpress

Μετά που πάτησα update οι τιμές έμειναν στα κουτάκια, αποθηκεύτηκαν!

 

Τέλεια. Έμεινε το εξής. Να δημιουργήσουμε μία template που θα χρησιμοποιείται αποκλειστικά με αυτόν τον custom post type.

Δημιουργία template για αποκλειστική χρήση με τα custom post type μας.

Όταν στο wordpress έχουμε δημιουργήσει ένα κανονικό post ,η template που στο οποίο το εμφανίζουμε είναι το αρχείο “single.php“. Για το custom post μας θα θα χρησιμοποιήσουμε το “single-fav_cars.php“. που θα δείχνει μία λίστα από τα custom posts. Όταν δηλαδή πληκτρολογήσουμε στο url:

http://example.com/fav_cars

Θα εμφανίζεται η λίστα που θα περιέχει και τις τιμές από τα metaboxes.
Ας πάμε να την δημιουργήσουμε. Δημιουργούμε ένα αρχείο “single-fav_cars.php”. Θα το τοποθετήσουμε στον ίδιο φάκελο που έχουμε τοποθετήσει το Plugin.Προσοχή.Αυτό το κάνουμε για λόγους ευκολίας. Θα μπορούσαμε εννοείται να δημιουργήσουμε το αρχείο αυτό μέσα στο folder του theme που έχουμε , κάτω από το “single.php“.

Πριν φτιάξουμε τη σελίδα, το template στον κώδικα του plugin προσθέτουμε:

 add_action('template_include','my_custom_template',1);
  function my_custom_template($tpath){
     if(get_post_type()=='fav_cars'){
         //Θέλω να έχω custom template μόνο όταν ο βλέπω όλα τα custom post types μαζί!

         if(!is_single()){           
          $theDir= plugin_dir_path(__FILE__) .'single-fav_cars.php';//Το template μας βρίσκεται στο φάκελο με τα plugins. 
          //var_dump($theDir);
          $tpath = $theDir;
         } 
     }
    return $tpath;  
  }

O παραπάνω κώδικας ουσιαστικά κοιτάει εάν βρισκόμαστε σε κάποια σελίδα που είναι του custom post type ‘fav_cars’ και εάν είναι μία σελίδα που δεν είναι για μία μονή εγγραφή δηλαδή ενός μόνο post από αυτό το custom post type. Εάν ισχύουν όλα τα παραπάνω μας πηγαίνει στην template μας την “single-fav_cars.php”, όπου βρίσκεται στο directory που είναι το plugin μας.

Δημιουργία του single-fav_cars.php.

Ο κώδικας που τοποθετούμε στο αρχείο αυτό είναι:

<?php get_header();?>
<!--Ξεκινά η HTML σελίδα μας-->
<div id="wrapper">
    <div id="main_content">

<?php   //δηλώνω παράμετρο ότι θέλω το Post type να είναι το fav cars.
        $args = array(
         'post_type'=>'fav_cars'   
        );
         $my_query = new WP_Query($args);
        //Ξεκινά το wordpress loop
         while ($my_query->have_posts() ) : $my_query->the_post();
       ?>    
          <!--Παίρνουμε τίτλο και περιγραφή και την featured image -->
          <div class="mainCarDesc">
          <strong>Car Name: </strong><?php the_title(); ?>
          <br/>
          <?php the_post_thumbnail(array(80*80)); ?>    

          <br />
          <strong>Car Description:</strong>
          <p>
              <?php the_content();?>
          </p>
          <!--Εμφανίζουμε τα metaboxes-->
          <br/>
          <strong>Price:</strong>
          <?php echo get_post_meta(get_the_ID(),'thePrice',true); //αν δεν βαλουμε true επιστρέφεται πίνακας.
?>
          <p>
              <strong>HorsePower: </strong>
              <?php echo get_post_meta(get_the_ID(),'theHPower',true);?>
          </p>
          <!-- Αν έχουμε τοποθετήσει και taxonomy στο κάθε ένα από αυτά...την εμφανίζουμε-->
          <strong>Car Maker </strong>
                <?php the_terms(get_the_ID(), 'fav_cars_maker' ,  ' ' ); //με το ' ' κάποιος πατάει το link της taxonomy ανοίγει το page του συγκεριμένου post.;
?>
          <hr>
          </div>

<?php endwhile; ?>
    </div>
</div>

<?php get_footer(); ?>

Για να δούμε. Εάν πληκτρολογήσω το “http://example.com/fav_cars” παίρνω:

Custom post type template.

Δημιουργήσαμε μία custom template για τα posts μας

Τα καταφέραμε…. :)

 

Είναι κάτι παραπάνω από προφανές ότι η συγκεκριμένη template θέλει δουλειά σε πολλά σημεία αλλα αυτό που θέλαμε το καταφέραμε…. :))))

Επίλογος.

Εδώ κάπου έφτασε το τέλος του custom post types crash course. Είναι όντως πολύ μεγάλο άρθρο στο οποίο κάνουμε όμως πολλά πράγματα. Με τα custom post types μπορούμε να κάνουμε ακόμα περισσότερα.Ελπίζω να μάθατε κάτι και να θέλετε να ψάξετε για να αποκτήσετε ακόμα περισσότερες γνώσεις.Σας ευχαριστώ πολύ για την ανάγνωση.

Κατεβάστε το plugin και την template.

Πηγή άρθρου:WordPress Custom Post Types. Ανάλυση και tutorial.


Σημείωση: Μην βάζετε keywords στο πεδίο για το όνομα καθώς επίσης και links προς άσχετες ιστοσελίδες με τη θεματολογία του άρθρου. Οι διαχειριστές του ifeed θα μαρκάρουν αυτόματα αυτά τα σχόλια ως spam!

Leave a Reply

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

Αποκτήστε τα Παρακάτω Δύο
ΔΩΡΕΑΝ Ebook

seo ebook

Τα συγκεκριμένα ebook θα σας αποκαλύψουν κάποια από τα μεγαλύτερα μυστικά για να αυξήσετε τις θέσεις σας στο Google, καθώς επίσης και τα έσοδα σας μέσω internet!!!

  • Ανεβείτε Εύκολα Στο Google
  • Αποκτήστε Υψηλή Επισκεψιμότητα
  • Κερδίστε Περισσότερα Χρήματα

Εγγραφείτε στο Εβδομαδιαίο NEWSLETTER

&

Αποκτήστε ΔΩΡΕΑΝ το SEO Ebook
"Αποτελεσματικό Link Building" & το Ebook "Χρήματα Μέσω Internet".