web-dev-qa-db-ja.com

Wordpress Options Framework Pluginを使用して画像添付ファイルのアップロードからAltテキストを抽出する方法を教えてください。

私は現在カスタムWordPressテーマを作成していて、私のクライアント用のカスタムオプションページを作成するために WordPressオプションフレームワークプラグイン を使用しています。画像アップロードオプションを簡単に作成でき、そのアップロードした画像を自分のテーマのフレームワーク内の目的の場所に表示することができます。私のオプションファイル(プラグインが動作するのに必要です)の中で、私がイメージアップロード機能のために作成した配列は以下のコードです:

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

それから、テーマの中で、私はそのアップロードされた画像を以下のコードで呼び出します:

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

私が述べたように、これはすべて完璧に機能します。しかし、私が理解できないのは、画像アップロードダイアログからAltテキストを抽出し、それをテーマのimg srcタグ内にエコーとして含める方法です。テーマ内にエコーするものを作成するために上記の配列に追加できるものはありますか?

[更新]
ファイル全体でテキストof_get_optionを検索すると、ファイルが1つ見つかります。これはコードです:

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

これには2つの解決策があります。

解決策1:Options Frameworkではアップローダしか提供されていないので、WP admin側で代替テキストを手動で入力していると思います。あなたは 可能性があります あなたがあなたのカスタムオプションパネルからそれを入力することができるように代替テキストのためのテキストオプションを作成します。それからあなたがそれを必要とするところにそのオプションを単にエコーする:

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

それからあなたのテンプレートで:

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

OR

解決策2:(これはもっと直接的にあなたの質問に答えます。)
a)URLに基​​づいて添付ファイルIDを取得し、b)対応する代替テキストを取得するためにそのIDを使用します。 (パートaのクレジットはPhilip Newcomerに行きます: /

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

その後、必要に応じてそれをエコーアウトします。

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

私はこの質問が生後6ヶ月であることを知っていますが、たとえOPが進んでも、この答えが誰かに役立つことを願っています!

1
Joe