Functiile getCategories(),getTags(),getOption() si getPermalink() pentru wordpress externe
4Daca ati intampinat uneori necesitatea de a folosi anumite informatii in legatura cu articolele scrise pe WordPress, poate ati avut nevoie si de functiile ce lucreaza cu acesta. Insa datorita cunostintelor dumneavoastra mai putin complexe in legatura cu wordpress ati abandonat pentru simplu fapt ca nu stiati ce fisiere trebuie incluse , sau cum trebuiau folosite functiile sau ce dependente aveau.
Am inceput o serie de articole in care voi prezenta diverse implementari ale mele ce nu necesita nici un fel de cunostinte wordpress. Acestea nu vor avea nici o dependenta cu wordpress`ul, facandu`le extrem de utile in situatii similare ca cea de mai sus.
Pentru inceput vom incepe cu functia getOption(). Aceasta functie extrage informatii din tabelul „term_options”(in general wp_options) si le returneaza catre utilizator.Este de mentionat faptul ca siguranta diferenta intre aceasta si functia WP este faptul ca aceasta returneaza raspunsul pe cand cea din wordpress il afiseaza direct.
/* * @function : extract options from wp_options * @args : $option : name of information which will be extracted * $type : optional, type of information extracted * @return : information extracted */ function getOption($option,$type = 'TEXT') { return @mysql_result(mysql_query("SELECT option_value AS ".$type." FROM `wp_options` WHERE option_name='".$option."'"),0); }
Trecem mai departe si cu siguranta va fi necesara functia getPermalink(), pentru extragerea permalink`urilor unui post. Functia aceasta face ce spune. Este de mentionat faptul ca aceasta functie are nevoie de functia getOption() pentru extragerea structurii permalink-urilor.
/* * @function : create permalink url of posts * @args : $row is the post row extracted from wp_posts * @return : permalink url */ function getPermalink($row) { $permalink = getOption('permalink_structure'); if($permalink != '' && !in_array($row['post_status'],array('draft', 'pending'))) { $rewritecode = array( '%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%', '%postname%', '%post_id%', '%category%', '%author%', '%pagename%', ); $category = ''; if ( strpos($permalink, '%category%') !== false ) { $q = mysql_query("SELECT * FROM `wp_term_relationships` WHERE object_id='".(int)$row['ID']."'"); $cats = getCache($q,'category'); foreach($cats as $cat) if($cat['parent'] == 0) { $category = $cat['slug']; break;} else $category = $cat['slug']; } $author = ''; if( strpos($permalink, '%author%') !== false ) { $author = mysql_result(mysql_query("SELECT display_name AS TEXT FROM `wp_users` WHERE post_author='".(int)$row['post_author']."'"),0); } $unixtime = strtotime($row['post_date']); $date = explode(" ",date('Y m d H i s', $unixtime)); $rewritereplace = array( $date[0], $date[1], $date[2], $date[3], $date[4], $date[5], $row['post_name'], $row['ID'], $category, $author, $row['post_name'] ); $link = getOption('home') . str_replace($rewritecode, $rewritereplace, $permalink); $link = str_replace(array("//","http:/"), array("/","http://"),$link); } else { $link = getOption('home') . "?p=". $row['ID']; $link = str_replace(array("//","http:/"), array("/","http://"),$link); } return $link; }
Exemplu de mai jos va afisa permalink`urile de la ultimile 30 de posturi :
$query = mysql_query("SELECT * FROM `wp_posts` WHERE post_status='publish' AND post_type='post' ORDER BY `ID` DESC LIMIT 0,30"); while($row = mysql_fetch_array($query)) { echo getPermalink($row); }
Trecem mai departe la functii getCategories() si getTags(). Deoarece aceste functii sunt 99% similare am decis sa creez una singura.Functia se cheama getCache() si arata ca mai jos :
function _cmp($el_1,$el_2) { if ($el_1['order'] == $el_2['order']) { return 0; } return ($el_1['order'] < $el_2['order']) ? -1 : 1; } function getCache($query,$taxonomy = '') { $objs = array(); while($row_i = mysql_fetch_array($query)) { $q = mysql_query("SELECT * FROM `wp_term_taxonomy` WHERE term_taxonomy_id='".$row_i['term_taxonomy_id']."'"); if(mysql_num_rows($q)) { $row = mysql_fetch_array($q); if($row['taxonomy'] == $taxonomy) { $objs[] = array('term_id' => $row['term_id'], 'name' => @mysql_result(mysql_query("SELECT name AS TEXT FROM `wp_terms` WHERE term_id='".(int)$row['term_id']."'"),0), 'slug' => @mysql_result(mysql_query("SELECT slug AS TEXT FROM `wp_terms` WHERE term_id='".(int)$row['term_id']."'"),0), 'parent' => $row['parent'], 'description' => $row['description'], 'count' => $row['count'], 'order' => $row_i['term_order'] ); } } } usort($objs,"_cmp"); return $objs; }
Observam ca are nevoie de functia _cmp() ce va ordona elementele extrase in functie de valoarea „order” ce o are fiecare element.Valoarea returnata este un tablou bidimensional (array(array()) , unde fiecare element reprezinta un tag/categorie cu diverse informatii ce le reprezinta : name, parent, description, order , count, slug cu aceeasi semnificatie ca si in wordpress. Este de mentionat faptul ca functia ce va extrage categoriile nu ofera informatiile complete. Este sugerabil sa o folositi daca incercati sa faceti un fel de RSS Feed. Daca aveti nevoie de lamuriri suplimentare intrebati aici si va voi raspunde daca este indicat sa o folositi.
Exemple de folosire, $row = row`ul unui post extras din baza de date, similar cu exemplul dat functiei anterioare :
$query = mysql_query("SELECT * FROM `wp_term_relationships` WHERE object_id='".(int)$row['ID']."'"); //extrage categoriile $cats = getCache($query,'category'); foreach($cats as $cat) { echo "\n".$cat['name']." "; } //extrage tagurile $tags = getCache($query,'post_tag'); foreach($tags as $tag) { echo "\n".$tag['name']." "; }
Observam faptul ca pentru a extrage categoria avem nevoie de argumentul 2 definit „category” iar pentru taguri : „post_tag”.
Este de mentionat faptul ca aveti nevoie si de o conexiune la baza de date ca functiile sa mearga. Daca aveti neclarititati nu ezitati sa postati. Daca aveti nevoie de anumite functii din WP „exportate” spuneti aici si in urmatorul articol vor avea prioritate.
Salut
As vrea sa pun in footer o lista cu toate postarile (articolele) din site. Adica numele articolului cu link catre respectivul articol. Ce functie sa folosesc?
Cu toate articolele? Sau doar cu ultimile? 🙂 Eu in general folosesc functia query_posts()
Cu toate articolele.
Eu nu ma pricep, poti sa imi scrii codul pe care sa il inserez?
Cu respect, Nelu.
Daca stiti va rog sa ma ajutati si pe mine. La afisarea categoriilor cu get_categories sau wp_list_categories, li si /li este bagat din default. Eu as vrea o expresie in care li si /li sa editez in fila. Vreau asta pt ca doresc sa afisez o mica imagine dupa li care sa apara la fiecare categorie in drept cu textul. Va multumesc anticipat.