我试图在使用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。我想输出前缀为的帖子ID
lightbox-
但当我查看生成的代码时,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干扰的情况下实现这一点,并了解为什么这不能按预期工作,那将是一件好事。。。
最合适的回答,由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);