VisualComposer使用vc_map()创建自己的快捷代码以返回简单图像

时间:2015-07-19 作者:webnuts.io

我正在开发的新主题中使用Visual Composer插件。我的问题是关于将短代码映射到Visual Composer数组。

当我尝试为图像创建自定义元素时,我遇到了一个问题。下面是我所做的:

我创建了一个php文件vc_shortcodes.php 用于我的参数数组。匹配的短代码位于functions.php.

对于阵列类型textarea_html 一切都很好,我可以看到我的文本,就像在前端一样。

现在,我正在尝试使用类型attach_image. 具体如下:

/Bild
add_action( \'vc_before_init\', \'webnuts_bild\' );
function webnuts_bild() {
    vc_map( array(
        "name" => __( "Bild", "my-text-domain" ),
        "base" => "image_url",
        "icon" => "icon-webnuts",
        \'admin_enqueue_css\' => array(\'/wp-content/themes/devdmbootstrap3-child/framework/css/admin-wn.css\' ),
        "class" => "wn-bild",
        "category" => __( "Content", "my-text-domain"),
        "params" => array(
            array(
                "type" => "attach_image",
                "holder" => "img",
                "class" => "",
                "heading" => __( "Hintergrundbild", "my-text-domain" ),
                "param_name" => "image_url",
                "value" => __( "", "my-text-domain" ),
                "description" => __( "Bitte wähle hier ein Bild aus oder lade eins hoch", "my-text-domain" )
            )
        )
    ) );
}
到目前为止,我可以在后端选择元素并将图像附加到它。但我想我在函数中出错了。php

我肯定我在functions.php... 在这里,我使用以下内容:

add_shortcode( \'image_url\', \'bild_func\' );
function bild_func( $atts ) {
    extract( shortcode_atts( array(
        \'image_url\' => \'Bild wird nicht richtig angezeigt\'
    ), $atts ) );

    return "<div class=\'bild-wrapper\'><img src=\'" . "{$image_url}" . "\'/></div>";
}
这是在浏览器中返回的内容:

<div class="bild-wrapper">
    <img src="9">
</div>
我必须更改什么才能在浏览器中显示图像?

3 个回复
SO网友:Raffael Lima

Visual Composer将图像ID添加到生成的短代码中。这为您提供了更大的图像大小灵活性。您可以这样使用它:

$imageSrc = wp_get_attachment_image_src($image_url, \'thumbnail\');
if( $imageSrc ) {
    echo \'<img src="\' . $imageSrc[0] . \'" />\';
}
Thethumbnail 参数可替换为medium 或其他有效的图像大小。这个if 子句用于验证图像是否确实存在(未删除)。

建议:重命名param_nameimage_id 因此,您在以后使用代码时不会感到困惑。

资料来源:https://developer.wordpress.org/reference/functions/wp_get_attachment_image_src/

SO网友:mlimon

通过已显示的附件id使用图像url。所以只要使用wp_get_attachment_image_src 获取附件url。例如:

add_shortcode( \'image_url\', \'bild_func\' );
function bild_func( $atts ) {
    extract( shortcode_atts( array(
        \'image_url\' => \'\'
    ), $atts ) );

    /* Let\'s get the URL from that image */
    if(isset($a[\'image_url\'])) {
       $image_url = wp_get_attachment_image_src( $a[\'image_url\'], \'full\' );;
     } else {
       $image_url = \'\'; // default image or something if you want.
     }

    return "<div class=\'bild-wrapper\'><img src=\'" . "{$image_url[0]}" . "\'/></div>";
}
希望它有意义!

SO网友:Philipp Schreiber

Visual Composer在提供图像id方面做得很好,因为您可以根据需要以最佳大小获取图像。你可以这样做:

// Replace \'thumbnail\' with any valid wordpress image size.
$imageSrc = wp_get_attachment_image_src($image_url, \'thumbnail\'); 
// Check if the image is still there
if( $imageSrc ) {
    echo \'<img src="\' . $imageSrc[0] . \'" />\';
}
您还可以将“vc\\u map”中的“param\\u name”重命名为“image\\u id”,以便稍后理解代码。

结束

相关推荐

Wordpress shortcode Issue!

您好,我开发了一个快捷码,根据分类术语列出自定义帖子类型中的帖子。但我有个问题。它显示来自所有术语的所有帖子,而不是被调用的术语代码如下:function course_listings( $atts ) { // Attributes extract( shortcode_atts( array( \'course_category\' => \'\', ), $atts ) ); // C