Supporto » Sviluppare con WordPress » featuredimage da key+value di un custom field

  • Sono un paio di anni che ho questo problema, ed anche sul forum inglese non sono riuscito ad ottenere una risposta risolutiva.

    Ho bisogno di far diventare il valore URL di un custom field (es. portfolio_image) come featuredimage. La cosa deve essere automatizzata per tutto il sito, e l’immagine presa dall’url deve comparire nella metabox del post.
    Ho provato molti codici e funzioni, c’è qualcuno con una soluzione definitiva?

Stai visualizzando 11 risposte - dal 1 al 11 (di 11 totali)
  • Non so che tema hai, un idea potrebbe essere quella di creare un child theme e andare a modificare tutte le richieste has_post_thumbnail() in get_post_meta(), controllando che get_post_meta() ritorni un valore.
    In questo momento non so se esiste un hook apposta per la thumbnail, perché se esistesse potrebbe essere la soluzione più comoda per modificare il contenuto in modo da passargli il link inserito.

    arsenalemusica

    (@arsenalemusica)

    Credo che dovrebbe essere una cosa possibile a prescindere dal tema che uno abbia.
    Ti faccio un esempio dei codici che ho utilizzato. Riesci a capire dov’è il problema?

    return apply_filters( 'post_thumbnail_html', $html, $post_id, $post_thumbnail_id, $size, $attr );
    function my_filter_the_post_thumbnail( $html, $post_id ) {
        // trova il valore del custom-field
        $custom_url = get_post_meta( $post_id, 'portfolio_image', true );
        // se ha un valore, mostralo
        if ( '' != $custom_url ) {
            return '<img src="' . $custom_url . '" />';
        } 
        // altrimenti, mostra il post thumbnail html originale
        else {
            return $html;
        }
    }
    add_filter( 'post_thumbnail_html', 'my_filter_the_post_thumbnail', 10, 2 );

    Ho fatto qualche test per capire la situazione, ho copiato dalla 2° all’ultima riga e messe nel file function.php del tema. Il codice funziona quando c’è un’immagine impostata come “featured image”, perchè viene attivata la funzione, almeno questo succede sul tema twenty-twenty.

    Dalla richiesta capisco che dovrebbe essere una cosa tutta automatica, ma credo che se si usa quel codice bisognerà mettere una immagine d’esempio, una Loren ipsum image, per ogni articolo/post a cui si vuole applicare il filtro.

    Ti ringrazio per il test. Ma vedi, il punto è proprio che io devo impostare la featured-image in automatico, estrapolandola dal valore del custom-field (le immagini sono già nel database, quindi non si tratta di un URL esterno).
    Ma è anche vero che, oltre al custom-field, l’URL è indicato nel campo ImageFeatured. Dunque perchè il tema (o WordPress di per sé) non la mostra nella metabox? Per questo ho bisogno di automatizzare la cosa.
    Ma soprattutto perchè ho 12.000 post e non posso certo assegnare la featured-image manualmente. 🙂

    A questo punto, da quello che ho capito, se i post hanno già tutti “portfolio_image” ma non la featured image penso che sia più semplice fare un tema child dove sovrascrivi la condizione con cui prende la featured image e trasformarla in portfolio_image.
    Un esempio che posso fare è su tema twenty twenty, a questo indirizzo puoi vedere come viene visualizzata l’immagine (https://themes.svn.wordpress.org/twentytwenty/1.1/template-parts/featured-image.php), la condizione implica che il post abbia una image featured, quindi ho modifichi la condizione o ho modifichi la funzione che controlla, potrebbe essere un idea aggiungere il seguente codice:

    function my_override_has_post_thumbnail( $result, $object_id, $meta_key, $single ) {
        if ( '_thumbnail_id' === $meta_key ) {
            $custom_url = get_post_meta( $post_id, 'portfolio_image', true );
        // se ha un valore, mostralo
        if ( '' != $custom_url )
    
    $result = true;
    
        }
    
        return $result;
    }
    add_filter( 'get_post_metadata', 'my_override_has_post_thumbnail', 10, 4 );

    Attenzione: Non so se il codice funziona così, ma il principio potrebbe essere giusto, quindi fallo possibilmente su un backup

    • Questa risposta è stata modificata 1 settimana, 6 giorni fa da Luca.

    …non si apre la tua immagine, ed il codice non funziona così com’è.
    A suo tempo avevo anche provato il seguente, che includeva un array perchè ho bisogno di aggiungere l’immagine per diversi custom-post-types (company, portfolio, event, etc.) che qui ho chiamato fieldname-one, two, etc.:

    add_filter('get_the_post_thumbnail', function($html) {$post = get_post();
    if (! $post) { return $html; }
    if (! in_array($post->post_type, array('fieldname-one', 'fieldname-two'), true)) { return $html; }
    $newThumbnail = filter_var( get_post_meta($post->ID, 'fieldname-one', 'fieldname-two', true), FILTER_SANITIZE_URL );
    if($newThumbnail) { $html = '<img src="' . esc_url($newThumbnail) . '" alt="" />'; }
    return $html;
    });

    Mi sono spiegato male, questo link (https://themes.svn.wordpress.org/twentytwenty/1.1/template-parts/featured-image.php) non è l’immagine, ma il codice del tema twenty twenty che viene eseguito per visualizzare l’immagine.

    Per l’ultimo codice mostrato non saprei.

    Se posso saperlo, il tema è un tema del reposity di WordPress?
    Se sì quale?

    …è un vecchio tema premium acquistato su Envato. Sicuramente dovrò farlo riscrivere, ma per adesso avrei bisogno di questa modifica aggiuntiva.

    Ah, ok.
    La mia idea è o riuscire a sovrascrivere ha_post_thumbnail, se si può (il codice che avevo scritto lì non l’ho testato, per quello non so se ha un errore di ritorno oppure non si può fare in quel modo) oppure sovrascrivere il tema per bypassare il has_post_thumbnail perché credo che la funzione “add_filter( ‘post_thumbnail_html’,…” Non funziona perché viene intercettata prima dal controllo se il post ha un immagine in evidenza (almeno così è solitamente sui temi normalmente)

    Il problema è proprio l’intercettazione, e le priorità. Perchè ho anche provato quei plugin che assegnano una immagine a scelta se il sistema non la trova nel post, e comunque non riusciva nel suo compito. Ho anche provato i plugin che usano una immagine da url esterno, ma niente.
    Eppure mi sembra così semplice in teoria: ho un key+value, e voglio assegnare quel value come featured-image, dunque si tratta di sovrascriverlo.
    Non so scrivere codice e non saprei come fare, ma la logica sarebbe questa:
    cerca un custom-field dal nome (array: x, y, z) > prendi il suo value > usalo come post_thumbnail > mostralo nella metabox

Stai visualizzando 11 risposte - dal 1 al 11 (di 11 totali)
  • Devi essere collegato per rispondere a questo topic.