【问题标题】:How to create an unique id for each attachment image in wordpress?如何为wordpress中的每个附件图像创建一个唯一的ID?
【发布时间】:2018-03-30 17:34:32
【问题描述】:

我试图在 wordpress 中创建一个用于拇指旋转的函数我得到了一切正常但我堆栈在我的 js 文件中所需的唯一 id 上。

所以这是我的 php 函数,但它不会随机显示不同的 id,它对所有创建的缩略图始终显示相同的 id。

function thumb_rotation(){
    global $post;
    $uniqueID = 'thumb_';
    $characters = array_merge(range('a','z'), range('0','9'));
    for ($i = 0; $i < 6; $i++) {
    $rand = mt_rand(0, count($characters)-1);
    $uniqueID .= $characters[$rand];
    }
        $images = get_post_meta( $post->ID, 'image_rotator', true );
        $size = 'thumb-video';
        if( $images ):
            foreach( $images as $image ):
                        echo '<span class="mb">';
              echo wp_get_attachment_image($image, $size, false, array('title' => '', 'alt' => '', 'class' => 'mvThumb', 'id' => $uniqueID));
                        echo '</span>';
                endforeach;
            endif;
}

知道我在这里做错了什么吗? 谢谢!

【问题讨论】:

  • 是否必须是int,如果不是可以使用uniqid($prefix, $entropy)。尽管php.net/manual/en/function.uniqid.php 不是 100% 的受让人唯一性,但mt_rand 也不是,这与现在的rand 相同(PHP v7.1)
  • 我在 localhot 有 7.0 并且可以工作,但我不确定 7.1 谢谢我会试试的
  • 我在本地有 5.3+(5.3、5.4、5.5、5.6、7、7.1、7.2),但我也有 5 个浏览器,Firefox、Chrome、IE、Edge、Safari,但我也有 Mysql、MongoDB、Cassandra、Sphinx、MSSQL、bla bla... MariaDB。也不要忘记 PHP、Python、Pearl、.Net、Java。伙计,我有很多东西。对不起。
  • 我更改了 mt_rand ro rand,因为你建议它也可以工作,但我要为相同的代码打开一个新主题,因为我无法弄清楚。
  • 您已经有了自己的唯一 ID,$image 看起来这应该是来自 worpress 数据库的图像 ID。 function wp_get_attachment_image($attachment_id, ...) 所以我要做的就是取那个数字,然后添加 "image_{$image)" Javascript ID 不能/不应该以数字开头。所以这就像image_407image_679 等。基于图像的主键。

标签: php wordpress unique-id


【解决方案1】:

您的 id 生成器在图像循环之外。

【讨论】:

  • :) 天哪,谢谢,需要等待 7 分钟才能设置此问题已解决,您是正确的,谢谢,抱歉发布此问题是一个大错误。
【解决方案2】:

看起来你已经有一个 UniqueID,你没有意识到它。

至少我认为,我对 wordpress 的工作并不多,而是对这个 WP 函数的定义。

 wp_get_attachment_image( int $attachment_id, string|array $size = 'thumbnail', bool $icon = false, string|array $attr = '' )

看起来第一个参数是数据库中图像的 ID。在你的代码中你有这个

  echo wp_get_attachment_image($image,  ..)

所以,如果我的判断是正确的,那么 $image 应该是一个整数,它应该是图像的主键,在设计上它已经是一个唯一的 ID。

现在要提到的一件事是在 Javascript/HTML 元素 ID 中不应以数字开头。我不确定这是否仍然正确,但我记得前段时间是这样的(也许我最后一次检查是在 8 年前,哈哈),所以我从不以数字开头。所以我建议只是给那个ID加上前缀。像这样:

  $imageID = "image_{$image}";

因此,如果$image 的值为 345,它也是数据库中的 Pkey,那么您的元素 ID 将为 image_345。并且因为这是主键,所以没有其他图像将具有相同的 ID(除非它是相同的图像)。也就是说,如果我以正确的方式思考它。正如我所说,我不会过多地研究 wordpress。

我们有一些 wordpress 网站,但这对我们的非程序员内容创作者来说更方便。然后我们的任何网站需要在编程方面进行繁重的工作,我们只需使用 wordpress 模板前端,在后端使用 Wp 页眉和页脚。然后通过 slug 从帖子中提取我们想要的后端内容,并将其与我们自定义的 CodeIgniter 设置混合。所以我们的大部分编程都是在 wordpress 之外完成的,但如果有意义的话,仍然以 wordpress 为主题。

对不起,我缺乏 wordpress 能力的理由比它应该的要长一点。我们发现要么我们几乎不需要自定义代码,要么我们需要大量的代码。在这种情况下,在 WP 之外执行此操作要容易得多。

【讨论】:

  • 它已解决,但谢谢您的回答,但它会为每个缩略图生成一个随机 ID,现在我的错误是因为它在 foreach 循环之外。现在一切都很好。谢谢!
  • 随机性并不能保证唯一性。如果$image 是主键,您绝对应该使用它,因为它的100% 将是唯一的。至于你接受什么答案,坦率地说,我不太关心答案点(AKA。即使你选择使用这个,你也可以让另一个接受)。但从功能和鲁棒性方面来看,使用 PKey 会更胜一筹。
猜你喜欢
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多