Úvodní stránka › Fórum podpory WordPressu › Problémy s WordPressem › Nahrazení podtržítek v názvu přílohy?
Štítky: add_attachment, add_filter, attachment, image_send_to_editor, str_replace(), title, wp_insert_attachment(), wp_update_post()
Zvolené téma obsahuje celkem 5 odpovědí. Do diskuze (3 účastníci) se naposledy zapojil uživatel LuCaCZ a poslední změna je stará 12 let.
-
AutorPříspěvky
-
16. dubna 2012 (14:54) #1549
Zdravím,
dá se nějak automaticky např. přes add_filter() nahrazovat podržítka v názvu přílohy/mediálního souboru? Když mám třeba na blogu soubor “obrazek_0007.jpg” bude mít název “obrazek_0007”, chtěl bych aby se na stránce (resp. v galerii) zobrazoval název “obrazek 0007” hlavně v argumentu “title” v html tagu <img>. Jde to a jak? Děkuji.
17. dubna 2012 (6:10) #11145Teď po ránu mě nijak nenapadá žádný filtr, který by na toto byl použitelný, každopádně by to šlo vyřešit snadno v šabloně vzhledu. Ten titulek obrázku vypisuje nějaká funkce např.
get_img_title();
tak ji jednoduše vložím do PHP funkce
str_replace()
, která mi nahradí všechny znaky “_” za ” ” a hotovo :)str_replace('_', ' ', get_img_title());
17. dubna 2012 (13:03) #11146Lukenzi: Problém je hlavně v tom, že ten obrázek může být uživatelem také “natvrdo” vložen do příspěvku/stránky, takže není vypisován žádnou funkcí a musel by se ještě použít filtr image_send_to_editor.
Ale jak tedy automaticky měnit titulek (title) přímo při nahrávání souboru? Bohužel jsem nenašel žádný jednoduchý filtr, např. pro funkci wp_insert_attachment(), pomocí které jsou data ukládána do databáze, takže se to bohužel musí udělat trochu oklikou. Využijeme akci add_attachment, která se spouští až po uložení všech dat do databáze, získáme automaticky vygenerovaný název, jednoduše upravíme pomocí funkce str_replace() a poté databázi aktualizujeme pomocí funkce wp_update_post(). Sice to zní složitě, ale je to jen pár krátkých řádků kódu:
function separatista_upravit_nazev( $id ) {
$soubor_id = get_post( $id );
$title = $soubor_id->post_title;
$title = str_replace( '_', ' ', $title );
$upraveny_soubor = array();
$upraveny_soubor['ID'] = $id;
$upraveny_soubor['post_title'] = $title;
wp_update_post( $upraveny_soubor );
}
add_action( 'add_attachment', 'separatista_upravit_nazev' );P.S. Nakonec jsem našel ještě plugin Format Media Titles, který to celé dělá automaticky a řeší i další drobnosti (velká a malá písmena, pomlčky a nejen podtržítka).
17. dubna 2012 (23:05) #11147Moc díky, ten kousek kódu je parádni a dostačující. Je stejný jako v pluginu. Teď ještě vyřešit jak nahradit podtržítka v ostatních – dříve nahraných – souborech (cca 8200).
Myslel jsem právě, že by se přepisovaly někde ve funkci, která převádí short tag [gallery] na html kód. “Jen” by se měnila proměnná $title(?) a vypisovala název bez podtržítek.
18. dubna 2012 (10:12) #11148Pokud jde pouze o převedení HTML ze zkráceného zápisu [gallery], tak to je vcelku jednoduché. Když potřebujete změnit pouze titulek obrázku, tak není třeba duplikovat celou funkci s pomocí filtru post_gallery, ale stačí jen využít faktu, že tam je volána funkce wp_get_attachment_link(), která následně volá wp_get_attachment_image() a kde už můžeme využít filtr wp_get_attachment_image_attributes. Příklad:
function separatista_upravit_nazev_galerie( $attr ) {
$attr['title'] = str_replace( '_', ' ', $attr['title'] );
return $attr;
}
add_filter( 'wp_get_attachment_image_attributes', 'separatista_upravit_nazev_galerie' );Problémem je ale fakt, že to neřeší jiné výskyty obrázků na webu (pouze v galerii). Možná by bylo lepší projít skriptem všechny obrázky a automaticky všude nahradit podtržítka mezerami. Skript by proběhl pouze jednou a už by nemusel být pokaždé znovu zpracovávána předchozí funkce při každém zobrazení galerie.
20. dubna 2012 (15:16) #11149Moc děkuji za vše, prozatím nechám add_action při uploadu a add_filter při zobrazování galerie. Těch samostatných obrázků na webu je minimálně, tak stačí úpravy v galerii. Později pak vyřeším script pro hromadnou úravu.
Ještě jednou díky.
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.