-2

我创建了一个扩展WPBakery插件的自定义元素。这个自定义元素将是一个图像滑块。用户从单个后端选项中选择他们想要的图像数量,然后图像将被分解(explode()),返回并显示图像 - 无论如何都是这个想法。

但是,我无法弄清楚为什么我的图像没有被退回?周围的内容正在前端呈现,但是这些图像所在的lisrc它们是空的。另外,我在后端选择了三张图像,但li正在渲染一张。

这是完整的标记:

<?php 
if ( ! defined( 'ABSPATH' ) ) {
    die( '-1' );
}

class vcImageCarousel extends WPBakeryShortCode {

    function __construct() {
        add_action( 'init', array( $this, 'vc_imageCarousel_mapping' ) );
        add_shortcode( 'vc_imageCarousel', array( $this, 'vc_imageCarousel_html' ) );
    }

    vc_map( 
        array(
            'name' => __('Image Carousel', 'text-domain'),
            'base' => 'vc_imageCarousel',
            'description' => __('Image Carousel', 'text-domain'), 
            'params' => array(
                array(
                    'type' => 'attach_images',
                    'heading' => esc_html__("Images"),
                    'param_name' => 'image',
                    'value' => esc_html__(''),
                    'admin_label' => false,
                    'weight' => 0,
                    'group' => __( 'Content', 'my-text-domain' ),
                )  
            )
        )
    );

    public function vc_imageCarousel_html( $atts ) {

        extract(
            shortcode_atts(
                array(
                    'id'                    => '',
                    'class'                 => '',
                ), 
                $atts
            )
        );

        // map background image attributes
        $image = shortcode_atts(
            array(
                'image' => 'image',
            ), 
            $atts 
        );

        $image_ids=explode(',',$image['image']);


        $result = "<div class='imageCarousel'>";
        $result .= "<div class='imageCarousel__container justify-content-center'>";
        $result .= "<ul>";

        foreach( $image_ids as $image_id ){
            $result .='<li>';
            $result .= var_dump($image_id);
            $result .= wp_get_attachment_image_src( $image_id, 'full' );
            $result .='</li>';
        }

        $result .= "</ul>";
        $result .= "</div>";
        $result .= "</div>";

        return $result;


    }

}

new vcImageCarousel(); ?>

一个var_dump($image_id)返回string(5) "image"

4

3 回答 3

0

var_dump函数不返回任何内容,而是将其结果直接输出到浏览器,因此该语句$result .= var_dump($image_id);不执行任何操作。

还有另一个问题:wp_get_attachment_image_src返回布尔值false或数组。因此,如果返回一个数组,您将有一个数组到字符串的隐式转换,这至少会导致通知。

作为初学者,我建议foreach像这样重构你的循环:

foreach( $image_ids as $image_id ){
        $result .='<li>';
        $result .= $image_id;
        $attachmentImage = wp_get_attachment_image_src( $image_id, 'full' );
        $result .= $attachmentImage ? $attachmentImage['url'] : '';
        $result .='</li>';
    }
于 2019-07-29T13:33:47.687 回答
0

如果您绝对想将结果分配var_dump给您的$result变量,您可以使用输出缓冲,如下所示:

ob_start();
var_dump($image_id);
$result .= ob_get_clean();

ob_start函数开始缓冲输出,同时ob_get_clean获取输出缓冲区的内容,然后将其删除。

于 2019-07-30T08:08:30.097 回答
0

我在我的一个项目中使用它来记录日志。此函数将 var_dump 内容返回到字符串中:

function varDumpToString($stuff = null) {
  ob_start();
  var_dump($stuff);
  $ret = ob_get_contents();
  ob_end_clean();
  return $ret;
}

所以只需替换这个:

$result .= var_dump($image_id);

有了这个

$result .= varDumpToString($image_id);
于 2019-08-02T18:12:45.160 回答