2010-06-13 2 views
1

У меня есть слово пресс тема с диалогом тема ОпцииWordpress СМИ закачаны варианты темы

Я хотел бы добавить функцию для загрузки логотипа через страницу настроек темы, а затем отображать его на переднем конце в как логотип. Как бы я это сделал. Я хотел бы использовать загружаемый материал wordpress, но если это невозможно или имеется альтернатива, то я ценю это также.

ответ

0

В Wordpress 3 это невозможно. Wordpress загружает файл media-upload.php в iframe, а форма, которая обычно содержит удаление и вставку в сообщение, и используется как миниатюра сообщения, - это get_media_item() в media.php по строке 1156.

К сожалению, пока можно вытащить медиа-загрузчик, он не может быть изменен с помощью крючков и фильтров, чтобы вставить дополнительные кнопки или ссылки без изменения основных файлов wordpress.

0

Я не являюсь пользователем/разработчиком Wordpress, но, как идея, можно было бы написать вашу собственную страницу php, чтобы загрузить этот файл в нужное место и вставить эту страницу в качестве iFrame в вашем диалоговом окне?

+0

Возможно, это означало бы более длительное время загрузки, менее портативный веб-сайт и дополнительную проблему безопасности, так как мой новый код должен быть столь же безопасным, как и исходный код Wordpress.В любом случае, я хотел бы сохранить все внутри темы wordpress php, даже если он не использует официальный загрузчик wordpress. –

1

Я нашел способ передать URL-адрес WP Media Uploader в текстовое поле, а затем сохранил идентификационную информацию из текстового поля. Входные поля:

<input class="uploading" id="<?php echo $value['id']; ?>_btn" type="button" name="<?php echo $value['id']; ?>" value="Upload File" /> 
<input class="set_item_text" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="text" value="<?php if (get_settings($value['id']) != "") { echo get_settings($value['id']); } else { echo $value['std']; } ?>" /> 

И для моего JQuery:

jQuery(document).ready(function($) { 

$('input.uploading').click(function() { 
    formfield = jQuery(this).attr('name'); 
    tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true'); 
    return false; 
}); 

window.send_to_editor = function(html) { 
    imgurl = jQuery('img',html).attr('src'); 
    jQuery('#'+formfield).val(imgurl); 
    tb_remove(); 
} 

}); 

Имя поля от кнопки такой же, как идентификатор из окна Text - связывает два и передает информацию легко. Остальное стандартно в functions.php для того, чтобы ваш скриптовый

function mytheme_add_style() { 
    $file_dir=get_bloginfo('template_directory'); 
    wp_enqueue_script("functionsJS", $file_dir."/functions/functions.js", false, "1.0"); 
    wp_enqueue_style('thickbox'); 
    wp_enqueue_script('media-upload'); 
    wp_enqueue_script('thickbox'); 
} 

add_action('admin_init', 'mytheme_add_style'); 
3

Это можно использовать встроенный в WordPress Медиа Загрузить в вашей теме функций. Я успешно включил его во многие темы и в самых разных целях.

Ниже приведена простая версия (у меня есть другая версия, которая поддерживает несколько полей загрузки изображений на одной странице).

В файла JavaScript (сохранить как media_upload.js в каталоге темы):

var formfield, tbframe_interval; 
jQuery(document).ready(function() { 
    // Bind the click to your upload image button 
    jQuery('.upload_image_button').click(function() { 
      // Which gets the name of the input field 
      formfield = '.image_input'; 
      tb_show('', 'media-upload.php?post_id=0&#038;type=image&#038;TB_iframe=1'); 
      // Set an interval to change the button text from Insert Into Post 
      tbframe_interval = setInterval(function() { 
       jQuery('#TB_iframeContent').contents().find('.savesend .button').val('Use This Image'); 
       }, 2000); 
      return false; 
    }); 
    // Bind event to the focus of the input field to trigger the media upload 
    jQuery('.image_input').focus(function() { 
     jQuery('.upload_image_button').trigger("click"); 
    }); 
    // Bind click event to the delete button if it is already displayed 
    jQuery("#preview_image .delete").click(function() {removeImage();}); 
    // Get original send to editor because we are about to override it 
    window.original_send_to_editor = window.send_to_editor; 
    // Custom function to override where media upload sends data 
    window.send_to_editor = function(html) { 
     // If formfield set, means we're using our custom function 
     if (formfield) { 
       // Have to add tags around html in order to be sure finds img src 
       imgurl = jQuery('img','<p>' + html + '</p>').attr('src'); 
       // Send the img url to the input field 
       jQuery(formfield).val(imgurl); 
       // Remove the media upload box 
       tb_remove(); 
       // Call our function to display image 
       renderImage(imgurl); 
       // Clear the formfield 
       formfield = ""; 
       // Clear the interval that changes the button name 
       clearInterval(tbframe_interval); 
      // If not, use the original function 
      } else { 
       window.original_send_to_editor(html); 
      } 
     } 
}); 

// function to load the image url into the correct input box 
function renderImage(img) { 
    // Load the image into the div we set up to display it 
    // Also throws in a delete button to remove the image 
    jQuery("#preview_image").html('<img src="' + img + '" alt="" /><a class="delete" title="Remove Image" href="javascript:void(0);">X</a>'); 
    // Bind the click to the delete in order to remove the image 
    jQuery("#preview_image .delete").click(function() {removeImage();}); 
} 

// Function we call when the delete button is clicked 
function removeImage() { 
    jQuery("#preview_image").html(''); 
    jQuery('.image_input').val(''); 
} 

В файле functions.php вашей темы, вы должны епдиеие необходимые сценарии (в том числе один из приведенных выше) путем создания функция и использование WP крюки для вызова функции на администратора междунар:

function my_theme_media_script_load() { 
    // Load the necessary WP scripts 
    wp_enqueue_script('media-upload'); 
    wp_enqueue_script('thickbox'); 
    // Register our custom script 
    wp_register_script('my-custom-media-upload', get_bloginfo("template_url") . 
     '/javascript/media_upload.js', array('jquery','media-upload','thickbox')); 
    // Load our custom script 
    wp_enqueue_script('my-custom-media-upload'); 
    // Load the WP style for the media upload thickbox 
    wp_enqueue_style('thickbox'); 
} 

add_action ('admin_init', 'my_theme_media_script_load'); 

и, наконец, где вы хотите загружать медиа поля ввода и просмотра появляться, используйте следующий HTML:

<?php 
    // Provide your own code to load the image url into the variable $image 
    // Then prepare a couple of variables for displaying the image and delete in the html 
    $preview = ($image) ? '<img src="' . $image . '" alt="" />' : ''; 
    $delete_button = ($image) ? '<a class="delete" href="javascript:void(0);" title="Remove Image"><img src="' . get_bloginfo("template_url") . '/images/delete.png" alt="X" /></a>' : ''; 
?> 
<div class="media"> 
    <label for="acg_user_photo">Image:</label> 
    <input type="text" class="image_input" id="image_input" name="image_upload" value="<?php echo $image; ?>" /> 
    <input type="button" class="upload_image_button" name="image_button" value="Upload" /> 
    <div class="preview" id="preview_image"> 
     <?php echo $delete_button; ?> 
     <p id="preview"><?php echo $preview; ?></p> 
    </div> 
</div> 

Это зависит от вас, чтобы предоставить CSS, чтобы он выглядел хорошо.

Также обратите внимание, что это должно быть только когда-либо сделанное на стороне администратора. Вы не можете доверять среднему посетителю, чтобы загружать что-либо на ваш сайт.

+0

Ты потрясающий :) –

Смежные вопросы