WordPress 3.5要编辑的附件字段和发送到编辑器的媒体

时间:2012-12-15 作者:user14550

在以前的版本中,我用一个简单的代码在媒体窗口中设置了一个新的检查字段

 function ab_prettyphoto_attachment_fields_to_edit( $form_fields, $post ) {

    $my_form_fields = array(
     \'ab_prettyphoto\' => array(
        \'label\'     => __(\'Automatic Zoom on click\', \'ab_prettyphoto\'),
        \'input\'     => \'html\',
        \'html\'      => "
        <input type=\'checkbox\' name=\'ab_prettyphoto-{$post->ID}\' id=\'ab_prettyphoto-{$post->ID}\' value=\'1\' />
        <label for=\'ab_prettyphoto-{$post->ID}\'>" . __(\'Enable zoom\', \'ab_prettyphoto\') . "</label>" )
);
if( $post->post_mime_type == \'image/jpeg\' OR  $post->post_mime_type == \'image/gif\' OR $post->post_mime_type == \'image/png\' OR $post->post_mime_type == \'image/tiff\')
  return array_merge( $form_fields, $my_form_fields );
else
  return $form_fields;
}
add_filter( \'attachment_fields_to_edit\', \'ab_prettyphoto_attachment_fields_to_edit\', 100, 2 );
然后我将检查的值发送给编辑器

function ab_prettyphoto_send_to_editor( $html, $send_id, $attachment ) {
 if( isset($_POST["ab_prettyphoto-$send_id"]) )
 $title=($_POST[\'attachments\'][$send_id][\'post_title\']);
  return str_replace(\'<a\', \'<a rel="prettyPhoto-img" title="\'.$title.\'"\', $html);
}
 else
  return $html;
 }

 add_filter( \'media_send_to_editor\', \'ab_prettyphoto_send_to_editor\', 66, 3 );
在新的WP35中,attachment\\u fields\\u to\\u edit起作用,但media\\u send\\u to\\u editor不起作用:在$\\u POST数组中,键“ab\\u prettypto-$send\\u id”不存在,我在Firebug中看到了一个wp ajax。单击复选框时调用php。ab\\u prettypoto\\u send\\u to\\u editor函数(由media\\u send\\u editor启动)中的$\\u SPOST数组的值为(例如值)

     Array
     (
      [nonce] => 125ece740a
      [attachment] => Array
      (
       [id] => 4
       [post_content] => 
       [post_excerpt] => 
       [url] => http://localhost:8888/wpn/wp-content/uploads/2012/12/fotohome.jpg
       [align] => left
       [image-size] => thumbnail
       [image_alt] => fotohome
      )

      [html] => <a href=\\"http://localhost:8888/wpn/wp-content/uploads/2012/1/fotohome.jpg\\"><img src width=\\"150\\" height=\\"150\\" alt=\\"fotohome\\" class=\\"wp-image-4 alignleft size-thumbnail\\" /></a>
      [post_id] => 1
      [action] => send-attachment-to-editor
  )
美元贴子【ab\\u pretthyphoto….】未发送

我在网上找到了一些关于这个问题的文档,但我没有

2 个回复
SO网友:ungestaltbar

因此,有些事情(现在)的效果不同。

一、 您注意到,当您单击复选框Wordpress向“wp\\u Ajax\\u save\\u attachment\\u compat()”发送一个Ajax请求以及一些表单数据时,如果您选中了复选框,这些信息将成为表单数据的一部分。

“wp\\u ajax\\u save\\u attachment\\u compat()”检查$\\u请求[\'attachments\']和$\\u请求[\'attachments\'][$id],如果它不存在,将失败。

这意味着您必须将输入字段更改为:

<input type=\'checkbox\' name=\'attachments[$post->ID][ab_prettyphoto]\' id=\'ab_prettyphoto-{$post->ID}\' value=\'1\' />
二。现在,这将通过“wp\\u ajax\\u save\\u attachment\\u compat”中的所有检查,并得到一个有用的过滤器:(这是ajax actions.php中的第1930行)

$post = apply_filters( \'attachment_fields_to_save\', $post, $attachment_data );
您可以使用此筛选器将字段数据作为post meta添加到附件中,稍后,您将检查此post meta是否存在,如果为true,则执行操作:

add_filter(\'attachment_fields_to_save\', \'wpse76219_add_meta\',10,2);
function wpse76219_add_meta($post, $attachment_data){

    // use this filter to add post meta if key exists or delete it if not
    if ( !empty($attachment_data[\'ab_prettyphoto\']) && $attachment_data[\'ab_prettyphoto\'] == \'1\' )
         update_post_meta($post[\'ID\'], \'ab_prettyphoto\', true);
    else
         delete_post_meta($post[\'ID\'], \'ab_prettyphoto\');

    // return $post in any case, things will break otherwise
    return $post;
}
III.最后一步,使用“media\\u send\\u to\\u editor”检查元数据是否存在,如果存在,请执行字符串操作,否则返回原始数据:

add_filter(\'media_send_to_editor\', \'wpse76219_send_to_editor\', 10,3);
function wpse76219_send_to_editor( $html, $id, $att)
{
    $is_set = get_post_meta($id,\'ab_prettyphoto\', true);
    if ($is_set and $is_set == \'1\')
        return str_replace(\'<a\', \'<a rel="prettyPhoto-img"\', $html);
    else
        return $html;
}

SO网友:webaware

您的isset()必须是:

isset($_POST[\'attachments\'][$send_id][\'ab_prettyphoto\'])

结束

相关推荐