【问题标题】:Get last URL returned in Array获取数组中返回的最后一个 URL
【发布时间】:2012-10-15 16:25:37
【问题描述】:

我正在使用表单字段让用户编辑帖子并上传个人资料图片。

一旦他们上传了个人资料图片,就会将一个 URL 传递到一个名为“logo_header”的隐藏自定义文本字段。我在 PHP 模板中阅读了这个 URL,并使用它来显示图像,如下所示。

<?php $logo = get_post_meta($post->ID, 'logo_header', true); ?>

<div class="profileLogo"><img src="<?php echo $logo; ?>" /></div>

我的问题是当用户决定更新他们的照片(基本上是更改照片)时,新 URL 只是添加到当前 URL 的末尾,我猜这会创建一个数组。所以它会像

http://example.com/myprofile.jpg, http://example.com/myprofile2.jpg

显然图片src不能使用数组,它需要1个URL。

我使用重力表单上传文件按钮来编辑帖子并上传图片。没有删除已经存在的当前图像的选项(这是另一个问题:()所以用户只得到一个上传按钮。

我的问题是

如何始终选择添加到“logo_header”字段的最后一个 URL?

【问题讨论】:

  • 你在 $logo 中得到了什么?数组?
  • 好问题,是的,我返回了“数组”
  • if(is_scalar($post->ID)) { $logo=$post->ID; } if(is_array($post->ID)) { $logo=array_pop($post->ID); }

标签: php forms wordpress


【解决方案1】:

试试$logo = array_pop(get_post_meta($post-&gt;ID, 'logo_header', false));

使用 false 参数,您将获得所有元字段的数组。我们只能假设它们会以正确的顺序插入和返回,因此 array_pop() 将拉出列表中的最后一个。

编辑 - 对于您并不总是拥有多个徽标的情况,您应该使用这个:

$logo = get_post_meta($post->ID, 'logo_header', false);
$logo = is_array($logo) ? array_pop($logo) : $logo;

【讨论】:

  • 其实我说得太早了。该解决方案不允许在开始时可能只有 1 个 url 而不是数组,因此该字段将等于..www.example.com 然后当我添加图像时您的代码有效,但是当我只有1 图像它没有。您可以针对这种情况更新它吗?
【解决方案2】:
$logo = get_post_meta($post->ID, 'logo_header', true);

$logoImgSrc = is_array($logo) ? end($logo) : $logo;

<div class="profileLogo">
    <img src="<?php echo $logoImgSrc ; ?>" />
</div>

【讨论】:

    【解决方案3】:

    我认为您不应该使用隐藏文本字段,而是隐藏输入字段,当用户选择新图像(jQuery 中的文件 change() 函数)时,将隐藏字段值设置为新 url,替换旧的,然后发布隐藏字段名称。

    编辑可能有帮助:

    $("#browse_box").change(function() {
        $("#hidden_field").val($(this).val());
    });
    

    凭记忆打字,但这是基本思路。

    【讨论】:

    • 对不起,我的意思是隐藏输入“文本字段”——我将其隐藏,因为用户不知道如何处理它,因为它只是一个放在其中的 URL,所以我可以抓住它。如果您认为我可以用您建议的值替换该当前值,那将是很棒的,但我不知道如何执行您的建议,还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2016-06-27
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多