如何通过WordPress选项框架插件从上传的图像附件中提取Alt文本?

时间:2012-12-06 作者:Brandon

我目前正在创建一个自定义WordPress主题,并使用WordPress Options Framework plugin 为我的客户创建自定义选项页。我能够轻松创建一个图像上传选项,并可以将上传的图像显示在我的主题框架内我想要显示的位置。在我的选项文件(插件工作所需)中,我为图像上载功能创建的数组是以下代码:

$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标记的回音。我可以在上面的数组中添加一些东西来创建主题中的回声吗?

[update]
如果我搜索文本of_get_option 在所有文件中,我找到了一个文件。代码如下:

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;

1 个回复
SO网友:Joe

有两种可能的解决方案。

Solution 1: 由于Options Framework只提供上载程序,因此我假设您是在WP admin端手动输入alt文本。您可以为alt文本创建一个文本选项,以便从自定义选项面板中输入。然后只需在需要的地方重复该选项:

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

Solution 2: (这更直接地回答了您的问题。)
a)根据URL检索附件ID,b)使用该ID检索相应的alt文本。(a部分归功于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);
然后根据需要进行回声输出:

<img src="<?php echo of_get_option(\'header_overlay\'); ?>" alt="<?php echo $alt_text; ?>">
我知道这个问题已经问了6个月了,但即使OP已经开始了,希望这个答案能帮助一些人!

结束

相关推荐

Bypassing a Form Options

情况是这样的。我正在使用一个插件,虽然它(一半)工作正常,但我无法访问设置页面。该插件是从Youtube和其他视频网站获取缩略图,但问题是,出于审美原因,我必须使用特定的“特色”框嵌入视频。如果我按照“通常的方式”将视频放在帖子中,效果会很好。我做了一些研究,显然插件接受自定义字段值(这可以解决我的问题),但我必须在其设置页面中输入自定义字段名称。由于某种原因,我无法访问它,只能得到一个空白页。我认为这可能是插件冲突,但我尝试过激活和停用其他插件,但仍然没有成功。我查看代码,发现这部分:<th sc