Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
WordPress bakom ytan
Christian Ohlsson 1
Wordpress popularitet
§ Intresset för WordPress bara ökar § http://en.wordpress.com/stats/ § Statistik (augusti 2011)
§ 15% av Top 1 Million sajter kör WP § 22% av nya webbplatser kör WP
§ 200 miljoner nerladdade plugins
Christian Ohlsson 2
WordPress och dess community
§ WordCamp är ett återkommande event där utvecklare och användare träffas för att diskutera design och implementation § Hitta nästa event på wordcamp.org
§ WordPress Meetup § Mindre organiserat, men fortfarande bra § wordpress.meetup.com
§ WordPress Codex § Massivt med material om hur WordPress fungerar § Och exempelkod!
Christian Ohlsson 3
WordPress och GPL
§ WordPress licentieras enligt GPL. Vanliga missuppfattningar är: § ”Free Software kan inte användas kommersiellt” § ”Om du gör ändringar i koden måste du publicera
dessa ändringar”
§ ”GPL kommer att ’infektera’ innehållet på din sajt”
Christian Ohlsson 4
Sätta igång med WordPress
§ Före man seriöst börjar fundera över färg, form och funktionalitet kan det vara bra att veta var och hur din sajt skall existera
§ Det är många val att göra, baserat på § Kostnad
§ Gratis hostning kan begränsa dig
§ Kontroll § Vilka verktyg finns att hantera databaser och filer?
§ Komplexitet § Många webbhotell kapslar in installation och konfiguration
till ett paket. Vidare hantering kan kräva bra support
Christian Ohlsson 5
Olika typer av hostning
§ Enklaste valet är wordpress.com § Automattic kör denna och använder WordPress
MultiUser (Tidigare WordPress MU)
§ Välj ett webbhotell som har färdigt stöd för WordPress § Många alternativ finns
§ Installera WordPress på egen server § Kräver en webbserver med PHP-stöd (mod_php) § URL rewrites (mod_rewrite) § MySQL
Christian Ohlsson 6
En översikt på koden
Christian Ohlsson 7
Filerna i WordPress
Christian Ohlsson 8
Wp-config.php
§ Den viktigaste filen i en WordPress-installation § Innehåller databasinställningar och lite annat § Efter nerladdning: wp-config-sample.php
§ Första steget blir att byta namn på denna fil
§ Sparas normalt i root-katalogen för din WP-installation. Kan gärna flyttas upp ett steg:
Christian Ohlsson 9
/public_html/my_website/wp-config.php
/public_html/wp-config.php
Avancerade inställningar i wp-config
Christian Ohlsson 10
define( 'WP_SITEURL', 'http://example.com/wordpress' ); define( 'WP_HOME', 'http://example.com/wordpress' ); define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/…/…/wp-content' ); define( 'WP_CONTENT_URL', 'http://domain.com/wordpress/blog/wp-content'); define( 'WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/…/…/plugins' ); define( 'WP_PLUGIN_URL', 'http://example/blog/wp-content/plugins'); define( 'WP_POST_REVISIONS', false ); define( 'WP_POST_REVISIONS', 5 ); define( 'AUTOSAVE_INTERVAL', 300 ); define( 'FORCE_SSL_LOGIN', true );
Många andra finns!
.htaccess
§ Används framförallt för att skapa snygga permalänkar i WP § Som standard skapas fula länkar
§ Till ex: minsajt.com/?p=542
§ Med permalänkar skapas länkar baserat på taggar, kategorier, titel eller vad du önskar!
Christian Ohlsson 11
Permalänkar
Christian Ohlsson 12
Fördelar med att använda permalänkar
§ Search Engine Optimization § Att ha nyckelord i URL ger sidan en rejäl boost
§ Framåt-kompabilitet § Om du vill byta CMS till Joomla eller Drupal kan
länkstrukturen hållas intakt
§ Användbarhet § Att ha relevanta och beskrivande URL gör att det går
snabbt att kolla vad länken kan tänkas innehålla
§ Delning § I denna era av Social Networking måste helt enkelt URL
vara förklarande!
Christian Ohlsson 13
Exempel på .htaccess
Christian Ohlsson 14
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wordpress/index.php [L]
</IfModule>
http://localhost/wordpress/2014/03/hello-world/
wp-content
<?php
// Silence is golden.
Christian Ohlsson 15
En guidad tur i kärnan
Christian Ohlsson 16
Vad finns i kärnan?
§ Kärnan i WP är en samling filer som fanns med när du laddade hem WP
§ Ändras bara när du uppdaterar WP § Innehåller inte
§ Plugins § Teman § Databas-inställningar § .htaccess § Mediafiler
§ Allt som läggs till efter installationen befinner sig utanför kärnan
Christian Ohlsson 17
Vad finns i kärnan?
§ Filerna är framförallt PHP-filer § Men även CSS, JS, XML, HTML och bilder
§ Dessa filer kontrollerar hur WP arbetar, laddar in teman & pluggar, laddar inställningar och mycket mer § Poster, Pages, Custom content § Metadata § Teman § Actions, filtreras, Plugins § Users § Feeds, Formatering, Kommentarer
Christian Ohlsson 18
Wp-login.php
Christian Ohlsson 19
/** * WordPress User Page * * Handles authentication, registering, resetting passwords, * forgot password, and other user handling. * * @package WordPress */
Funktionsheader
Christian Ohlsson 20
/** * Output the login page header. * * @param string $title Optional. WordPress Log In Page title to display in <title/> element. * @param string $message Optional. Message to display in header. Default empty. * @param string $wp_error Optional. The error to pass. Default empty. * @param WP_Error $wp_error Optional. WordPress Error Object */ function login_header( $title = 'Log In', $message = '', $wp_error = '' ) { … }
Exempel: is_super_admin()
Christian Ohlsson 21
/** * Determine if user is a site admin. * * @since 3.0.0 * * @param int $user_id (Optional) The ID of a user. Defaults to the current user. * @return bool True if the user is a site admin. */ function is_super_admin( $user_id = false ) { if ( ! $user_id || $user_id == get_current_user_id() ) $user = wp_get_current_user(); else $user = get_userdata( $user_id ); if ( ! $user || ! $user->exists() ) return false; // Resten bort-kommenterat ☺ }
Viktiga filer
Christian Ohlsson 22
Functions.php
§ Innehåller huvudparten av de mest använda WordPress-funktionerna § Dess API
§ Används för att interagera med WP på ett standardiserat sätt
§ Används av § Plugins § Teman
§ WP självt
Christian Ohlsson 23
Option.php
§ Hanterar inhämtning av options § add_option, update_option, get_option § set_transient, get_transient, delete_transient § add_site_option, update_site_option, get_site_option
Christian Ohlsson 24
Formatting.php § Hanterar formatteringsregler § esc_attr
§ Snyggar till HTML-attribut § esc_html
§ Snyggar till HTML § esc_url
§ Snyggar till en URL § sanitize_text_field
§ Snyggar till strängar från input ellerdatabasen § is_email
§ Verifierar e-postadresser § capital_P_dangit
§ Ser till att P i WordPress alltid skrivs med stort ”P”
Christian Ohlsson 25
Pluggable.php § Ser till att man kan ”override’a” vissa kärnfunktioner i
WP. Laddas om de inte blivit definierade i något plugin § wp_mail
§ Skickar mail från WordPress. § get_userdata
§ Returnera all userdata från en viss userID. § get_currentuserinfo
§ Returnera userdata från den nu inloggade användaren § wp_set_password
§ Sätter ett nytt lösenord § wp_logout § wp_redirect
§ Redirects till en annan sida
Christian Ohlsson 26
Plugin.php
§ add_filtrera § Hook som låter dig ändra content före visning/sparning
§ add_action § Hooks som WP kör vid ett visst tillfälle
§ register_activation_hook § Hook som kallas när plugin aktiveras
§ register_deactivation_hook § Hook som kallas när plugin deaktiveras
§ plugin_dir_url § Filsystemets path till ett plugin
§ plugin_dir_path § URL till ett plugin
Christian Ohlsson 27
User.php
§ get_users § Ger en lista på användare från kriterier
§ add_user_meta, get_user_meta, delete_user_meta § Skapa, hämta och ta bort metadata om användare
§ username_exists § email_exists § wp_insert_user och wp_update_user
§ Skapa och uppdatera konton
Christian Ohlsson 28
Post.php
§ wp_insert_post § Skapar en ny post
§ get_posts § Hämtar poster enligt ett kriterie
§ add_post_meta § Skapar metadata till en post.
§ get_post_meta § Hämtar metadata till en post
§ set_post_thumbnail § Sätter en featured bild på en post
§ register_post_type § Registerar custom post type i WordPress
Christian Ohlsson 29
Deprecated Functions
§ När en ny version av WordPress skapas kan vissa funktioner markeras som ”deprecated”
§ Innebär inte att den tagits bort från WP § Men det kan hända ”snart” så hitta alternativ
§ Alternativet brukar vara tydligt markerat
Christian Ohlsson 30
/** * Retrieve current theme name. * * @since 1.5.0 * @deprecated 3.4.0 * @deprecated Use (string) wp_get_theme() * @see wp_get_theme() * * @return string */
WordPress Codex
Christian Ohlsson 31
Vad är den där Codex för nåt?
§ WordPress Codex är en wiki för dokumentation om WP § Finns på flera språk
§ ”En encyklopedi över kunskap om WordPress”
§ http://codex.wordpress.org/ § Använder Google Custom Search
§ http://codex.wordpress.org/Special:Search § Inte så känd men erbjuder ”vanlig” sökning
§ Hjälp gärna till!
Christian Ohlsson 32
Loopen
Christian Ohlsson 33
Loopen i WordPress
§ Loopen i Wordpress är den kod som används för att visa innehåll på en webbplats driven av Wordpress
§ Den används genom att "loopa" igenom och visa ett antal inlägg, exerpts och annat
§ När webbplatser använder Custom Posts och Fields används loopen också för att visa data
§ Loopen är ganska mångsidig och används för att visa olika typer av innehåll på sidan
§ Den kod som används för att skapa Loopen är i sin kärna ganska enkel, men det kan anpassas i mycket stor utsträckning
Christian Ohlsson 34
Den grundläggande tanken bakom Loopen § Loopen börjar med att se om den aktuella sidan är tänkt
att visa en lista av flera inlägg eller en enda post eller sida . § Om sidan är tänkt att lista blogginlägg så kommer den att lista
titel och innehåll för varje inlägg § Om sidan är en Single page kommer bara visa innehållet på den
sidan . § Om inga inlägg finns eller att någon kommer åt en sida
som inte existerar, kan man visa ett eget meddelande § På grund av WordPress mallar (templates), kan loopen
anpassas för nästan varje sida § Man kan också använda flera loopar på en sida för att
visa olika typer av innehåll
Christian Ohlsson 35
Loooopen
Christian Ohlsson 36
HEADER
SIDEBAR
FOOTER
En enkel Loop
Christian Ohlsson 37
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2><?php the_title() ;?></h2> <?php the_post_thumbnail(); ?> <?php the_excerpt(); ?>
<?php endwhile; else: ?>
<p>Sorry, no posts to list</p> <?php endif; ?>
En annan loop
Christian Ohlsson 38
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h1><?php the_title() ;?></h1> <?php the_content(); ?>
<?php endwhile; else: ?>
<p>Sorry, this page does not exist</p> <?php endif; ?>
Vad kan Loopen visa? § next_post_link § previous_post_link § the_category § the_author § the_content § the_excerpt § the_ID § the_meta § the_shortlink § the_tags § the_title § the_time
Christian Ohlsson 39
§ is_home() § is_admin() § is_single() § is_page() § is_page_template() § is_category() § is_tag() § is_author() § is_search() § is_404() § has_excerpt()
Avancerad Loop
Christian Ohlsson 40
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php if(is_category('featured')): ?> class="featured-post"<?php endif; ?>>
<h1><?php the_title() ;?></h1> Published on <?php the_time('M j, Y'); ?> by <?php the_category(', '); ?> in <?php the_category(', '); ?> <?php the_content(); ?> <?php comment_form(); ?> <div class="prev-next-links"> <ul><li><?php next_post_link(); ?></li> <li><?php previous_post_link(); ?></li></ul></div>
</article> <?php endwhile; else: ?>
<p>Sorry, this post does not exist</p> <?php endif; ?>
Multipla loopar
§ Ibland vill man ha flera loopar § Kanske för att visa inlägget och sedan visa alla
inlägg relaterade till detta inlägg
§ Viktigt är att använda rewind_posts() före man loopar en andra (tredje, fjärde eller femte) gång
Christian Ohlsson 41
Exempel på multipla Loopar
Christian Ohlsson 42
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <h1><?php the_title() ;?></h1> <?php the_excerpt(); ?>
<?php endwhile; else: ?> <p>Sorry, there are no posts to display</p>
<?php endif; ?> <?php rewind_posts(); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h1><?php the_title() ;?></h1> <?php the_excerpt(); ?>
<?php endwhile; else: ?> <p>Sorry, there are no posts to display</p>
<?php endif; ?>
WP_Query()
§ Funktionen som användes i förra avsnittet för att ställa in parametrar är en del av en mycket kraftfull WordPress funktion kallad WP_Query
§ Denna funktion kan användas för att göra specifika WordPress-loopar som bygger på ett stort antal alternativ
§ WP_Query funktionen placeras före loopen § En trevlig sak med denna funktion är att allt du
behöver göra är att placera den före loopen och du behöver inte ändra något om loopen
Christian Ohlsson 43
Vanliga val till WP_Query()
§ author § author_name § cat § category_name § tag § p § name § pagename § page_id
Christian Ohlsson 44
§ post_parent § post_type § posts_per_page § offset § order § orderby § year § monthnum § day
Exempel på WP_Query()
Christian Ohlsson 45
<?php $args = array( 'pagename' => 'about-us' ); $the_query = new WP_Query( $args );
?> <?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<h1><?php the_title() ;?></h1> <?php the_excerpt(); ?>
<?php endwhile; else: ?> <p>Sorry, there are no posts to display</p>
<?php endif; ?>
Avancerat exempel
Christian Ohlsson 46
<?php $args = array( 'author_name' => ’crille', 'orderby' => 'title', 'post_type' => 'workshops' 'year' => 2012 ); $the_query = new WP_Query( $args );
?> <?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<h1><?php the_title() ;?></h1> <?php the_excerpt(); ?>
<?php endwhile; else: ?> <p>Sorry, there are no posts to display</p>
<?php endif; ?>
Datahantering
Christian Ohlsson 47
Databaser på webben
§ Nästan varje webbplats på Internet idag är kopplad till en databas som lagrar information om webbplatsen
§ WordPress är inte annorlunda och drivs av en MySQL-databas
§ Denna databas lagrar all data för din webbplats, inklusive ditt innehåll, användare, länkar, metadata, inställningar, med mera
§ Den här delen handlar om hur data lagras, vilken data som lagras och hur man arbetar med denna data i WordPress
Christian Ohlsson 48
WordPress består av 11 tabeller
Christian Ohlsson 49
Tabellerna i WordPress
1. wp_commentmeta 2. wp_comments 3. wp_links 4. wp_options 5. wp_postmeta 6. wp_posts 7. wp_terms 8. wp_term_relationships 9. wp_term_taxonomy 10. wp_users 11. wp_usermeta
Christian Ohlsson 50
Databasklassen $wpdb
§ WordPress innehåller en klass för att man ska kunna hantera databasen manuellt § Bra för pluginskapare eller om man vill ändra på
många poster
§ Använd denna klass! § Pillra inte phpMyAdmin om du inte måste J
§ Mest viktiga funktionen i denna klass är prepare()
§ Ser till att allt går säkert till
Christian Ohlsson 51
Exempel på förfrågan
Christian Ohlsson 52
<?php $field_key = "address"; $field_value = "123 Elm St"; $wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->my_custom_table ( id, field_key, field_value ) VALUES ( %d, %s, %s )”, 1, $field_key, $field_value ) ); ?>
Manipulera databasen
§ Ibland är det oundvikligt att hantera sin WordPress-databas med ett verktyg
§ Lämpligast är phpMyAdmin § Men man kan även köra CLI såklart
§ För att ställa SQL-frågor: Tryck på SQL-tabben
Christian Ohlsson 53
Tabellerna i WP
Christian Ohlsson 54
Ställa frågor i phpMyAdmin
Christian Ohlsson 55
Exempel på frågor
Christian Ohlsson 56
SELECT * FROM wp_posts WHERE post_type = ‘revision’
Hämtar inlägg med attachement
Christian Ohlsson 57
SELECT guid, wp_posts.* FROM wp_posts WHERE post_type = 'attachment’
Returnerar två option_name
Christian Ohlsson 58
SELECT * FROM wp_options WHERE option_name IN ( 'siteurl','home' )
Sätter nytt domämnamn på sajten
Christian Ohlsson 59
UPDATE wp_options SET option_value = 'http://yournewdomain.com' WHERE option_name IN ('siteurl','home')
Listar aktiva plugins
Christian Ohlsson 60
SELECT * FROM wp_options WHERE option_name = 'active_plugins’
Byter lösenord på admin
Christian Ohlsson 61
UPDATE wp_users SET user_pass = MD5('Hall0w33n') WHERE user_login ='admin' LIMIT 1;
Listar användares epost-adresser
Christian Ohlsson 62
SELECT DISTINCT user_email FROM wp_users
Custom Post Type
Christian Ohlsson 63
Fördefinierade post-typer i WP
§ Post § Inlägg eller artiklar sorterade på tid
§ Page § Hierarkiska statiska sidor
§ Attachment § Media uppladdat till sajten som bilder och filer
§ Revision § En version av en post sparad som backup
§ Nav Menus § Meny-saker tillagda med WP menyhanterare
Christian Ohlsson 64
Vad är en Custom Post Type
§ En egenhändigt definierat stycke med information § Med Custom Post måste du inte ha de inbyggda
typerna, utan kan skapa dina egna § Produkter
§ Events
§ Filmer § Forum
§ Bilar
§ Hus § Biljettsystem
Christian Ohlsson 65
Du väljer!
Varför Custom Post Type?
§ Du kan då skapa innehåll anpassad precis efter vad du hade tänkt § Kan göras med vanliga poster också, men nu blir det
precisions-tillverkat!
Christian Ohlsson 66
Exempel
Christian Ohlsson 67
<?php add_action( 'init', ’sajt_register_custom_post_filmer' ); function sajt_register_custom_post_filmer () { register_post_type( ’filmer', array( 'labels' => array( 'name' => ’Filmer' ), 'public' => true, ) ); } ?>
Fler argument: labels
§ name: Plural form på namnet § singular_name: Namnet i singular § add_new: Text att skriva ut för att skapa nytt § add_new_item: Text att skriva ut på headern § edit_item: Text att skriva ut för editering § new_item: Text att skriva ut I favorit-menyn § view_item: Visas bredvid permalänken § search_items: Knapp-text på sökrutan § not_found: Text att visa när inga poster hittats § not_found_in_trash: Samma, fast I papperskorgen § menu_name – Namn för menyn i dashboard
Christian Ohlsson 68
Riktigt exempel
Christian Ohlsson 69
add_action( 'init', 'sajt_register_custom_post_filmer' ); function sajt_register_custom_post_filmer () { $labels = array( 'name' => ’Filmer', 'singular_name' => ’Film', 'add_new' => ’Lägg till Film', 'add_new_item' => ’ Lägg till Film', 'edit_item' => ’Editera Film', 'new_item' => ’Ny Film', 'view_item' => ’Se Film', 'search_items' => ’Sök Filmer', 'not_found' => ’Inga filmer funna', 'not_found_in_trash' => 'Inga filmer funna I papperskorgen', 'menu_name' => ’Filmer' ); $args = array( 'public' => true, 'labels' => $labels ); register_post_type( ’filmer', $args ); }
Visa upp Custom Posts
§ Man kan såklart använda den vanliga Loopen för detta, men man kan också få det lite mer anpassad § OBS! Ska Custom visas i ”index.php” måste man skriva
en fråga till $wpdb!
§ Skapa filen archive-{post-type}.php § Exempelvis: archive-filmer.php
§ Du har nu skapat en Template File!
Christian Ohlsson 70
Taxonomi
Christian Ohlsson 71
Tax-… Vaddå?
§ Taxonomi är ett sätt man kan använda i WP för att gruppera liknande saker tillsammans
§ Man kan till exempel använda Kategorier för att gruppera Poster som hör ihop tillsammans § Genom att gruppera dessa tillsammans har du definierat
dess taxonomi § Taxonomi kan vara hieratiska
§ Kategorier & subkategorier § De inbyggda är:
§ Category § Tag § Link category
Christian Ohlsson 72
Icke-hieratisk Taxonomi
Christian Ohlsson 73
<?php $args= array(
'label' => ‘Betyg’ ); register_taxonomy( ‘betyg', ’filmer', $args); ?>
Fler argument: labels § name: Namnet på din taxonomy § singular_name: Singular-namnet § search_items: Texten på “search items” § popular_items: Texten på “popular items” § all_items: Texten på detta § parent_item: Namnet på föräldern (om hieratiskt) § parent_item_colon: Som parent_item, med med ett kolon § edit_item: Texten för Edit § update_item: Texten för Update § add_new_item: Texten för Lägg till ny § new_item_name: Namnet på Lägg till ny § separate_items_with_commas: Separera med komma? § add_or_remove_items: Texten på detta § choose_from_most_used: Välja från senaste? § menu_name: Namnet I menyn
Christian Ohlsson 74
Riktigt exempel
Christian Ohlsson 75
$labels = array( 'name' => ’Betyg', 'singular_name' => 'Betyg’, 'search_items' => ’Sök Betyg', 'all_items' => ’Alla Betyg', 'parent_item' => ’Förälder-Betyg', 'parent_item_colon' => 'Förälder-Betyg:', 'edit_item' => ’Ändra Betyg', 'update_item' => ’Ändra Betyg', 'add_new_item' => ’Lägg till nytt Betyg', 'new_item_name' => ’Ny Betyg-genre', 'menu_name' => 'Betyg'
); $args = array(
'hierarchical' => false, 'labels' => $labels
); register_taxonomy( ’betyg', ’filmer', $args);
Custom Post Type UI
Christian Ohlsson 76
Lägg till Taxonomier
Christian Ohlsson 77
Hantera Custom Posts
Christian Ohlsson 78
Mer läsning § Relaterade artiklar I Codex
§ http://codex.wordpress.org/Post_Types § http://codex.wordpress.org/Function_Reference/register_post_type § http://codex.wordpress.org/Taxonomies
§ Artiklar om Custom Post Type § http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress § http://justintadlock.com/archives/2010/02/02/showing-custom-post-types-on-your-
home- blog-page § http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/ § http://wpengineer.com/impressions-of-custom-post-type/ § http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/
§ Artiklar om Custom Taxonomies § http://justintadlock.com/archives/2009/05/06/custom-taxonomies-in-wordpress-28 § http://justintadlock.com/archives/2009/06/04/using-custom-taxonomies-to-create-a-
movie- database § http://www.shibashake.com/wordpress-theme/wordpress-custom-taxonomy-input-
panels
Christian Ohlsson 79
Christian Ohlsson 80