20 полезных функций, которые пригодятся при разработке Вордпресс тем

23 июля 2019 1

Наверное, каждый разработчик Вордпресс тем имеет собственный набор дежурных функций и использует их из проекта в проект. Наш индийский коллега Sanjay Bhowmick тоже собрал такой наборчик и поделился им с общественностью. Копируем, сохраняем, благодарим.

Продающие лендинги

Понятно, что у каждого разработчика свой подход, свое видение, какие-то традиции, и, разумеется, свой боевой комплект функций, классов и прочего. Но я уверен, что-нибудь для себя вы обязательно найдете. А для новичков это безусловный мастхев.

Список всех функций:

  1. Зарегистрировать навигацию, меню
  2. Очистить дефолтную разметку в wp_nav_menu
  3. Включить изображение записи
  4. Задать уровень компрессии загружаемых изображений
  5. Удалить атрибуты ширины и высоты из вставляемых изображений
  6. Включить поддержку виджетов
  7. Задать максимальную длину заголовков записей и страниц
  8. Разрешить вызов анонсов разной длины
  9. Разрешить вызов контента разной длины
  10. Вырезать изображения из контента
  11. Выводить содержимое страницы по ее идентификатору
  12. Выводить содержимое страницы по ее короткому имени
  13. Шорткод для скрытия электронной почты внутри контента в целях антиспама
  14. Изменить дефолтный адрес электронной почты для генерируемых писем
  15. Изменить дефолтное имя отправителя
  16. Удалить дефолтные виджеты
  17. Удалить версию Вордпресс из шапки
  18. Скрывать возвращаемые ошибки на странице авторизации
  19. Перенсти загрузку скриптов в футер
  20. Перенсти загрузки стилей в хедер
  21. Отключить админ-бар для всех пользователей, кроме администраторов

Перед каждой функцией есть пример ее использования. На всякий случай напоминаю: все функции размещаются в файле functions.php активной темы Вордпресс или в специальных плагинах.

<?php

// 1. Navigation / Menu 
// Usage: wp_nav_menu( array( 'theme_location' => 'top-menu', 'container' => false ) );
add_action( 'init', 'register_my_menus' );
function register_my_menus()
{
	register_nav_menus(
	array(
		'top-menu' => __( 'Header Navigation' ),
		'bottom-menu' => __( 'Footer Navigation' )
	)
	);
}

// 2. Remove default UL markup from wp_nav_menu output
function remove_ul ( $menu )
{
   return preg_replace( array( '#^<ul[^>]*>#', '#</ul>$#' ), '', $menu );
}
add_filter( 'wp_nav_menu', 'remove_ul' );

// 3. Enable featured image with custom dimension
add_theme_support( 'post-thumbnails');
if (function_exists('add_image_size'))
{
	add_image_size( 'blog_featured', 600, 300,true );
}

// 4. Image compression while uploading
add_filter('jpeg_quality', 'jpeg_quality_callback');
function jpeg_quality_callback($arg)
{
	return (int)80; // 80% quality
}

// 5. Remove width and height attributes from inserted images
add_filter( 'post_thumbnail_html', 'remove_width_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_width_attribute', 10 );

function remove_width_attribute( $html ) {
   $html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
   return $html;
}

// 6. Enable sidebar widget
/* Usage:
<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar')) :  ?>
  <?php endif; ?>
*/
if ( function_exists('register_sidebar') )
{
	register_sidebar(array(
	'name'=>'Sidebar',
	'id' => 'sidebar',
	'description' => 'Sidebar Widget',
	'before_widget' => '',
	'after_widget' => '',
	'before_title' => '<h3>',
	'after_title' => '</h3>',
	));
}
add_post_type_support('page', 'excerpt');

// 7. Shorten post / page title by word limit
/* Usage: <?php echo short_title('...', 8); ?> Shorten title by 8 words */
function short_title($after = '', $length)
{
	$mytitle = explode(' ', get_the_title(), $length);
	if (count($mytitle)>=$length)
	{
		array_pop($mytitle);
		$mytitle = implode(" ",$mytitle). $after;
	}
	else
	{
		$mytitle = implode(" ",$mytitle);
	}
	return $mytitle;
}

// 8. Shorten excerpt by word limit
/* Usage: <?php echo excerpt(25); ?> in loop for 25 words limit*/
function excerpt($limit)
{
	$excerpt = explode(' ', get_the_excerpt(), $limit);
	if (count($excerpt)>=$limit)
	{
		array_pop($excerpt);
		$excerpt = implode(" ",$excerpt).'...';
	}
	else
	{
		$excerpt = implode(" ",$excerpt);
	}
	$excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
	return $excerpt;
}

// 9. Shorten content by word limit
/* Usage: <?php echo content(25); ?> in loop for 25 words limit*/
function content($limit)
{
	$content = explode(' ', get_the_content(), $limit);
	if (count($content)>=$limit)
	{
		array_pop($content);
		$content = implode(" ",$content).'...';
	}
	else
	{
		$content = implode(" ",$content);
	}
	$content = preg_replace('/(<)([img])(\w+)([^>]*>)/','', $content);
	$content = apply_filters('the_content', $content);
	$content = str_replace(']]>', '[[>', $content);
	return $content;
}

// 10. Strip images from content
/* Usage: <?php remove_filter( 'the_content', 'remove_images' ); ?>*/
function remove_images( $content )
{
   $postOutput = preg_replace('/<img[^>]+./','', $content);
   return $postOutput;
}

// 11. Display the content of a page by page ID
/* Usage: <?php echo get_page_content_id(15);?> 15 is the id of the page */
function get_page_content_id($page_id)
{
	$page_data = get_page($page_id);
	$content = apply_filters('the_content', $page_data->post_content);
	return $content;
}

// 12. Display the content of a page by page slug
/* Usage: <?php echo get_page_content_slug(get_page_id("about-me"));?> 'about-me' is the sluf of the page */
function get_page_content_slug($page_slug)
{
	$page = get_page_by_path($page_slug);
	$page_data = get_page($page->ID);
	$content = apply_filters('the_content', $page_data->post_content);
	return $content;
}

// 13. Anti spam email shorcode inside content editor
/*Usage: [email]you@you.com[/email]*/
function email_encode_function( $atts, $content )
{
	return '<a href="'.antispambot("mailto:".$content).'">'.antispambot($content).'</a>';
}
add_shortcode( 'email', 'email_encode_function' );

// 14. Change default sender email address for generated emails
 function wpb_sender_email( $original_email_address ) {
    return 'name@yourdomain.com';
}
add_filter( 'wp_mail_from', 'wpb_sender_email' );

// 15. Change default sender name for generated emails
function wpb_sender_name( $original_email_from ) {
    return 'Your Name';
}
add_filter( 'wp_mail_from_name', 'wpb_sender_name' );

// 16. Remove default widgets
// Usage: Uncomment the add_action function below
 function unregister_default_widgets() {
     unregister_widget('WP_Widget_Pages');
     unregister_widget('WP_Widget_Calendar');
     unregister_widget('WP_Widget_Archives');
     unregister_widget('WP_Widget_Links');
     unregister_widget('WP_Widget_Meta');
     unregister_widget('WP_Widget_Search');
     unregister_widget('WP_Widget_Text');
     unregister_widget('WP_Widget_Categories');
     unregister_widget('WP_Widget_Recent_Posts');
     unregister_widget('WP_Widget_Recent_Comments');
     unregister_widget('WP_Widget_RSS');
     unregister_widget('WP_Widget_Tag_Cloud');
     unregister_widget('WP_Nav_Menu_Widget');
 }
 //add_action('widgets_init', 'unregister_default_widgets', 11);

// 17. Remove WordPress version from Head
function remove_version_from_head()
{
	return '';
}
add_filter('the_generator', 'remove_version_from_head');

// 18. Remove login error message on login page
add_filter('login_errors',create_function('$a', "return null;"));

// 19. Enqueue script in footer
function wp_custom_scripts_load()
{
	// Deregister the default jQuery library if required
	//wp_deregister_script('jquery');
	wp_register_script( 'custom-js', get_template_directory_uri() . '/js/custom.js', array( 'jquery' ), null, true );

	wp_enqueue_script( 'custom-js' );

}
if (!is_admin())
add_action( 'wp_enqueue_scripts', 'wp_custom_scripts_load' );

// 20. Enqueue CSS in header
function wp_custom_css_load()
{

	wp_register_style( 'maincss', get_template_directory_uri() . '/style.css', array(), '01012019', 'all' );

	wp_enqueue_style( 'maincss' );
}
if (!is_admin())
add_action( 'wp_enqueue_scripts', 'wp_custom_css_load' );

// 21. Disable admin bar for all users but admins in the front end
  show_admin_bar(false);

?>

Подпишитесь на мой телеграм и первыми получайте новые материалы, в т.ч. которых нет на сайте.

INNERSTAT
Лучшее за неделю

Подпишитесь на рассылку и получайте новые материалы на электронную почту

Иван Данилин

Практикующий веб-разработчик, специализируюсь на платформе Вордпресс.

Комментарии
Добавить комментарий

Услуги фрилансеров по фиксированной цене — 500 р.
Подробнее