web-dev-qa-db-fra.com

Comment extraire le texte alternatif d'une image jointe via le téléchargement via le plugin Wordpress Options Framework?

Je crée actuellement un thème WordPress personnalisé et j'utilise le plugin Options de WordPress Options Framework pour créer une page d'options personnalisées pour mon client. Je suis en mesure de créer facilement une option de téléchargement d'image et de faire en sorte que cette image affichée s'affiche là où je le souhaite dans le cadre de mon thème. Dans mon fichier d'options (requis pour que le plug-in fonctionne), le tableau que j'ai créé pour la fonctionnalité de téléchargement d'image est le code suivant:

$options[] = array(
'name' => __('Header Overlay', 'options_framework_theme'),
'desc' => __('This creates a full size uploader that previews the image.', 'options_framework_theme'),
'id' => 'header_overlay',
'type' => 'upload');

Ensuite, dans le thème, j'appelle cette image téléchargée avec le code suivant:

<img src="<?php echo of_get_option('header_overlay', 'no entry'); ?>" />

Comme je l'ai mentionné, tout fonctionne parfaitement. Cependant, je ne peux pas comprendre comment extraire le texte alternatif du dialogue de téléchargement d'image et l'inclure en tant qu'écho dans la balise img src du thème. Est-ce que je peux ajouter quelque chose dans le tableau ci-dessus pour créer quelque chose à faire écho dans le thème?

[mise à jour]
Si je recherche le texte of_get_option dans tous les fichiers, je trouve un fichier. C'est le code:

if ( ! function_exists( 'of_get_option' ) ) : 
    function of_get_option( $name, $default = false ) { 
        $config = get_option( 'optionsframework' ); 
        if ( ! isset( $config['id'] ) ) { 
            return $default; 
        } 
        $options = get_option( $config['id'] ); 
        if ( isset( $options[$name] ) ) { 
            return $options[$name]; 
        } 
        return $default; 
    } 
endif;
3
Brandon

Il y a 2 solutions possibles à cela.

Solution 1: Etant donné qu'Options Framework ne vous donne qu'un importateur, je suppose que vous saisissez le texte de remplacement manuellement du côté de l'administrateur WP. Vous pourriez créer une option de texte pour le texte de remplacement afin que vous puissiez le saisir à partir de votre panneau d'options personnalisées. Puis rappelez cette option là où vous en avez besoin:

$options[] = array(
    'name' => __('Header Overlay Alt Text', 'options_framework_theme'),
    'desc' => __('Alternate text for your header overlay image.', 'options_framework_theme'),
    'id' => 'header_overlay_alt',
    'type' => 'text');

Puis dans votre modèle:

<img src="<?php echo of_get_option('header_overlay'); ?>" alt="<?php echo of_get_option('header_overlay_alt'); ?>">

OR

Solution 2: (Celui-ci répond plus directement à votre question.)
a) Récupérez l'ID de pièce jointe en fonction de l'URL et b) utilisez cet ID pour récupérer le texte de remplacement correspondant. (Crédit pour la partie a va à Philip Newcomer: http://philipnewcomer.net/2012/11/get-the-attachment-id-from-an-image-url-in-wordpress/ .)

function pn_get_attachment_id_from_url( $attachment_url = '' ) {

global $wpdb;
$attachment_id = false;

// If there is no url, return.
if ( '' == $attachment_url )
    return;

// Get the upload directory paths
$upload_dir_paths = wp_upload_dir();

// Make sure the upload path base directory exists in the attachment URL, to verify that we're working with a media library image
if ( false !== strpos( $attachment_url, $upload_dir_paths['baseurl'] ) ) {

    // If this is the URL of an auto-generated thumbnail, get the URL of the original image
    $attachment_url = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $attachment_url );

    // Remove the upload path base directory from the attachment URL
    $attachment_url = str_replace( $upload_dir_paths['baseurl'] . '/', '', $attachment_url );

    // Finally, run a custom database query to get the attachment ID from the modified attachment URL
    $attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url ) );

}

return $attachment_id;
}

$your_id = pn_get_attachment_id_from_url(of_get_option('header_overlay'));
$alt_text = get_post_meta($your_id, '_wp_attachment_image_alt', true);

Puis rappelez-le si nécessaire:

<img src="<?php echo of_get_option('header_overlay'); ?>" alt="<?php echo $alt_text; ?>">

Je sais que cette question a 6 mois, mais même si le PO a évolué, j'espère que cette réponse aidera quelqu'un!

1
Joe