Extension in VSCode
- I install beautify for cleaning up the indentations of both php and html code at the same time.
- I also install PHP Intelephense to give auto completion on html tag.
Prelude
Hierarchy of wordpress php files: Assume that we have a post type called "program", as registered by using1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php function university_post_types() { //Program Post Type register_post_type( "program" , array ( 'supports' => array ( 'title' , 'editor' ), 'rewrite' => array ( 'slug' => 'programs' ), 'has_archive' => true, 'public' => true, 'labels' => array ( 'name' => 'Programs' , 'add_new_item' => 'Add New Program' , 'edit_item' => 'Edit Program' , 'all_items' => 'All Programs' , 'singular_name' => 'Program' ), 'menu_icon' => 'dashicons-awards' )); } add_action( "init" , "university_post_types" ); ?> |
\wp-content\mu-plugins\*.php
(mu stands for "must-use") , then we get:in our dashboard. This is a kind of customized post type, therefore we will create a php file that is dedicated to customizing post of type "program".
The Naming Convention in Wordpress
- for single program post: single-program.php
- for list of program post: archive-program.php
- for specific page about programs: page-programs.php
and we will create a page called programs (the built-in category, technically page is also a post of type page.)
Loading CSS and Javascript files in Header
Inside
functions.php
of a theme folder, we write
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function university_files() { wp_enqueue_style( "university_main_styles" , get_template_directory_uri() . '/style.css' ); wp_enqueue_script( "main-university-js" , get_theme_file_uri( "/js/scripts-bundled.js" ), null, "1.0" , true ); } add_action( "wp_enqueue_scripts" , "university_files" ); |
Setting Title Dynamically
Insidefunctions.php
we write
1 2 3 4 5 | function university_features() { add_theme_support( "title-tag" ); } add_action( "after_setup_theme" , "university_features" ); |
Custom Query
By default if we runwhile(has_post())
in archive-program.php (no "s", no "s", no "s"), wordpress will make a default query that loops through all posts of type "program". However, outside of this specifically named file, we need to make a custom query to obtain posts as follows. Suppose we want to obtain all "events" in the past inside page-past-events.php
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?php $today = date ( 'Ymd' ); $pastEvents = new WP_Query( array ( 'paged' => get_query_var( 'paged' , 1), // 'posts_per_page' => 1, 'post_type' => 'event' , 'meta_key' => 'event_date' , 'orderby' => 'meta_value_num' , 'order' => 'DESC' , 'meta_query' => array ( array ( 'key' => 'event_date' , 'compare' => '<' , 'value' => $today , 'type' => 'nuermic' ) ) )); while ( $pastEvents ->have_posts()) { $pastEvents ->the_post(); ?> <div class = "event-summary" > <a class = "event-summary__date t-center" href= "#" > <span class = "event-summary__month" > <?php $date = get_field( "event_date" ); $eventDate = new DateTime( $date ); echo $eventDate ->format( "M" ); ?> </span> <span class = "event-summary__day" > <?php echo $eventDate ->format( "d" ); ?> </span> </a> <div class = "event-summary__content" > <h5 class = "event-summary__title headline headline--tiny" > <a href= "#" ><?php the_title(); ?></a></h5> <p> See what is going on in our world. <a href= "#" class = "nu gray" >Learn more</a></p> </div> </div> <?php }?> |
Posts Query Adjustment Before Loading into Wordpress from Database
It will be interesting to see the difference by removing is_admin() below:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function university_adjust_queries( $query ) { if (!is_admin() and is_post_type_archive( "program" ) and $query ->is_main_query()) { $query ->set( 'orderby' , 'title' ); $query ->set( 'order' , 'ASC' ); $query ->set( 'posts_per_page' , -1); } if (!is_admin() and is_post_type_archive( "event" ) and $query ->is_main_query()) { // $query->set("posts_per_page", 1); $today = date ( 'Ymd' ); $query ->set( "meta_key" , 'event_date' ); $query ->set( "orderby" , 'meta_value_num' ); $query ->set( "order" , 'ASC' ); $query ->set( "meta_query" , array ( array ( 'key' => 'event_date' , 'compare' => '>=' , 'value' => $today , 'type' => 'nuermic' ) )); } } add_action( "pre_get_posts" , "university_adjust_queries" ); |
The Default Post and its Archive
By default wordpress has "posts" and "blog" (which plays the role asarchive-post
). The default posts are themed by single.php
while its archive is themed by index.php
. When we try to create customized post (and accordingly its archive), if single-{slug}
and archieve-{slug}
are not found, wordpress will seek for single.php
and index.php
as a default theming file.
Add Support to Uploading Thumbnails
Run the following as an action hooking to"after_setup_theme"
1 | add_theme_support( 'post-thumbnails' ); |
1 2 3 4 5 | register_post_type( "professor" , array ( 'supports' => array ( 'title' , 'editor' , 'thumbnail' ), 'public' => true, ... )); |
No comments:
Post a Comment