Intereting Posts
Отображать заголовки сообщений, соответствующие строке в сообщении Пользовательский размер изображения и размер CSS Где хранятся параметры темы и я могу экспортировать их для импорта в недавно установленные темы? Показывать заголовок, если не в iframe Получать сообщения с тегами всех типов сообщений Как я могу удалить эти строки изменения размера из окна комментариев? wp enqueue, как предотвратить дублирование, когда один и тот же скрипт зарегистрирован с разными дескрипторами Необходимо зафиксировать «ключевое слово», добавленное в конец сообщения, даже с «довольно постоянными», Как получить имя автора сообщения по его идентификатору внутри функции? Получить список всех ссылок на странице? Название не работает как ссылка Выполнить короткий код дважды на одной странице Как не показывать конкретный пост? Список сообщений только под категорией, исключить контент дочерней категории jQuery Validate: не удается переключить следующую панель на проверку формы

Как создать настраиваемый мета-ящик для добавления видео на mp4 на страницу?

Я купил код (как я php и jquery новичок) из нескольких разных сообщений, чтобы попытаться получить поле ввода URL-адреса видео mp4 в wordpress admin. Я смог загрузить медиа-загрузчик для отображения, выбрать файл и выбрать, чтобы заполнить поле формы URL-адресом в wordpress admin, однако при нажатии кнопки обновления URL-адрес исчезает. Я не могу на всю жизнь понять, что мне нужно сделать, чтобы отобразить этот URL после обновления страницы. Любая помощь будет принята с благодарностью! Вот код, который я добавил в мои functions.php (пожалуйста, не обращайте внимания на то, что id и т. Д. Называется «загрузить изображение», в отличие от видео. Я изменю все это, как только я его заработаю):

add_action('plugins_loaded', function(){ if($GLOBALS['pagenow']=='post.php'){ add_action('admin_print_scripts', 'my_admin_scripts'); add_action('admin_print_styles', 'my_admin_styles'); } }); function my_admin_scripts() { wp_enqueue_script('jquery'); wp_enqueue_script('media-upload'); wp_enqueue_script('thickbox'); } function my_admin_styles() { wp_enqueue_style('thickbox'); } add_action('add_meta_boxes', function(){ add_meta_box('my-metaboxx1', 'my-metaboxx1-title','func99999', get_post_types(),'normal'); }, 9); function func99999($post){ $attachment =get_post_meta($post->ID,'my-image-for-post', true); ?> 

Вот HTML для поля формы:

 <label for="upload_image"> <input id="upload_image" type="text" size="36" name="ad_image" value="<?php echo $attachment; ?>" /> <input id="upload_image_button" class="button" type="button" value="Upload Image" /> <br />Enter a URL or upload an image </label> 

Вот jQuery:

 <script> jQuery(document).ready(function($){ var custom_uploader; $('#upload_image_button').click(function(e) { e.preventDefault(); //If the uploader object has already been created, reopen the dialog if (custom_uploader) { custom_uploader.open(); return; } //Extend the wp.media object custom_uploader = wp.media.frames.file_frame = wp.media({ title: 'Choose Image', button: { text: 'Choose Image' }, multiple: false }); //When a file is selected, grab the URL and set it as the text field's value custom_uploader.on('select', function() { attachment = custom_uploader.state().get('selection').first().toJSON(); $('#upload_image').val(attachment.url); $('#upload_image').attr("src", attachment.url); }); //Open the uploader dialog custom_uploader.open(); }); }); </script> 

Вот что я использую, чтобы попытаться сохранить поле ввода:

 add_action( 'save_post', function ($post_id) { if (isset($_POST['upload_image'])){ update_post_meta($post_id, 'my-image-for-post',$_POST['upload_image']); } }); 

Возможно ли, что мне нужно изменить значение в этой строке или есть большая проблема?

 <input id="upload_image" type="text" size="36" name="ad_image" value="<?php echo $attachment; ?>" /> 

Solutions Collecting From Web of "Как создать настраиваемый мета-ящик для добавления видео на mp4 на страницу?"

Вы были близки. Это похоже на то, что я сделал недавно. Вот переписывание вашего кода, который работает. Кроме того, я изменил слово «изображение» на «видео» во всей функции, чтобы оно было точно названо. Наконец, я изменил ориентацию на панели администратора, чтобы этот мета-ящик появился над редактором содержимого. Первый:

 // add necessary scripts add_action('plugins_loaded', function(){ if($GLOBALS['pagenow']=='post.php'){ add_action('admin_print_scripts', 'my_admin_scripts'); add_action('admin_print_styles', 'my_admin_styles'); } }); function my_admin_scripts() { wp_enqueue_script('jquery'); wp_enqueue_script('media-upload'); wp_enqueue_script('thickbox'); } function my_admin_styles() { wp_enqueue_style('thickbox'); } 

Затем добавьте мета-поле, а также html для поля формы и кнопки загрузки:

 add_action('add_meta_boxes', function(){ add_meta_box('video-metabox', 'Add a Video','func99999', get_post_types(),'top', 'high'); }, 9); function func99999($post){ $url =get_post_meta($post->ID,'video-for-post', true); ?> <label for="video_URL"> <input id="video_URL" type="text" size="36" name="video_URL" value="<?php echo $url;?>" /> <input id="upload_video_button" class="button" type="button" value="Choose a Video" /> <br />Choose a video from the media library then, update your post/page to save it.<br /><br /> // This is to display the video in the admin area <video class="video" controls> <source src="<?php echo $url;?>" type="video/mp4" id="vidsrc"> Your browser does not support HTML5 video. </video> </label> 

Затем добавьте свой jquery (я добавил строку css, чтобы выделить некоторое пространство над мета-полем):

 <script> jQuery(document).ready(function($){ $('#video-metabox.postbox').css('margin-top','30px'); var custom_uploader; $('#upload_video_button').click(function(e) { e.preventDefault(); //If the uploader object has already been created, reopen the dialog if (custom_uploader) { custom_uploader.open(); return; } //Extend the wp.media object custom_uploader = wp.media.frames.file_frame = wp.media({ title: 'Choose a Video', button: { text: 'Choose a Video' }, multiple: false }); //When a file is selected, grab the URL and set it as the text field's value custom_uploader.on('select', function() { attachment = custom_uploader.state().get('selection').first().toJSON(); $('#video_URL').val(attachment.url); }); //Open the uploader dialog custom_uploader.open(); }); }); </script> 

Затем укажите функцию сохранения для URL:

 <?php } add_action( 'save_post', function ($post_id) { if (isset($_POST['video_URL'])){ update_post_meta($post_id, 'video-for-post',$_POST['video_URL']); } }); 

Наконец, добавьте функцию для перемещения мета-поля над редактором содержимого. Это создает местоположение, называемое top на вашей странице администратора, поэтому обязательно сопоставьте позицию и приоритет в аргументах, содержащихся в коде, чтобы добавить мета-окно в «верх» и установить приоритет «высокий». Если вы не хотите переместить мета-поле вверх, просто удалите эту функцию и измените код в аргументах мета-поля на что-то еще, например «нормальное» или «боковое», и измените приоритет с «высокого» на «по умолчанию», Вы также можете удалить строку jquery «$ ('# video-metabox.postbox»). Css (' margin-top ',' 30px '); для удаления места, если не поставить мета-поле над редактором содержимого:

 add_action('edit_form_after_title', function() { do_meta_boxes(get_current_screen(), 'top', $post); unset($wp_meta_boxes[get_post_type($post)]['top']); }); не add_action('edit_form_after_title', function() { do_meta_boxes(get_current_screen(), 'top', $post); unset($wp_meta_boxes[get_post_type($post)]['top']); }); 

Если вам нужно, чтобы этот мета-ящик отображался только на определенном шаблоне страницы, как я, вы можете просто изменить эту последнюю функцию на следующее:

 add_action('edit_form_after_title', function() { global $post, $wp_meta_boxes; if ( 'template-name.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) { do_meta_boxes(get_current_screen(), 'top', $post); unset($wp_meta_boxes[get_post_type($post)]['top']); } }); не add_action('edit_form_after_title', function() { global $post, $wp_meta_boxes; if ( 'template-name.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) { do_meta_boxes(get_current_screen(), 'top', $post); unset($wp_meta_boxes[get_post_type($post)]['top']); } });