Korisni code snippeti za WordPress (2.deo) Idi do glavnog sadržaja

Korisni code snippeti za WordPress (2.deo)

Već smo u jednom od ranijih tekstova na našem blogu pisali o korisnim code snippet-ima za WordPress i predstavili neke code snippet-e za WordPress verziju 6.2. U ovom tekstu ćemo dopuniti prethodna dva teksta još nekim korisnim code snippet-ima koje možete iskoristiti na svom WordPress sajtu.

Napomena: Najbolje je da code snippet-e dodajete u functions.php fajl vaše WordPress teme. Ukoliko ne želite da dodajete fajl ručno, možete koristiti i neke od plugin-a koji su dostupni u WordPress repozitorijumu.

Inače, functions.php fajl je moćan alat koji vam omogućava da uradite razne korisne stvari sa svojim WordPress web sajtom. Ipak, treba da budete pažljivi pri radu sa ovim fajlom, jer u slučaju greške možete da napravite problem u radu svog sajta. U jednom od ranijih tekstova smo objasnili čemu sve služi functions.php fajl i na koji način možete da ga iskoristite i koje sve korisne funkcionalnosti možete da dodate kroz ovaj fajl.

Ali, hajde da ne gubimo vreme i krenemo odmah na neke konkretne primere.

Još jedna važna napomena pre primene bilo kog code snippet-a koje navodimo u ovom tekstu. Pre nego što krenete sa dodavanjem koda, obavezno uradite backup svog sajta. U jednom od ranijih tekstova u našoj bazi znanja objasnili smo detaljno o tome kako da uradite backup kopiju svog web sajta u cPanel nalogu.

Primenite dinamičko ažuriranje datuma u footer-u

Ukoliko treba da prikažete autorsko pravo u footer-u vašeg sajta – nešto kao copyright 2024, koristite ovaj code snippet koda kako biste datum učinili dinamičkim. Na taj način više nećete morati da menjate datum, jer će se on automatski menjati svake godine.

function nazivfirme_copyright() { 
    global $wpdb; 
    $copyright_dates = $wpdb->get_results("
        SELECT
        YEAR(min(post_date_gmt)) AS firstdate,
        YEAR(max(post_date_gmt)) AS lastdate
        FROM
        $wpdb->posts
        WHERE
        post_status = 'publish' 
    "); 
    $output = ''; 

    if($copyright_dates) { 
        $copyright = "© " . $copyright_dates[0]->firstdate; 

        if($copyright_dates[0]->firstdate != $copyright_dates[0]->lastdate) { 
            $copyright .= '-' . $copyright_dates[0]->lastdate; 
        } 
        $output = $copyright;
    } 

    return $output;
} 

Zatim u footer ubacite sledeći kod:

<?php echo nazivfirme_copyright(); ?>

Automatski dodajte polje za pretragu u navigacioni meni

Ukoliko želite da u navigacioni meni svog sajta dodate i polje za pretragu, to možete uraditi pomoću sledećeg koda:

add_filter('wp_nav_menu_items','add_search_box', 10, 2); 
function add_search_box($items, $args) { 
    ob_start(); 
    get_search_form(); 
    $searchform = ob_get_contents(); 
    ob_end_clean(); 
    $items .= '<li>' . $searchform . '</li>'; 

    return $items; 
} 

Ovaj kod će automatski dodati polje za pretragu u vaš navigacioni meni.

Dodajte paginaciju na dno vaše blog stranice

Ukoliko želite da na dno vaše blog stranice dodate paginaciju, potrebno je da u functions.php fajl vaše teme dodate sledeći kod:

function my_paginate_links() { 
    global $wp_rewrite, $wp_query; 
    $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1; 
    $pagination = array( 
        'base' => @add_query_arg('paged','%#%'),
        'format' => '',
        'total' => $wp_query->max_num_pages,
        'current' => $current,
        'prev_text' => __('« Previous'),
        'next_text' => __('Next »'),
        'end_size' => 1,
        'mid_size' => 2,
        'show_all' => true, 
        'type' => 'list' 
    ); 

    if ( $wp_rewrite->using_permalinks() ) 
        $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' ); 

    if ( !empty( $wp_query->query_vars['s'] ) ) 
        $pagination['add_args'] = array( 's' => get_query_var( 's' ) ); 

    echo paginate_links( $pagination ); 
} 

Ovaj kod će generisati paginaciju na dnu vašeg bloga. Možete koristiti funkciju my_paginate_links() kako biste je prikazali.

Isključite postove i stranice iz rezultata pretrage na vašem sajtu

Ukoliko iz nekog razloga želite da pretraga na vašem sajtu ne obuhvata i postove i stranice, možete iskoristizti ovaj code snippet:

// filter za pretragu
function fb_search_filter($query) { 
    if ( !$query->is_admin && $query->is_search) { 
        $query->set('post__not_in', array(40, 9) ); // ID stranice ili posta
    } 
    return $query; 
} 
add_filter( 'pre_get_posts', 'fb_search_filter' ); 

Ovaj kod će isključiti postove ili stranice sa datim ID-vima iz rezultata pretrage. Možete promeniti ID-eve na one koje želite da isključite.

Ako želite isključiti pod-stranice neke stranice, treba ih dodati u niz:

// filter za pretragu
function fb_search_filter($query) { 
    if ( !$query->is_admin && $query->is_search) { 
        $pages = array(2, 40, 9); // ID stranice ili posta
        // pronađi podstranice za svaki ID
        foreach( $pages as $page ) { 
            $childrens = get_pages( array('child_of' => $page, 'echo' => 0) ); 
        } 
        // dodaj ID u niz
        for($i = 0; $i < sizeof($childrens); ++$i) { 
            $pages[] = $childrens[$i]->ID; 
        } 
        $query->set('post__not_in', $pages ); 
    } 
    return $query; 
} 
add_filter( 'pre_get_posts', 'fb_search_filter' );

Ovaj kod će isključiti pod-stranice određene stranice iz rezultata pretrage. Kao i u prethodnom primeru za stranice i postove, možete promeniti ID-eve stranica na one koje želite da isključite.

Onemogućite WordPress pretragu

Ukoliko iz nekog razloga želite da u potpunosti onemogućite WordPress pretragu na svom web sajtu, možete iskoristiti sledeći code snippet:

function fb_filter_query( $query, $error = true ) { 
    if ( is_search() ) { 
        $query->is_search = false; 
        $query->query_vars['s'] = false; 
        $query->query['s'] = false; 
        // prikazi grešku
        if ( $error == true ) 
            $query->is_404 = true; 
    } 
} 
add_action( 'parse_query', 'fb_filter_query' ); 
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

Ovaj kod će onemogućiti funkcionalnost pretrage na vašem WordPress sajtu. Korisnici neće biti u mogućnosti da vrše pretragu, a umesto toga će biti prikazana 404 greška ako pokušaju da pristupe stranici za pretragu.

Dodajte prilagođeni sadržaj ispod svakog posta

Možda želite da dodate prilagođeni sadržaj ispod svakog posta – možda obaveštenje o autorskim pravima, neko malo oglašavanje ili jednostavno da svojim korisnicima napišete poruku ”Hvala što čitate!”.

function add_post_content($content) { 
    if(!is_feed() && !is_home()) { 
        $content .= '<p>Ovaj članak je autorski &copy; '.date('Y').'&nbsp;'.get_bloginfo('name').'</p>'; 
    } 
    return $content;
} 
add_filter('the_content', 'add_post_content');

Ovaj kod će dodati prilagođeni sadržaj ispod svakog posta, osim na RSS feed-u i na početnoj stranici (home page). Možete promeniti HTML kod unutar funkcije add_post_content da biste prilagodili sadržaj koji se dodaje.

Prikažite redne brojeve pored svakog posta

Ovaj odlomak koda omogućava vam da dodate brojeve pored vaših postova. Možete koristiti “Članak 1, Članak 2, Članak 3;” ili “Post 1, Post 2, Post 3;” ili bilo šta drugo što želite.

Dodajte ovo u vaš functions.php fajl:

function updateNumbers() { 
    global $wpdb; 
    $querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' "; 
    $pageposts = $wpdb->get_results($querystr, OBJECT); 
    $counts = 0 ; 

    if ($pageposts): 

    foreach ($pageposts as $post): 
        setup_postdata($post); 
        $counts++; 
        add_post_meta($post->ID, 'incr_number', $counts, true); 
        update_post_meta($post->ID, 'incr_number', $counts); 

    endforeach; 

    endif; 
} 
add_action ( 'publish_post', 'updateNumbers' ); 
add_action ( 'deleted_post', 'updateNumbers' ); 
add_action ( 'edit_post', 'updateNumbers' );

Ovaj kod će dodati inkrementalne brojeve pored svakog objavljenog posta. Brojevi će se automatski ažurirati pri objavljivanju, brisanju ili izmeni posta. Možete koristiti funkciju get_post_meta da biste prikazali inkrementalni broj unutar petlje za prikazivanje postova.

Izlistajte popularne postove na osnovu broja komentara

Ukoliko želite da na svom web sajtu istaknete svoje najkomentarisanije postove, prema broju komentara, to možete uraditi pomoću sledećeg koda:

<h2>Popularni Postovi</h2>
<ul>
<?php 
    $popular_posts = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 10");
    foreach ($popular_posts as $post) {
        setup_postdata($post);
        $post_id = $post->ID;
        $title = $post->post_title;
        $comment_count = $post->comment_count;
        if ($comment_count != 0) { 
?>
    <li><a href="<?php echo get_permalink($post_id); ?>" title="<?php echo $title ?>">
    <?php echo $title ?></a> (<?php echo $comment_count ?>)</li> 
<?php 
        } 
    } 
?>
</ul> 

Ovaj kod će generisati listu najpopularnijih postova na osnovu broja komentara. Pri svakoj iteraciji kroz rezultate upita, prikazuje se naziv posta sa linkom ka njemu, zajedno sa brojem komentara. Promenljive su jasno naznačene kako bi se omogućila lakša čitljivost i prilagođavanje prema potrebama.

Prikažite broj komentara

Ako želite brz način da prikažete broj komentara, možete dodati ovo u vaš sidebar.php fajl:

<?php 
$commcount = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '1'"); 

if (0 < $commcount) $commcount = number_format($commcount); 
echo "Naši korisnici su ostavili ".$commcount." komentara, želite li da im se pridružite?"; 
?>

Ovaj kod će izračunati i prikazati broj odobrenih komentara. Broj će biti formatiran tako da bude lakše čitljiv, a poruka će pozvati posetioce da se pridruže komentarisanju.

Onemogućite HTML kod u komentarima

Ukoliko se vaš sajt bavi developerskim temama, onda se može desiti da korisnici često u komentaru ostave HTML kod. To u nekim situacijama može da bude problem, pa je zato najbolje da onemogućite prikazivanje koda. To možete uraditi pomoću sledećeg code snippet-a:

// Ovo će se desiti kada se komentar pošalje
function plc_comment_post( $incoming_comment ) { 
    // Pretvara sve u komentaru u literalni prikaz (literal representation)
    $incoming_comment['comment_content'] = htmlspecialchars($incoming_comment['comment_content']); 
    // Jedini izuzetak su jednostruki navodnici, koji ne mogu biti &#039; jer WordPress označava kao spam
    $incoming_comment['comment_content'] = str_replace( "'", '&#039;', $incoming_comment['comment_content'] );
    return $incoming_comment;
}
// Ovo će se desiti pre nego što se komentar prikaže
function plc_comment_display( $comment_to_display ) {
    // Vraća jednostruke navodnike
    $comment_to_display = str_replace( '&#039;', "'", $comment_to_display ); 
    return $comment_to_display; 
} 
add_filter( 'preprocess_comment', 'plc_comment_post', '', 1); 
add_filter( 'comment_text', 'plc_comment_display', '', 1); 
add_filter( 'comment_text_rss', 'plc_comment_display', '', 1); 
add_filter( 'comment_excerpt', 'plc_comment_display', '', 1); 

Ovaj kod će konvertovati HTML kod u komentarima u literalni prikaz (literal representation), sprečavajući tako bilo kakvo izvršavanje HTML-a. Takođe će se vratiti jednostruki navodnici u komentarima. Ovo je korisno ako želite da izbegnete neželjene HTML elemente u komentarima.

Forsirajte prijavu korisnika pre čitanja posta

Ako postoje određeni postovi kojima želite da ograničite pristup, bilo da su namenjeni za samo nekoliko ljudi, pretplatnicima ili bilo kome drugom, možete koristiti ovaj code snippet da prisilite korisnike da se prethodno prijave da bi ih videli. Zalepite ovo u vaš functions.php fajl:

function my_force_login() { 
    global $post;
    
    if (!is_single()) return; 
    $ids = array(188, 185, 171); // niz ID-eva postova koji zahtevaju prijavljivanje za čitanje
    
    if (in_array((int)$post->ID, $ids) && !is_user_logged_in()) { 
        auth_redirect(); 
    } 
} 
add_action('template_redirect', 'my_force_login');

Ovaj kod će prisiliti korisnike da se prijave pre nego što mogu da vide određene postove. Možete promeniti ID-ove postova u nizu $ids da odgovaraju postovima za koje želite da ograničite pristup.

Dodajte Facebook i Twitter share ikonice na kraj svakog posta

Ukoliko želite da korisnicima omogućite da podele vaš post na svojim nalozima na društvenim mrežama, onda ispod svakog posta možete dodati Facebook i Twitter ikonice za share. To možete učiniti pomoću sledećeg code snippet-a:

function share_this($content){ 
    if(!is_feed() && !is_home()) { 
        $content .= '<div class="share-this"> 
            <a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal">Tweet</a> 
            <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
            <div class="facebook-share-button"> 
                <iframe src="http://www.facebook.com/plugins/like.php?href='.
                    urlencode(get_permalink($post->ID)) .
                    '&amp;layout=button_count&amp;show_faces=false&amp;width=200&amp;action=like&amp;colorscheme=light&amp;height=21" 
                    scrolling="no" frameborder="0" style="border:none; 
                    overflow:hidden; width:200px; height:21px;" 
                    allowTransparency="true">
                </iframe> 
            </div> 
        </div>'; 
    } 
    return $content;
} 
add_action('the_content', 'share_this');

Ovaj kod će automatski dodati Facebook i Twitter dugmad na dno svakog posta, osim na RSS feed-u i početnoj stranici. Možete prilagoditi stil i postavke dugmadi promenom HTML-a u ovom kodu.

Nenad Mihajlović


Ostavite odgovor