26 самых полезных и функциональных сниппетов WordPress

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

Совместимость:

  • Версия WordPress по сравнению с 4.6
  • PHP-версия 7.xx

Либо скопируйте фрагменты в вашу активную тему functions.phpили настройте настраиваемый подключаемый модуль для конкретной страницы для этой работы.

[Red-Box text=»Remember: Before you apply any changes to the functions.php, create a backup of the file. Don’t alter the file using the WordPress editor. If something goes wrong, you won’t have access to your website. Make your additions using an FTP access, directly on your web space.»]

Облако тегов WordPress — популярный инструмент для боковой панели блога. Ваши посетители могут использовать его, чтобы легко найти то, что они ищут. Однако WordPress отображает теги разных размеров, что не всегда желательно. Используйте этот фрагмент, чтобы удалить встроенные стили.

Содержание

2 — Отключите самоотсылающиеся пингбэки

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

 $link )
        if ( 0 === strpos( $link, $home ) )
            unset($links[$l]);
}

add_action( 'pre_ping', 'evolution_no_self_ping' );

3 — Отключить смайлики WordPress

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

4 — Отключите сценарий переноса jQuery

jQuery Migrate — это скрипт, предназначенный для обеспечения обратной совместимости старых приложений jQuery. «Нормальная» и современная версия jQuery больше не поддерживает все старые приложения. Хотя это не повлияет на более чем 5% всего веб-сайта WordPress, WordPress по умолчанию загружает довольно большой скрипт. Вот простой способ отключить его:

remove( 'jquery');
        $scripts->add( 'jquery', false, array( 'jquery-core' ), '1.12.4' );
    }
}
add_filter( 'wp_default_scripts', 'evolution_remove_jquery_migrate' );
endif;

5 — Деактивируйте функцию WordPress oEmbed

Версия WordPress 4.4 принесла нам новую функцию oEmbed, которая в основном предназначена для того, чтобы вы могли интегрировать иностранные статьи или страницы в свои сообщения с помощью простой ссылки. Если вам не нужна эта функция, или вы просто не хотите, чтобы ваши статьи отображались в зарубежных постах в любое время, просто отключите эту функцию.

public_query_vars = array_diff( $wp->public_query_vars, array(
        'embed',
    ) );

    // Remove the REST API endpoint.
    remove_action( 'rest_api_init', 'wp_oembed_register_route' );

    // Turn off oEmbed auto discovery.
    add_filter( 'embed_oembed_discover', '__return_false' );

    // Don't filter oEmbed results.
    remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );

    // Remove oEmbed discovery links.
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );

    // Remove oEmbed-specific JavaScript from the front-end and back-end.
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );
    add_filter( 'tiny_mce_plugins', 'evolution_disable_embeds_tiny_mce_plugin' );

    // Remove all embeds rewrite rules.
    add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );

    // Remove filter of the oEmbed result before any HTTP requests are made.
    remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
}

add_action( 'init', 'evolution_disable_embeds_init', 9999 );

/**
 * Removes the 'wpembed' TinyMCE plugin.
 *
 * @since 1.0.0
 *
 * @param array $plugins List of TinyMCE plugins.
 * @return array The modified list.
 */
function evolution_disable_embeds_tiny_mce_plugin( $plugins ) {
    return array_diff( $plugins, array( 'wpembed' ) );
}

/**
 * Remove all rewrite rules related to embeds.
 *
 * @since 1.0.0
 *
 * @param array $rules WordPress rewrite rules.
 * @return array Rewrite rules without embeds rules.
 */
function evolution_disable_embeds_rewrites( $rules ) {
    foreach ( $rules as $rule => $rewrite ) {
        if ( false !== strpos( $rewrite, 'embed=true' ) ) {
            unset( $rules[ $rule ] );
        }
    }

    return $rules;
}

/**
 * Remove embeds rewrite rules on plugin activation.
 *
 * @since 1.0.0
 */
function evolution_disable_embeds_remove_rewrite_rules() {
    add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
    flush_rewrite_rules( false );
}

register_activation_hook( __FILE__, 'evolution_disable_embeds_remove_rewrite_rules' );

/**
 * Flush rewrite rules on plugin deactivation.
 *
 * @since 1.0.0
 */
function evolution_disable_embeds_flush_rewrite_rules() {
    remove_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
    flush_rewrite_rules( false );
}

register_deactivation_hook( __FILE__, 'evolution_disable_embeds_flush_rewrite_rules' );

6 — Освободите заголовок WordPress от ненужных записей

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

7 — Вставка изображений постов в RSS-канал

По умолчанию WordPress не добавляет изображения сообщений в RSS-канал. Этот фрагмент меняет это.

ID ) ){
$content="

" . get_the_post_thumbnail( $post->ID, 'large', array( 'style' => 'margin-bottom: 15px;' ) ) . '

' . $content; } return $content; } add_filter('the_excerpt_rss', 'evolution_featuredtoRSS'); add_filter('the_content_feed', 'evolution_featuredtoRSS');

8 — Разрешить дополнительные форматы файлов для медиатеки

Вы хотите загрузить специальные форматы файлов в свою медиатеку WordPress и получаете сообщение об ошибке? Используйте этот код, и ваша проблема будет решена. Код позволяет загружать форматы файлов ZIP, MOBI, PDFи EPUB. Если вам нужны дополнительные форматы, полный список типов MIME можно найти здесь.

 'application/zip',
 'mobi' => 'application/x-mobipocket-ebook',
 'pdf' => 'application/pdf',
 'epub' => 'application/epub+zip'
 );

 return array_merge($mimes,$new_file_types);
}
add_filter('upload_mimes','add_custom_mime_types');

9. Свободно определяйте длину отрывка

Иногда для определенного шаблона требуется очень точная длина отрывка. Следующая функция позволяет свободно определять эту длину. Хорошо, что длина отрывка не задается глобально, что позволяет каждому шаблону иметь свою длину.

 $charlength ) {
		$subex = mb_substr( $excerpt, 0, $charlength - 5 );
		$exwords = explode( ' ', $subex );
		$excut = - ( mb_strlen( $exwords[ count( $exwords ) - 1 ] ) );
		if ( $excut 

В шаблоне просто поменяйте местами теги и укажите длину отрывка:

// Deleting the original tag:


// Exchange with this tag, and enter any length (in brackets):

10 — Адаптивные видео — YouTube и Vimeo

Если ваша тема не поддерживает адаптивные видео, настроить поддержку можно очень быстро. Функция PHP обеспечивает автоматическое встраивание в Div, а информация CSS обеспечивает оптимальное масштабирование при любом разрешении.

'.$html.'

‘; // Обернуть элемент div и вернуть #3 и #4

}
add_filter(’embed_oembed_html’,’evolution_wrap_oembed’,10,1);
Необходимый CSS:

.embed-responsive.embed-responsive-16by9 {
    position: relative;
    padding-bottom: 56.25%; /* 16:9 */
    padding-top: 25px;
    height: 0;
}
.embed-responsive.embed-responsive-16by9 iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}
/* This indication makes HTML5 videos responsive */
video {
    width: 100% !important;
    height: auto !important;
}

11 — Настройка разбивки на страницы WordPress без плагина

Вы хотите заменить «старые сообщения | более новые посты» с крутым списком цифр? Нет проблем, так как с версией WordPress 4.1 вам больше не нужен популярный плагин WP PageNavi. Теперь сделать это очень легко, используя средства по умолчанию.

Вы можете использовать эту функцию непосредственно в index.php а в archive.php. Однако создание дочерней темы для этого выгодно.

 3, //How many buttons will be displayed before the placeholder »...« appears.
 'type' => 'list', // Display as a list 
 'prev_text' => __( '« Newer', 'textdomain' ),
 'next_text' => __( 'Older »', 'textdomain' ),
 ) ); ?>

Чтобы придать списку дизайн, необходимо немного CSS. Вот стили, которые я использую время от времени. Вам нужно настроить его на цвета вашего блога:

nav.pagination{position:relative;display:block;margin-top:20px}
.page-numbers{margin:0;padding:0}
.page-numbers li{list-style:none;margin:0 6px 0 0;padding:0;display:inline-block}
.page-numbers li span.current{padding:10px 15px;background:#9FC65D;border:1px solid #9FC65D;display:block;line-height:1;color:#fff}
.page-numbers li a{padding:10px 15px;background:#eee;color:#555;text-decoration:none;border:1px solid #eee;display:block;line-height:1}
.page-numbers li a:hover{background:#9FC65D;border-color:#9FC65D;color:#fff}
.screen-reader-text {
 clip: rect(1px,1px,1px,1px);
 position: absolute!important;
 height: 1px;
 width: 1px;
 overflow: hidden;
}

12 — Пользовательский логотип входа с пользовательским цветом фона

Вы действительно гордитесь своим сайтом на WordPress и приложили много усилий к его дизайну? Сделайте еще один шаг и настройте логотип на странице входа. В сочетании с вашим собственным цветом фона это выглядит очень красиво.

13 — Изменить внешний вид первого абзаца

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

]+)?>/', '

', $content, 1 ); } add_filter( 'the_content', 'tb_first_paragraph_highlight' );

Код выше добавляет класс .opener к первому абзацу каждой статьи или страницы. Теперь немного CSS позволяет управлять форматированием абзаца, а также «местом» действия.

/* Only selected articles get the design */
.single p.opener {
    color: #165a72;
    font-weight: 400;
    font-size: 21px;
    line-height: 1.5;
}

Или статьи и страницы отображают первый абзац по-разному:

/* Individual articles and pages are designed */
.single p.opener, .page p.opener {
    color: #165a72;
    font-weight: 400;
    font-size: 21px;
    line-height: 1.5;
}

14 — Регистрация пользователя только с адресом электронной почты и паролем

Начиная с версии WordPress 4.5, возможна регистрация пользователя с помощью адреса электронной почты и пароля. Чтобы досадить хакерам и сделать WordPress немного безопаснее, вы можете зарегистрироваться по электронной почте и паролю исключительно с помощью этого кода.

add('empty_username', __('ERROR: Email field is empty.'));
            }
            else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //Invalid Email
                $error->add('invalid_username', __('ERROR: Email is invalid.'));
            }
 
            if(empty($password)){ //No password
                $error->add('empty_password', __('ERROR: Password field is empty.'));
            }
 
            return $error;
        }
 
        //Check if user exists in WordPress database
        $user = get_user_by('email', $email);
 
        //bad email
        if(!$user){
            $error = new WP_Error();
            $error->add('invalid', __('ERROR: Either the email or password you entered is invalid.'));
            return $error;
        }
        else{ //check password
            if(!wp_check_password($password, $user->user_pass, $user->ID)){ //bad password
                $error = new WP_Error();
                $error->add('invalid', __('ERROR: Either the email or password you entered is invalid.'));
                return $error;
            }else{
                return $user; //passed
            }
        }
}, 20, 3);

15 — Запретить пользователям менять свои пароли

Админ-панель WordPress — это сердце и легкие вашего сайта. Убедитесь, что распространяемые пароли очень безопасны, не оставляя злоумышленникам шансов. Пользователям нравится менять назначенные пароли на очень простые для запоминания и очень простые для взлома версии. Вы можете предотвратить это!

ID);
      if ( !empty( $user->roles ) && is_array( $user->roles ) && $user->roles[0] == 'administrator' )
        return true;
    }
    return false;
  }

}

$pass_reset_removed = new Password_Reset_Removed();

16 — Отображение рекламы после xx абзаца

Если вы хотите зарабатывать на своем блоге, вам не обойтись без рекламы. Например, вы можете использовать популярный Google Adsense. Этот фрагмент показывает ваши объявления после выбранного абзаца.

';
	$paragraphs = explode( $closing_p, $content );
	foreach ($paragraphs as $index => $paragraph) {

		if ( trim( $paragraph ) ) {
			$paragraphs[$index] .= $closing_p;
		}

		if ( $paragraph_id == $index + 1 ) {
			$paragraphs[$index] .= $insertion;
		}
	}
	
	return implode( '', $paragraphs );
}

17 — Расширение вашего профиля пользователя дополнительными учетными записями в социальных сетях

Биографическая информация в вашем профиле WordPress довольно скудна. У вас нет возможности связать все ваши социальные сети. С помощью этого кода вы можете добавить и отобразить все свои учетные записи в социальных сетях.

new_fields[ mb_strtolower($field, 'utf-8') ] = $field;
		}

		$this->replace = (bool) $replace;

		add_filter('user_contactmethods', array( $this, 'add_fields' ) );
	}

	/**
	 * Changing contact fields
	 * @param  $original_fields Original WP fields
	 * @return array
	 */
	public function add_fields($original_fields)
	{
		if ( $this->replace )
		{
			$this->active_fields = $this->new_fields;
			return $this->new_fields;
		}

		$this->active_fields = array_merge($original_fields, $this->new_fields);
		return $this->active_fields;
	}

	/**
	 * Helper function
	 * @return array The currently active fields.
	 */
	public function get_active_fields()
	{
		return $this->active_fields;
	}
}

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

18 — Отображение списка категорий с RSS-каналами

Иногда может быть удобно отображать все категории с соответствующими адресами RSS-каналов. Становится еще лучше, когда вы можете использовать шорткод WordPress для отображения списка в любом месте — даже в текстовых виджетах.

 'name',
		'feed' => 'RSS', 
		'echo' => false, 
		'title_li'     => '',
	); 
	$string .= '
    '; $string .= wp_list_categories($args); $string .= '
'; return $string; } // add shortcode add_shortcode('categories-feed', 'tb_categories_with_feed'); // Add filter to execute shortcodes in text widgets add_filter('widget_text', 'do_shortcode');

Шорткод:

[categories-feed]

позволяет отображать список везде, где вы хотите. Это также работает в виджетах.

Вы также можете использовать шорткод в своей теме:

19 — Отображение похожих сообщений без плагина

Популярные похожие посты легко выводятся без накаченного плагина с «многочисленными» функциями. Вам понадобится фрагмент PHP, дочерняя тема и немного CSS.

ID);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
$args=array(
'category__in' => $category_ids,
'post__not_in' => array($post->ID),
'posts_per_page'=> 3, // Number of related posts that will be shown.
'ignore_sticky_posts'=>1
);
$my_query = new wp_query( $args );
if( $my_query->have_posts() )  { 
echo '