it-swarm.com.de

Wie extrahiere ich den Alternativtext aus einem Bild, der über das Wordpress Options Framework Plugin hochgeladen wird?

Ich erstelle gerade ein benutzerdefiniertes WordPress-Design und benutze das WordPress Options Framework-Plugin , um eine benutzerdefinierte Optionsseite für meinen Client zu erstellen. Ich kann auf einfache Weise eine Option zum Hochladen von Bildern erstellen und das hochgeladene Bild so anzeigen, dass es dort angezeigt wird, wo ich es im Rahmen meines Themas beabsichtige. In meiner Optionsdatei (erforderlich, damit das Plugin funktioniert) besteht das Array, das ich für die Funktion zum Hochladen von Bildern erstellt habe, aus folgendem Code:

$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');

Dann rufe ich innerhalb des Themas das hochgeladene Bild mit dem folgenden Code auf:

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

Wie ich schon erwähnte, funktioniert alles perfekt. Was ich jedoch nicht herausfinden kann, ist, wie man den Alt-Text aus dem Bild-Upload-Dialog extrahiert und ihn als Echo in das img src-Tag im Theme einfügt. Gibt es irgendetwas, das ich im obigen Array hinzufügen kann, um etwas zu erstellen, das im Thema widerhallt?

[update]
Wenn ich in den Dateien nach dem Text of_get_option suche, finde ich eine Datei. Dies ist der 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

Hierfür gibt es 2 mögliche Lösungen.

Lösung 1: Da Options Framework Ihnen nur einen Uploader zur Verfügung stellt, gehe ich davon aus, dass Sie den Alternativtext auf der Seite WP admin manuell eingeben. Sie könnten eine Textoption für den Alternativtext erstellen, damit Sie sie in Ihrem benutzerdefinierten Optionsfeld eingeben können. Dann geben Sie diese Option einfach dort wieder, wo Sie sie benötigen:

$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');

Dann in deiner Vorlage:

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

OR

Lösung 2: (Diese beantwortet Ihre Frage direkter.)
a) Rufen Sie die Anhang-ID basierend auf der URL ab und b) verwenden Sie diese ID, um den entsprechenden Alternativtext abzurufen. (Teil A geht an 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);

Dann wiederholen Sie es nach Bedarf:

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

Ich weiß, dass diese Frage 6 Monate alt ist, aber selbst wenn das OP weitergegangen ist, hilft diese Antwort hoffentlich jemandem!

1
Joe