WordPress PHP snippets

En rodet samling af små WordPress snippets.
En side som er rigtig god at finde små Wordpress snippets på er: http://wpsnipp.com/

Enkelt struktur i menu

En simpel HTML struktur i WordPress menuen er desværre ikke så enkelt. På nuværende tidspunkt er jeg kommet frem til nedestående Walker som indsættes i functions.php

<?php
// Menu
class Clean_Walker_Nav extends Walker_Nav_Menu {
    function
filter_builtin_classes( $var ) {
        return (
FALSE === strpos( $var, 'item' ) ) ? $var : '';
    }
 
    function
start_lvl( &$output, $depth = 0, $args = array() ) {
       
$indent = str_repeat("\t", $depth);
               
$output .= "\n".$indent."<ul>\n";
    }
    function
start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
       
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
 
       
$class_names = $value = '';
 
       
$unfiltered_classes = empty( $item->classes ) ? array() : (array) $item->classes;
       
$classes = array_filter( $unfiltered_classes, array( $this, 'filter_builtin_classes' ) );
 
        if (
preg_grep("/^current/", $unfiltered_classes) ) {
           
$classes[] = 'active';
        }
 
       
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
       
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
 
       
$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
       
$id = $id ? ' id="' . esc_attr( $id ) . '"' : '';
 
       
$output .= $indent . '<li' . $value . $class_names .'>';
 
       
$atts = array();
       
$atts['title']  = ! empty( $item->attr_title ) ? $item->attr_title : '';
       
$atts['target'] = ! empty( $item->target )     ? $item->target     : '';
       
$atts['rel']    = ! empty( $item->xfn )        ? $item->xfn        : '';
       
$atts['href']   = ! empty( $item->url )        ? $item->url        : '';
 
       
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args );
 
       
$attributes = '';
        foreach (
$atts as $attr => $value ) {
            if ( ! empty(
$value ) ) {
               
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
               
$attributes .= ' ' . $attr . '="' . $value . '"';
            }
        }
 
       
$item_output = $args->before;
       
$item_output .= '<a'. $attributes .'>';
       
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
       
$item_output .= '</a>';
       
$item_output .= $args->after;
 
       
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
}
?>

I filen menu.php printer jeg menuen ved nedestående kode:

<nav>
<?php
    $defaults
= array(
       
'container' =>  '',
        
'items_wrap'  => '<ul class="main">'."\n".'%3$s</ul>',
        
'depth' => 1,
       
'walker' => new Clean_Walker_Nav
   
);
   
wp_nav_menu( $defaults );
?>


</nav>

En anden mulighed er at benytte add_filter, til at rydde op i html på menuen.

add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
  return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
}

Dato

<?php the_date('d. m Y', '<p class="dato">', '</p>'); ?>

<?php the_time('d. m Y', '<p class="dato">', '</p>'); ?>

NB!
I et loop med flere posts med samme dato. vil the_date kun vise datoen ved den første post.
Her kan man så benytte the_time for at være sikker på, at der vises en dato ved hver enkel post.

På forsiden eller IKKE på forsiden

<?php if( is_home() || is_front_page() ) : ?>
YOUR CODE HERE
<?php endif; ?>

Vises ikke på forsiden
<?php if( !is_home() || !is_front_page() ) : ?>
YOUR CODE HERE
<?php endif; ?>

... eller her samlet i en ...

<?php if (is_home() || is_front_page()) {?>
...
<?php } else { ?>
...
<?php } ?>

Automatisk opdatering af Wordpress og plugin

Indsæt følgende i filen wp-config.php

define( 'WP_AUTO_UPDATE_CORE', true );

Nu vil alle nye opdateringer til Wordpress core filer opdateres automatisk!
Hvis man ikke ønsker dev versioner kan man i sit Wordpress theme functions.php indsætte følgende:

add_filter( 'allow_dev_auto_core_updates', '__return_false' );

Automatisk opdatering af Wordpress plugin kan ligeledes udføres ved at indsætte nedenstående i functions.php

add_filter( 'auto_update_plugin', '__return_true' );

Her det samme for Themes

add_filter( 'auto_update_theme', '__return_true' );

URL til theme

Indsæt link til theme mappen. Hvis du eksempelvis skal indsætte et billede direkte i en theme fil.

<?php echo get_template_directory_uri(); ?>

Opdel theme i egne filer

Når tempaltet splittes op i custom filer kan de printes med

<?php get_template_part( 'filnavn' ); ?>

Fjern mulighed for at ændre i theme filer

Fjern mulighed for at ændre i theme filer fra WP kontrolpanel
Fjerne muligheden for at ændre i WP theme fra WordPress kontrolpanel. En mulighed for at gøre det lidt mere besværligt for ubudne gæster at ødelægge hjemmesiden.
Indsættes i wp-konfig.php

define('DISALLOW_FILE_EDIT', true );

Uddrag - the_excerpt

Vis Uddrag feltet

<?php the_excerpt(); ?>

Ovenstående printes i <p> ... </p>
Vil du have et helt rent output, kan det gøres med:

<?php echo get_the_excerpt(); ?>

Pagination ala Thesis

Her er benytte en Pagination fra Thesis

function wpbeginner_numeric_posts_nav() {

if( is_singular() )
return;

global $wp_query;

/** Stop execution if there's only 1 page */
if( $wp_query->max_num_pages <= 1 )
return;

$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
$max   = intval( $wp_query->max_num_pages );

/** Add current page to the array */
if ( $paged >= 1 )
$links[] = $paged;

/** Add the pages around the current page to the array */
if ( $paged >= 3 ) {
$links[] = $paged - 1;
$links[] = $paged - 2;
}

if ( ( $paged + 2 ) <= $max ) {
$links[] = $paged + 2;
$links[] = $paged + 1;
}

echo '<ul class="pager__list">' . "\n";

/** Previous Post Link */
if ( get_previous_posts_link() )
printf( '<li>%s</li>' . "\n", get_previous_posts_link() );

/** Link to first page, plus ellipses if necessary */
if ( ! in_array( 1, $links ) ) {
$class = 1 == $paged ? ' class="active"' : '';

printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( 1 ) ), '1' );

if ( ! in_array( 2, $links ) )
echo '<li>…</li>';
}

/** Link to current page, plus 2 pages in either direction if necessary */
sort( $links );
foreach ( (array) $links as $link ) {
$class = $paged == $link ? ' class="active"' : '';
printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $link ) ), $link );
}

/** Link to last page, plus ellipses if necessary */
if ( ! in_array( $max, $links ) ) {
if ( ! in_array( $max - 1, $links ) )
echo '<li>…</li>' . "\n";

$class = $paged == $max ? ' class="active"' : '';
printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $max ) ), $max );
}

/** Next Post Link */
if ( get_next_posts_link() )
printf( '<li class="last">%s</li>' . "\n", get_next_posts_link() );

echo '</ul>' . "\n";

}

Indsættes i de ønskede filer ved:

<?php wpbeginner_numeric_posts_nav(); ?>

Husk at indsætte 'paged' => $paged i Loop

eks.

<?php $loop = new WP_Query( array( 'post_type' => 'post', 'paged' => $paged ) ); ?>
<ul class="post__list">
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<li>
<a href="<?php the_permalink() ?>">
<?php echo get_the_post_thumbnail($page->ID); ?>
<h2><?php the_title() ?></h2>
<?php the_excerpt() ?>
<p class="post__info">
<b>Dato</b>: <?php the_date('d. m Y'); ?><br />
<b>kommentarer</b>: <?php comments_number( '0', '1', '%' ); ?></p>
</a>
</li>
<?php endwhile; ?>
</ul>
<?php wpbeginner_numeric_posts_nav(); ?>

Lidt SASS

/* Pager list */
$pager-size: 31px;

ul.pager__list {
margin: 10px 0;
padding: 0;
li{
margin: 0 2px 0 0;
padding: 0;
list-style-type: none;
float: left;
&.active, &:hover {
a {
background-color: #e43b54;
color: #fff;
}
}
}
a {
text-decoration: none;
padding: 0 5px;
height: $pager-size;
min-width: $pager-size;
line-height: $pager-size;
text-align: center;
display: block;
border: 1px solid #F0EADD;
border-radius: 5px;
}
}

Læs mere her: http://codex.wordpress.org/Pagination

Wordpress Child Theme

Opret et Child Theme i Wordpress, en simpel og sikker metode til små ændringer til et eksisterende WordPress Theme.

/*
Theme Name:     THEME NAVN
Theme URI:      http://www.THEME-HJEMMESIDE.dk (hvis en sådan findes ... ellers link til din side)
Description:   BESKRIVELSE
Author:         (dig) FORFATTER
Author URI:     http://www.DINSIDE.dk
Template:       twentythirteen (wordpress theme der er udgangspunktet!)
Version:        0.1.0
*/

@import url("../twentythirteen/style.css");

NB!
Ofte skal du lige indsætte menuen i den rigtigeplacering igen. Har ofte været ud for, at den forsvinder, når man aktivere sit child theme.

Link til forsiden

Typisk vil du indsætte sidens logo i et link til forsiden. URL'en til forsiden printer du i en theme fil med:

<?php echo home_url(); ?>

the_post_thumbnail

<?php the_post_thumbnail(); ?>

Tilføj html elementer rundt om billedet.

Først tjekkes om billedet findes, derefter printes det med <div class="min__class"> omkring.

<?php if ( has_post_thumbnail() ) { ?>
<div class="min__class">
<?php the_post_thumbnail(); ?>
</div>
<?php } ?>

Print ALT som tekst

Der tjekkes først for om der findes en ALT tekst. Hvis ja, printes den i <span class="small">...</span>

<?php
$thumb_id
= get_post_thumbnail_id(get_the_ID());
$alt = get_post_meta($thumb_id, '_wp_attachment_image_alt', true);
if(isset(
$alt) && $alt != null) {
echo
'<span class="small">' . $alt . '</span>' ;
}
?>

Fjern Plugin CSS fil

Ønsker du at fjerne CSS filer fra et plugin, kan du gøre det med nedestående snippet.
Du skal finde kaldet til CSS filen i pluginfilen. Søg efter wp_enqueue_style.

Her har jeg fjernet CSS filen fra Cookie Notice - dFactory.
I filen cookie-notice.php søgte jeg efter wp_enqueue_style. Søgningen gav 3 resultater, de to første blev brugt til backend CSS. Den tredje med navnet "cookie-notice-front" er den jeg her har fjernet!

<?php
// Fjerner plugin CSS filer

add_action( 'wp_print_styles', 'fjern_plugin_css', 100 );

function
fjern_plugin_css() {
   
wp_deregister_style( 'cookie-notice-front' );
      
// list flere her!
}
?>

Typisk ønsker man kun at have én CSS fil til sin hjemmeside, for at optimere sidens load hastighed!

Fjern attribute på billeder

Fjern width & height på billeder
Vigtigt når man arbejder med responsive webdesign.

<?php
add_filter
( 'post_thumbnail_html', 'remove_width_attribute', 10 );
add_filter( 'wp_get_attachment_link', 'remove_width_attribute', 10 );
add_filter( 'the_content', 'remove_width_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_width_attribute', 10 );

function
remove_width_attribute( $html ) {
  
$html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
   return
$html;
}
?>

Fjerne elementer fra HEAD

<?php
// Fjerne elementer fra WordPress head
function clean_head() {
remove_action( 'wp_head', 'feed_links_extra', 3 );
 
remove_action( 'wp_head', 'feed_links', 2 );
 
remove_action( 'wp_head', 'rsd_link' );
 
remove_action( 'wp_head', 'wlwmanifest_link' );
 
remove_action( 'wp_head', 'index_rel_link' );
remove_action( 'wp_head', 'rest_output_link_wp_head');
remove_action( 'wp_head', 'wp_oembed_add_discovery_links')
 
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
 
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
 
remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 );
 
remove_action( 'wp_head', 'wp_generator' );
 
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
emove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );

}
add_action( 'after_setup_theme', 'clean_head' );
?>

HTML tags i kommentarfelt

Vælg hvilke HTML tags du ikke ønsker at benytte i kommentarfeltet.
Indsættes i functions.php

<?php
function THEMENAVN_customise_allowedhtmlTags() {

global
$allowedtags;

// remove unwanted tags

$unwanted = array(
'abbr',
'acronym',
'blockquote',
'cite',
'code',
'del',
'strike',
'i',
'b',
'q'
);
foreach (
$unwanted as $tag )
unset(
$allowedtags[$tag] );
}

add_action('init', 'THEMENAVN_customise_allowedhtmlTags');
?>

Fjern emojis

function disable_wp_emojicons() {

  // all actions related to emojis
  remove_action( 'admin_print_styles', 'print_emoji_styles' );
  remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
  remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
  remove_action( 'wp_print_styles', 'print_emoji_styles' );
  remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
  remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
  remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );

  // filter to remove TinyMCE emojis
  add_filter( 'tiny_mce_plugins', 'disable_emojicons_tinymce' );
}
add_action( 'init', 'disable_wp_emojicons' );

function disable_emojicons_tinymce( $plugins ) {
  if ( is_array( $plugins ) ) {
    return array_diff( $plugins, array( 'wpemoji' ) );
  } else {
    return array();
  }
}

kilde: http://wordpress.stackexchange.com/questions/185577/disable-emojicons-in...

Forfatter

Print forfatters navn:

<?php the_author(); ?>

Print link til forfatters hjemmeside

<?php the_author_link(); ?>

Print link til forfatterens arkiv (viser alle indlæg .... ikke sider (page))

<?php the_author_posts_link(); ?>

the_title

<?php the_title('<h1>', '</h1>'); ?>

LOOP - antal og offset

Her vises de seneste 8 undtagen de 3 nyeste

<?php $loop = new WP_Query( array( 'posts_per_page' => 8, 'offset' => 3 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
.....
<?php endwhile; ?>

LOOP - bestemt kategori

Vis de 6 nyeste i kategori id = 2

<?php $loop = new WP_Query( array( 'posts_per_page' => 6, 'category__in' => array('2') ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
.....
<?php endwhile; ?>

Her et LOOP som IKKE viser indlæg fra kategori id = 2

<?php $loop = new WP_Query( array( 'category__not_in' => array( 2 ) ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
.....
<?php endwhile; ?>

LOOP - sticky post

Loop igennem alle sticky post

<?php $loop = new WP_Query( array( 'post__in'  => get_option('sticky_posts') ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
.....
<?php endwhile; ?>

Eller fjern sticky post fra loop

<?php $loop = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
.....
<?php endwhile; ?>

LOOP - post_type

<?php $loop = new WP_Query( array( 'post_type' => 'INDSÆTE TYPE HER') ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
...
<?php endwhile; ?>

Kan eksempvis være 'page' eller din egen custom post type

LOOP - sortering (orderby & sort_order)

<?php $loop = new WP_Query( array(  'orderby' => 'INDSÆT HVAD DU VIL SORTERE EFTER', 'sort_order' => 'RÆKKEFØLGE', ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
...
<?php endwhile; ?>

'orderby'

  • 'ID'
  • 'author' - Forfatter
  • 'title'
  • 'name'
  • 'type'
  • 'date'
  • 'modified'
  • 'parent'
  • 'rand' - Tilfældig rækkefølge
  • 'comment_count'
  • 'menu_order' - Følger menu rækkefølgen

'sort_by'

  • 'asc' - Stigende rækkefølge (1,2,3,4 ....)
  • 'desc' - Faldende rækkefølge (10,9,8,7 .....)

Forfatter navn på author.php

<?php
   
if(isset($_GET['author_name'])) :
       
$curauth = get_userdatabylogin($author_name);
    else :
       
$curauth = get_userdata(intval($author));
    endif;
   
?>

<h1><?php echo $curauth->nickname; ?></h1>

Menu i top & aside

http://christianvarga.com/how-to-get-submenu-items-from-a-wordpress-menu...

Benyt TAGs til at vis/skjule elementer

Hvis den findes vises den ikke

<?php if (!has_tag('4')) { ?>
..... så vises jeg ikke ...
<?php } ?>

Her med flere tags

<?php if (!has_tag(array('56', '58', '60')) )   { ?>
..... så vises jeg ikke ...
<?php } ?>

Hvis den findes vises den

<?php if (has_tag('4')) { ?>
..... her kommer jeg frem! ...
<?php } ?>

Kategorier

Kan selvfølgelig ligledes benyttes ved kategorier.
Kan eksempelvis benyttes for at vise/skjule html i et loop.

<?php if (has_category(array('47', '58', '60')) ) { ?>
...
<?php } ?>

Her er indholdet vist, hvis siden er i kategori 47,58 eller 60

ACF pro - File på siden

Her er tilføjet feltet et Repeater Field filer med 2 sub felter download og kliktekst.
Et loop der printer filerne i en liste kan se ud som nedenstående:

NB!
Se specielt $url = wp_get_attachment_url( $download ); hvor vi er nød til, at benytte wp_get_attachment_url( ... ) for at få URL'en til filen.

<?php if( have_rows('filer') ): ?>
<h4>Downloads</h4>
<ul class="download__filer">
<?php while( have_rows('filer') ): the_row();
   
$download = get_sub_field('download');
   
$url = wp_get_attachment_url( $download );
   
$klik = get_sub_field('kliktekst');
?>

<li><a href="<?php echo $url; ?>" target="_blank"><?php echo $klik; ?></a></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>

AFC pro - Billeder (galleri) på siden

Her er oprette et Gallery Field med navnet image_aside ... så kan du evt. sætte dem i aside ;-)
Et mindre billede linker til det originale billede. Her benyttes add_image_size i functions.php til at angive en billedstørrelsen (formatet) aside-thumb

NB!
Jeg har sat linket til at åbne i Lightbox - derfor data-lightbox="image-gallery"

<?php
$images
= get_field('images_aside');
if(
$images ): ?>

<section>
<h4>Images</h4>
<ul class="aside__pic">
<?php foreach( $images as $image ): ?>
<li><a href="<?php echo $image['url']; ?>" data-lightbox="image-gallery"><img src="<?php echo $image['sizes']['aside-thumb']; ?>" alt="<?php echo $image['alt']; ?>" /></a></li>
<?php endforeach; ?>
</ul>
</section>
<?php endif; ?>

AFC pro - accordion

<?php if( have_rows('accordion') ): ?>
<div class="accordion">
<?php while( have_rows('accordion') ): the_row();
$overskrift = get_sub_field('acc_overskrift');
$body = get_sub_field('acc_body');
?>

<h3><?php echo $overskrift; ?></h3>
<div>
<?php echo $body; ?>
</div>
<?php endwhile; ?>
</div>
<?php endif; ?>

Contact Form 7 - required *

jQuery snippet der tilføjer required *

$(".wpcf7-validates-as-required").parent().prepend("<span class='required'>*</span>");

Opret Category i functions.php

Det kan ikke altid betale sig at oprette nye Custom Post Type. Ofte kan inddeling i kategorier være mere enkelt og nemmer at vedligeholde.
I sådanne tilfælde er det oplagt, at oprette kategorierne direkte i WordPress themet. Hvis du looper igennem kategorier i dit theme, giver det god mening, at de også er prædefineret i samme!

function THEME-NAVN_insert_category() {
wp_insert_term(
'Case',
'category',
array(
  'description' => 'Opret cases med den kategori',
  'slug' => 'case'
)
);
wp_insert_term(
'News',
'category',
array(
  'description' => 'Opret nyheder med den kategori',
  'slug' => 'news'
)
);
}
add_action( 'after_setup_theme', 'THEME-NAVN_insert_category' );

category.php

Vis kategoriens navn og beskrivelse.

<h1><?php single_cat_title(''); ?></h1>
<?php echo category_description( $category_id ); ?>

Shortcode

Indsætte i functions.php filen i dit theme eller i plugin fil ,for at give mulighed for at skrive shortcodes direkte i en tekst widget.

add_filter('widget_text', 'do_shortcode');

Skriv shortcode direkte i theme filerne med:

<?php echo do_shortcode('[SHORTCODE]');?>

Gravatar (avatar)

Udskriv en bestemt gravatar (her min egen og med en størrelse på 50 x 50)

<?php echo get_avatar( 'morten@hjemmesider.dk', '50' ); ?>

Ny Post Type

Opret ny Post Type i Wordpress. Kan gøres direkte i temaets functions.php fil. Mere korrekt er nok at lave et lille plugin med samme funktion. På den måde kan man skifte tema, uden af den nye post type forsvinder.

Her er oprettet en post type til kontaktpersoner.

<?php
/* Nye post typer */
function create_posttype() {

   

register_post_type( 'person',
   
// CPT Options
       
array(
           
'labels' => array(
               
'name' => __( 'Personer' ),
               
'singular_name' => __( 'Person' )
            ),
           
'public' => true,
           
'taxonomies' => array('category'),
           
'supports' => array( 'title', 'editor', 'thumbnail'),
           
'rewrite' => array('slug' => 'contact-person'),
        )
    );

}

// Hooking up our function to theme setup
add_action( 'init', 'create_posttype' );
?>

Tjek om der findes content

<?php
$content
= get_the_content();
if(!empty(
$content)) { ?>

<div class="content">
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
</div>
<?php } ?>

Facebook & Twitter

Er du ude efter en simpel løsning på sociale delinger på Facebook og Twitter, som samtidig sikre en hurtig loadtid på din hjemmeside. Løsningen benytter ikke plugin og ekstra load tid til javascript.

<?php
<a href="http://www.facebook.com/sharer.php?u=<?php the_permalink();?>
&t=<?php the_title(); ?>" rel="nofollow" target="blank">Del på Facebook</a>
<a href="https://twitter.com/intent/tweet?original_referer=&text=<?php the_title(); ?>&url=<?php the_permalink();?>" rel="nofollow" target="blank">Tweet</a>
?>

PHP - hvis indhold

Man har ofte brug for at printe html elementer rundt om de forskellige elementer i WordPress.
For at undgå at tom html printes i kildekoden, når elementet ikke benyttes skal der tjekkes med PHP IF om det findes.

Tags - the_tags()

<?php $post_tags = wp_get_post_tags($post->ID); if(!empty($post_tags)) { ?>
<p class="tags"><?php the_tags() ?></p>
<?php } ?>

Post - er det en post, altså ikke en page etc.
Her tjekkes også for, om det er en custom post type med navnet news!

<?php if (is_singular(array( 'news', 'post' ))) { ?>
....
<?php } ?>

Tjek for page template

<?php if ( is_page_template( 'page-aside-right.php' ) ){ ?>
...
<?php } ?>

Tjek om ACF er aktiveret

<?php
if( class_exists('acf') ) {
.....
}
?>

Hjælp - Fejlfinding

Printer felter

<?php printf( '<pre>%s</pre>', var_export( get_post_custom( get_the_ID() ), true ) ); ?>

Tjek om sidebar / widget benyttes

<?php if ( is_active_sidebar( 'Min_Sidebar' ) ) { ?>

<?php dynamic_sidebar( 'Min_Sidebar' ); ?>

<?php } ?>

Post image i body class

<body <?php body_class(); ?> <?php

   
if ( $thumbnail_id = get_post_thumbnail_id() ) {
        if (
$image_src = wp_get_attachment_image_src( $thumbnail_id, 'normal-bg' ) )
           
printf( ' style="background-image: url(%s);"', $image_src[0] );
    }

?>
>

WooCommerce - her vises kun billede på selve produktsiden.
For at holde sidens load hastighed nede, bruges samme version af billedet, som benyttes til produktbilledet ( 'shop_single' )

<body <?php body_class(); ?> <?php
   
if (is_product() ) {

    if (
$thumbnail_id = get_post_thumbnail_id() ) {
        if (
$image_src = wp_get_attachment_image_src( $thumbnail_id, 'shop_single' ) )
           
printf( ' style="background-image: url(%s);"', $image_src[0] );
    }
    }
?>
>

Ny posttype

Her kan du finde ikoner til admin menuen til din nye posttype - https://developer.wordpress.org/resource/dashicons/#editor-spellcheck

Tags

Vis liste med alle tags.

I functions.php skrives:

<?php
function showalltags() {

   
$tags = get_tags();
   
$html = "";
    foreach (
$tags as $tag){
       
$tag_link = get_tag_link($tag->term_id);

       
$html .= '<li><a href="' . $tag_link . '">';
       
$html .= "{$tag->name}</a></li>" . "\r\n";
    }
    echo
$html;

}
?>

page.php eller anden template fil skrives

<ul class="taglist">
<?php showalltags(); ?>
</ul>

Custom post type med tags.
For at de vises på tags siderne skal der i functions.php tilføjes:

<?php
function wpbase_alltags_tags( $query ) {
    if (
$query->is_tag() && $query->is_main_query() ) {
       
$query->set( 'post_type', array( 'post', 'MIN-NYE-POST-TYPE' ) );
    }
}
add_action( 'pre_get_posts', 'wpbase_alltags_tags' );
?>

Print side via ID

<?php
   
    $page_id
= 161//Page ID
$page_data = get_page( $page_id );

//store page title and content in variables
$title = $page_data->post_title;
$content = apply_filters('the_content', $page_data->post_content);

//display the title and content
echo $title;
echo
$content;

?>

Title attribute i menu link

Indsæt link title i din WordPress menu - her indsat i <em> ... </em>

<?php
add_filter
('walker_nav_menu_start_el', 'description_in_nav_el', 10, 4);
function
description_in_nav_el($item_output, $item, $depth, $args)
{
    if (
$item->attr_title) {
    return
preg_replace('/(<a.*?>
[^<]*?)</', '$1' . "<em>{$item->attr_title}</em><", $item_output);
    }
    else {
    return preg_replace('/(<a.*?>[^<]*?)</', '$1' . "<", $item_output);
    }
}
?>

Sprog i theme filerne

Her en måde hvor man kan tjekke om det er engelsk eller kinesisk sprogversion

<?php
    $curlang
= get_bloginfo('language');
    if(
$curlang == "en-US") { ?>

<h3>Her kommer USA...</h3>
<?php }elseif($curlang == "zh-CN") { ?>
<h3>Her kommer KINA ...</h3>
<?php } ?>