Я создаю флажок во всплывающем окне «Добавить медиа», чтобы добавить HTML к выводу $ html при вставке изображения.
Это работает нормально. Однако, как только я добавил изображение с установленным флажком. Если я попытаюсь добавить его еще раз и снять флажок, он не будет регистрироваться или сохранять изменения.
Таким образом, всегда выводить измененное изображение, а не возвращаться обратно к WP по умолчанию, если флажок снят.
Плюс флажок после того, как я выбрал его и вставил на страницу, останется предварительно выбранным каждый раз, когда я выбираю это изображение.
Как сделать функцию снятия флажка, как и следовало ожидать?
Очень ценю помощь. Спасибо
class media_uploader_cb{
function __construct(){
// attach our function to the correct hook
add_filter('attachment_fields_to_edit', array( $this, 'attachment_fields_to_edit' ), 10, 2);
//save attachment field
add_filter( 'attachment_fields_to_save', array( $this, 'attachment_fields_to_save' ), 10, 2);
//add custom css class
add_filter( 'media_send_to_editor', array( $this, 'media_send_to_editor' ), 10, 2 );
}
/**
* Adding our custom checkbox field to the $form_fields array
*
* @param array $form_fields
* @param object $post
* @return array
*/
function attachment_fields_to_edit($form_fields, $post) {
$form_fields['add_class']['label'] = __("Add SEO Data");
$form_fields['add_class']['input'] = 'html';
$form_fields['add_class']['html'] = '<input type="checkbox" value="1" name="attachments['.$post->ID.'][add_class]" id="attachments['.$post->ID.'][add_class]" '.checked( 1, get_post_meta($post->ID, 'add_class', true), false ).'/>';
return $form_fields;
}/**
* Saving our custom checkbox field
* @param array $post
* @param array $attachment
* @return array
*/
function attachment_fields_to_save($post, $attachment) {
if( isset($attachment['add_class']) ){
update_post_meta($post['ID'], 'add_class', $attachment['add_class']);
}
return $post;
}
/**
* Adding our custom css class based on checkbox field
*
* @param string $html
* @param int $id
* @return string
*/
function media_send_to_editor( $html, $id ) {
//only add class if the checkbox was checked
if ( 1 == (int)get_post_meta($id, 'add_class', true) ){
//change this to whatever you want
$seo_data_to_add = 'custom="HTML Output Here""';
// THIS SHOULD BE THE CHECKBOX
get_post_meta($id, 'add_class', true);
$attachment_title = get_the_title($id);
$title = 'title="'.$attachment_title .' by '. get_option('ews_opt_branding') .'"';
$html = str_replace('<img', '<img '.$title.' '.$seo_data_to_add.'', $html);
}
return $html;
}}
new media_uploader_cb();
Получил некоторую помощь от другого форума. Это подстегнуло мозговой штурм в офисе, и мы нашли решение. Не уверен, что это лучший способ решить проблему, но он работает так, как ожидалось. Я добавил этот код:
delete_post_meta($id, 'add_class', true);
чуть выше:
return $html;
в конце последней функции и все ведет себя правильно. Если есть лучшее решение, пожалуйста, дайте мне знать.
Других решений пока нет …