如何在WordPress tinymce编辑器中将帖子ID附加到图像链接

时间:2016-04-02 作者:metatron

我试图在使用Add Media 按钮我找到了一种检索帖子id的方法,以及如何通过image_send_to_editor 滤器

为了定制我在下面的帖子中找到的图像链接代码WordPress forums:

function filter_image_send_to_editor($html, $id, $caption, $title, $align, $url, $size, $alt) {
  $html = sprintf(\'<a class="fancybox-img" href="%1$s"><img alt="%2$s" src="%1$s" /></a>\', esc_attr(esc_url($url)), esc_attr($title));

  return $html;
}

add_filter(\'image_send_to_editor\', \'filter_image_send_to_editor\', 10, 8);
获取帖子id的代码如下:

global $post;
$id = $post->ID;
现在,当我合并2时,不会显示帖子ID。我想输出前缀为的帖子IDlightbox- 但当我查看生成的代码时,rel属性如下所示:

rel="lightbox-"
似乎我无法在filter函数中检索post ID。我在上述过滤器功能中使用的故障代码是:

  global $post;
  $id = $post->ID;

  $html = sprintf(\'<a class="fancybox-img" href="%1$s" rel="lightbox-%3$s"><img alt="%2$s" src="%1$s" /></a>\', esc_attr(esc_url($url)), esc_attr($title), esc_attr($id));

  return $html;
您可能会问,为什么我要将帖子ID附加到图像链接?嗯,我正在构建一个页面,在一个长页面上显示几个帖子(及其图片)。我附加了一个灯箱插件,但我希望每个帖子都有一个单独的灯箱。我使用的lightbox插件按rel属性对图像进行分组。我试图使rel属性如下所示:rel="lightbox-972" 其中972是post id。

作为一种解决方法,我使用javascript使灯箱在每篇文章的基础上工作,但如果能了解如何在没有js干扰的情况下实现这一点,并了解为什么这不能按预期工作,那将是一件好事。。。

1 个回复
最合适的回答,由SO网友:Sumit 整理而成

你说得对global $post 未在函数内设置。因为它是Ajax回调,没有循环。然而,Ajax调用正在发送post ID,您可以通过$_POST[\'post_id\'] 函数内部。

Please note: 在回调函数参数中$url 不是图像URL。它是锚定标记URL。所以,如果有人在内容中插入图像时选择了无、附件页或自定义URL,那么您的图像将被破坏。所以请考虑使用wp_get_attachment_image_src() 而不是URL。

那么完整的函数将如下所示

function filter_image_send_to_editor($html, $id, $caption, $title, $align, $url, $size, $alt) {
    $post_id = isset($_POST[\'post_id\']) ? $_POST[\'post_id\'] : 0;
    $image_url = wp_get_attachment_image_src($id, $size);

    return sprintf(\'<a class="fancybox-img" href="%1$s" rel="lightbox-%3$s"><img alt="%2$s" src="%1$s" /></a>\', $image_url[0], $alt, esc_attr($post_id));
}
add_filter(\'image_send_to_editor\', \'filter_image_send_to_editor\', 10, 8);