将自定义Metabox添加到媒体库自定义窗口小部件

时间:2020-01-11 作者:sialfa

我正在实现一个自定义小部件来创建徽标滑块。最初的代码运行得很好,但当我在附件屏幕中添加了一个元盒以允许用户向图像添加外部链接时,我遇到了一些问题。我想做的是添加元盒,保存它的值,当小部件加载到前端时,检索用户为每个图像添加的链接。这些图像没有附加到任何帖子,目前我可以看到新的元盒,但只有当用户单击媒体库中每个图像的编辑链接时,才可以编辑它。我更希望看到媒体库主选择屏幕上的框。我也无法获取字段值,我认为这是因为代码中没有加载图像ID。

public function initMetabox()
  {
    add_meta_box(
      \'image_link_box\',
      __(\'Link image to url\'),
      array($this, \'renderMetabox\'),
      \'attachment\'
    );
  }

  public function renderMetabox( $post )
  {
    $url = get_post_meta( $post->ID, \'_image_link_url\', true );
    ?>
    <label for="image-link"><?php _e(\'Image Link\'); ?></label>
    <input type="text" name="image_link" id="image-link" value="<?php echo $url; ?>" class="postbox">
    <?php
  }

  public function saveLink( $post_id )
  {
    if( in_array( \'image_link\', $_POST ) ){
      update_post_meta(
        $post_id,
        \'_image_link_url\',
        $_POST[\'image_link\']
      );
    }
  }

  public function widget( $args, $instance )
  {
    $images = explode( \',\', $instance[\'images\'] );
    $image_link = get_post_meta( $post->ID, \'_image_link_url\', true );

    ob_start();
    ?>
    <div class="swiper-container logo-slider" id="featured-logo-slider">
      <div class="swiper-wrapper" id="featured-logo">
        <?php foreach( $images as $image ): ?>
          <?php foreach( $image_link as $link ): ?>
            <a href="<?php echo $link; ?>"><img class="swiper-slide" src="<?php echo $image; ?>" alt="" width="100" id="client-logo"/></a>
          <?php endforeach; ?>
        <?php endforeach; ?>
      </div>
      <div class="swiper-scrollbar"></div>
    </div>
    <?php
    echo ob_get_clean();
  }

图像链接的foreach循环将产生错误Invalid argument supplied... 并且$post->ID变量不可用。如有任何建议,将不胜感激

1 个回复
SO网友:Andrea Somovigo

看来global $post; 在您的function widget(){}