it-swarm-eu.dev

Jak získám obrázky (s náhledem miniatur), které se zobrazí ve výsledcích vyhledávání?

Krátká verze

Vytvořil jsem stránku Wordpress (Gazette theme base) se spoustou obrazových médií. Všechny mají popisy, titulky a tituly, ale nezobrazují se ve výsledcích vyhledávání; pomocí Relevanssi bych mohl získat jejich název a popis, ale žádný obrázek nebyl zobrazen! Jak lze zobrazit obrazová média ve výsledcích vyhledávání s miniaturami obrázků?

Kontext:

Vytvořil jsem webové stránky produktového portfolia pro kováře. Každá stránka má více galerií obrázků: například "Vlastní kousky" má různé typy nožů, mečů a dalších kusů s jedinečnými názvy, "Axy" má různé standardní osy, které vyrábí, a tak dále. Vzhledem k tomu, že zákazníci mohou hledat něco konkrétního popisu, aniž by věděli, kde žijí, budou pravděpodobně vyhledávat. Zjistil jsem však, že výchozí vyhledávání aplikace Wordpress není příliš užitečné a zcela vylučuje obrazová média. Kdybych například hledal "Damašek", získal bych nulové výsledky, a to i přes desítky obrázků s Damaškem v popisku, popisu a názvu! Nainstaloval (a) jsem aplikaci Relevanssi, která způsobí, že se všechna relevantní média zobrazí ve výsledcích vyhledávání, ale žádný z obrázků se ve skutečnosti nezobrazí:

 enter image description here 

Pokud hledání nalezne libovolnou položku Post, Page nebo jinou položku se zobrazeným obrázkem, zobrazí se miniatura obrázku. Vzhledem k tomu, že obrázky nemají (mají) toto pole, nevím, jak je zobrazit. Prostě nevím Wordpress API dost dobře vědět, kde hledat nebo co dělat. Co PHP hovory potřebuji, aby se tyto obrázky objevily, nebo existuje plugin, který dělá přesně to, co hledám? (Nejsem webový vývojář, ale mám softwarové inženýrství a některé základní webové zkušenosti.)

Díky předem!

1
Dylan Knowles

To je něco, co bude třeba zpracovat ve šabloně výsledků vyhledávání motivu. Pokud je téma mimo polici, pravděpodobně nepodporuje miniatury obrázků pro přílohy, protože - jak jste již zjistili - přílohy se obvykle nezobrazují ve výsledcích vyhledávání.

Je to proto, že v normálním motivu bude každý výsledek zobrazovat miniaturu pomocí funkce the_post_thumbnail() . Pod kapotou je představovaný obraz sám o sobě přílohou typu přílohy. Tato funkce získává ID obrázku, který je zobrazen na postu, a používá toto ID v wp_get_attachment_image() , které vydává obraz/náhled pro přílohu.

Vzhledem k tomu, že přílohy příspěvků nemají mají a featured image, protože jsou to už samotné přílohy, tato funkce nic nezobrazí.

Chcete-li tedy zobrazit obrázek přílohy přílohy, bude nutné zkontrolovat, zda je příspěvek přílohou, a pokud ano, přeskočte the_post_thumbnail() a přejděte přímo na wp_get_attachment_image() s vlastním ID příspěvku. Můžete vidět z tento příklad že toto je způsob, jakým šablona přílohy zobrazuje obrázek.

V praxi by to vypadalo něco jako:

if ( get_post_type() === 'attachment' ) {
    echo wp_get_attachment_image( get_the_ID(), 'large' );
} else {
    the_post_thumbnail( 'large' );
}

Přesná velikost obrázku k použití namísto 'large' závisí na tom, co vaše téma již používá.

To by znamenalo úpravu souborů motivů a přesný soubor závisí na původním motivu. Budete muset zkontrolovat soubory motivu proti hierarchii šablon a zjistit, které soubory jsou ve skutečnosti používány. Ať je to jakýkoliv soubor, měli byste provést změny vytvořením Child Theme . To zajistí, že změna bude bezpečná před aktualizací motivu, která by normálně vymazala všechny změny.

Další metodou, která nebude zahrnovat úpravy šablon (ale bude stále vyžadovat vytvoření podřízeného motivu nebo vlastního pluginu pro vložení kódu), by bylo filtrovat požadavek na ID miniatury příspěvku.

Hluboko dolů the_post_thumbnail() používá get_post_meta( $post->ID, '_thumbnail_id', true ); k získání ID přílohy, která je představovaným obrázkem pro příspěvek. Můžete to filtrovat tak, aby aplikace WordPress požadovala hodnotu meta pro příspěvek a příspěvek je přílohou, místo toho vraťte ID přílohy.

Můžete to udělat pomocí get_post_metadata filter:

function wpse_300128_attachment_post_thumbnail( $value, $post_id, $meta_key, $single ) {
    if ( get_post_type( $post_id ) === 'attachment' && $meta_key === '_thumbnail_id' ) {
        return $single ? $post_id : array( $post_id );
    }
}
add_filter( 'get_post_metadata', 'wpse_300128_attachment_post_thumbnail', 10, 4 );

S tímto filtrem aktivní, kdykoliv se WordPress pokusí získat miniaturu ID přílohy, místo toho obdrží ID. Návratová hodnota je buď ID nebo pole obsahující ID na základě hodnoty $single. To je tak, že výsledek bude očekávaný formát bez ohledu na to, zda má původní volání $single nastaveno na true nebo false.

2
Jacob Peattie