2015-09-15 2 views
0

После PHP код показывает WordPress медиа-файлы на пользовательском переднем концеОбрезка Wordpress Сообщение Заголовок

<?php 
$args = array(
'post_type' => 'attachment', 
'numberposts' => -1, 
'post_status' => null, 
'author' => $current_user->ID, 
'post_parent' => $post->ID, 
'caller_get_posts'=> 1, 
); 
$attachments = get_posts($args); 
if ($attachments) { 
foreach ($attachments as $attachment) { 
echo '<tr><td><a href="'.wp_get_attachment_url($attachment->ID).'" rel="shadowbox" title="'.$attachment->post_excerpt.'">'; 
echo $attachment->_wp_attached_file; 
echo '</a>  
</td> 
} 
}?> 

Приведенный выше код показывает полное имя файла на переднем конце. Если кто-то загрузить sssssssssssssssssssssssssssssssssssssssssssss.txt, 123457xxxxxxxxxxxxxxx.gif или XLS, PDF, DOCX и все другие расширения с различными длинными именами файлов это создать беспорядок на мою тему. Может кто-нибудь, пожалуйста, поможет мне, как обрезать имя файла и показать что-то вроде sssssss ... ssss.txt xxxxxx ... xxxx.pdf или gif на лицевой стороне?

Я попробовал следующую функцию для конкретного файла в functions.php до сих пор нет изменений

$wp_attached_file = 'sssssssssssssssssssssssssssssssssssssssssssss.txt'; 
echo preg_replace('/(.{3}).*(\..{2,4})/', '$1...$2', $wp_attached_file); 

и

$attachment = $wp_attached_file; 
echo preg_replace('/(.{3}).*(\..{2,4})/', '$1...$2', $wp_attached_file); 

В настоящее время она работает, я заменяю следующие строки

echo ($attachment->_wp_attached_file); 

с

echo preg_replace('/(.{15}).*(.{5})(\..{2,4})/', '$1...$2$3', $attachment->_wp_attached_file); 
+0

проверки настройки, так что пользователи не могут загрузить что-то подобное? –

+0

Вы можете обрезать вывод с помощью регулярного выражения https://regex101.com/r/aR1vJ2/2. – chris85

+0

Я не думаю, что регулярное выражение является подходящим решением для проверки или дезинфекции ввода пользователя. –

ответ

0

Вы можете использовать регулярное выражение как

/(.{3}).*(\..{2,4})/ 

Это захватывает первые три символа, (.{3}).
Тогда игнорирует все, .*
До последнего периода и в последующие 2-4 символов (для ai, mpeg, jpg может фильтровать, что 3, если она всегда будет 3), \..{2,4}. Бит .{2,4} - любой символ длиной 2-4 строки.

PHP Использование:

$wp_attached_file = 'sssssssssssssssssssssssssssssssssssssssssssss.txt'; 
echo preg_replace('/(.{3}).*(\..{2,4})/', '$1...$2', $wp_attached_file); 

Выход:

sss....txt 

Regex101 Демо: https://regex101.com/r/aR1vJ2/2

+0

Пользователи продолжают загружать файлы с разными длинными именами, например sssssssssssssssssxxxxxxxxxxx.txt, abcdefghigklmnoxxxxxxxxxxx.pdf, 123456789abcdexxxxxxxxxxx.jpg и так далее. Я добавил выше функции в function.php, но он не работает, даже я пытался с именем ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssexpress – jugnu

+0

Что он делает? Обновите свой вопрос с помощью текущего использования. – chris85

+0

Вопрос обновлен, пожалуйста, проверьте еще раз. – jugnu

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