Только код (wordpress и woocommerce)

  • Автор темы Автор темы derealty
  • Дата начала Дата начала

derealty

Разрушитель (V)
Сообщения
53
Реакции
36
Баллы
498
В этой теме предлагаю добавлять "хаки" для расширения функционала wordpress и woocommerce.
Делимся кодом и не флудим тему.

woocommerce отображение подкатегорий(дочерних категорий) на странице категории

PHP:
            <?php
            $parentid = get_queried_object_id();
              $args = array(
                  'parent' => $parentid,
                  'hide_empty' => false
              );
              $terms = get_terms( 'product_cat', $args );
              if ( $terms ) {   
                  echo '<div class="content-container__catalog-list"><ul class="nav nav-pills">';
                      foreach ( $terms as $term ) {             
                          echo '<li class="nav-item">';                       
                              //woocommerce_subcategory_thumbnail( $term );
                                echo '<a href="' .  esc_url( get_term_link( $term ) ) . '" class="nav-link ' . $term->slug . ' catalog-list-block__title">';
                                    echo $term->name;
                                echo '</a>';                                                       
                          echo '</li>';                                                       
                  }
                  echo '</ul></div>';
              }
            ?>
 
Как этим кодом воспользоваться? Через какой-то хук подключить или в какой-то файл темы (плагина) вставить?
А вообще тема сниппетов (расширений) через хуки огромная. Чтобы не копировать сюда тысячи разных сниппетов (расширений):
- Как подключить сниппеты через хуки в function.php
- 50 полезных сниппетов для WooCommerce. Часть первая.
- 50 полезных сниппетов для WooCommerce. Часть вторая.
В дополнение stackoverflow (их там несколько тысяч).
 
Последнее редактирование:
Как этим кодом воспользоваться? Через какой-то хук подключить или в какой-то файл темы (плагина) вставить?
А вообще тема сниппетов (расширений) через хуки огромная. Чтобы не копировать сюда тысячи разных сниппетов (расширений):
- Как подключить сниппеты через хуки в function.php
- 50 полезных сниппетов для WooCommerce. Часть первая.
- 50 полезных сниппетов для WooCommerce. Часть вторая.
В дополнение stackoverflow (их там несколько тысяч).
Спасибо за ссылки, но идея была немного иная.

Раньше на nulled была тема: "Wordpress: плюшки файла functions.PHP" (может кто-то, помнит), сам часто пользовался ею, как gist-ами на гитхабе, все необходимые куски кода в одном месте плюс всегда пополняются сообществом форума. Хотелось бы тут тоже похожую темку организовать, возможно много людей даже не знают, что несколькими строчками кода можно заменить какой-нибудь плагин (для меня на нулледе в этой теме, было много открытий и полезного кода).

1637573175605.png
 
Раньше на nulled была тема: "Wordpress: плюшки файла functions.PHP" (может кто-то, помнит), сам часто пользовался ею, как gist-ами на гитхабе, все необходимые куски кода в одном месте плюс всегда пополняются сообществом форума.

Было такое, даже в закладках у меня есть)

Вот поискал в файлах старых проектов, нашел файлики с хуками для functions.php оттуда:

1.
Код:
------------------
// убираем мусор из шапки
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'start_post_rel_link');
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'adjacent_posts_rel_link');
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );
remove_action('wp_head', 'feed_links', 2 );
remove_action('wp_head', 'feed_links_extra', 3 );
------------

2.
Код:
------------------
# Удалить строки запроса - версии файлов
function remove_cssjs_ver( $src ) {
if( strpos( $src, '?ver=' ) )
$src = remove_query_arg( 'ver', $src );
return $src;
}
add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 );
add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2 );
------------

3.
Код:
------------------
# Отключить смайлики Emoticons для старых браузеров
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
------------

4.
Код:
------------------
# Отключить встраивание контента с посторонних сайтов oEmbed
function disable_embed(){
wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'disable_embed' );
------------

5.
Код:
------------------
# Отключить XML-RPC - API для редактирования постов, коментов и т.д.
add_filter('xmlrpc_enabled', '__return_false');
------------

6.
Код:
------------------
# Отключить Heartbeat API для связи браузера с сервером
add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {
wp_deregister_script('heartbeat');
}
------------

7.
Код:
------------------
# Отключить значки Dashicons на страницах сайта
function wpdocs_dequeue_dashicon() {
if (current_user_can( 'update_core' )) {
return;
}
wp_deregister_style('dashicons');
}
add_action( 'wp_enqueue_scripts', 'wpdocs_dequeue_dashicon' );
------------

8.
Код:
------------------
# отключаем srcset для картинок
function meks_disable_srcset( $sources ) {
    return false;
}

add_filter( 'wp_calculate_image_srcset', 'meks_disable_srcset' );
------------

9.
Код:
------------------
# переносим все скрипты сайта в подвал
function jquery_move_footer()
{
    wp_dequeue_script('jquery');
    wp_dequeue_script('jquery-core');
    wp_dequeue_script('jquery-migrate');
    wp_enqueue_script('jquery', false, array(), false, true);
    wp_enqueue_script('jquery-core', false, array(), false, true);
    wp_enqueue_script('jquery-migrate', false, array(), false, true);
}
add_action('wp_enqueue_scripts', 'jquery_move_footer');
------------

10.
Код:
------------------
# переносим стили сайта в подвал
remove_action( 'wp_head', 'wp_print_scripts' );
remove_action( 'wp_head', 'wp_print_head_scripts', 9 );
remove_action( 'wp_head', 'wp_enqueue_scripts', 1 );
add_action( 'wp_footer', 'wp_print_scripts', 5 );
add_action( 'wp_footer', 'wp_enqueue_scripts', 5 );
add_action( 'wp_footer', 'wp_print_head_scripts', 5 );
------------

11.
Код:
------------------
# убираем replytocom в комментах
 function redirect_rtc() {
 if (isset($_GET['replytocom'])){@header("HTTP/1.0 404 Not Found");
 die();
 }
}
add_filter('template_redirect','redirect_rtc');
function custom_comment_reply_link($link) {
return preg_replace( '/<a (.*?)href=[\"\'][^\"^\']*[\"\'](.*?)<\/a>/i', '<span class="replylink"><span  $1$2</span></span>', $link );
 }
add_filter( 'comment_reply_link', 'custom_comment_reply_link' );
add_action('wp_footer', 'add_goto');
function add_goto(){
echo "\n".'<script type= "text/javascript">function gotoal(link){window.open(link.replace("_","http://"));}</script>'."\n";
if ( is_single() || is_page() ) wp_enqueue_script( 'comment-reply' ); }
------------

12.
Код:
------------------
# Отключить Self Pingback в комментах
function disable_pingback( &$links ) {
foreach ( $links as $l => $link )
if ( 0 === strpos( $link, get_option( 'home' ) ) )
unset($links[$l]);
}
add_action( 'pre_ping', 'disable_pingback' );
------------

13.
Код:
------------------
# Удалить JQuery Migrate
function deregister_qjuery() {
if ( !is_admin() ) {
wp_deregister_script('jquery');
}
}
add_action('wp_enqueue_scripts', 'deregister_qjuery');
------------

14.
Код:
------------------
# Отключить файлы JS/CSS от Contact Form 7 на всех страницах
add_filter( 'wpcf7_load_js', '__return_false' );
add_filter( 'wpcf7_load_css', '__return_false' );
------------

15.
Код:
------------------
// асинхронный javascript
function wcs_defer_javascripts ( $url ) { if ( FALSE === strpos( $url, '.js' ) ) return $url; if ( strpos( $url, 'jquery.js' ) ) return $url; return "$url' async='async"; } add_filter( 'clean_url', 'wcs_defer_javascripts', 11, 1 );
------------

16.
Код:
------------------
// асинхронный javascript по отдельности
function add_async_forscript($url)
{
    if (strpos($url, '#asyncload')===false)
        return $url;
    else if (is_admin())
        return str_replace('#asyncload', '', $url);
    else
        return str_replace('#asyncload', '', $url)."' async='async";
}
add_filter('clean_url', 'add_async_forscript', 11, 1);

wp_enqueue_script('myscriptass', 'assest/js/myscriptass.js#asyncload' );
------------
 
Чтобы Яндекс не ругался на XML разметку Opengraph
Код:
function artabr_opengraph_fix_yandex($lang) {
    $lang_prefix = 'prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#  profile: http://ogp.me/ns/profile# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#"';
    $lang_fix = preg_replace('!prefix="(.*?)"!si', $lang_prefix, $lang);
    return $lang_fix;
    }
add_filter( 'language_attributes', 'artabr_opengraph_fix_yandex',20,1);
Чтобы вывести описание в категориях товаров с визуальным редактором над и под списком товаров
Код:
/**Дополнительное описание для категорий Woocommerce **/
add_action( 'product_cat_edit_form_fields', 'wpm_taxonomy_edit_meta_field', 10, 2 );
function wpm_taxonomy_edit_meta_field($term) {
$t_id = $term->term_id;
$term_meta = get_option( "taxonomy_$t_id" );
$content = $term_meta['custom_term_meta'] ? wp_kses_post( $term_meta['custom_term_meta'] ) : '';
$settings = array( 'textarea_name' => 'term_meta[custom_term_meta]' );
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="term_meta[custom_term_meta]">Дополнительное описание</label></th>
<td>
<?php wp_editor( $content, 'product_cat_details', $settings ); ?>
</td>
</tr>
<?php
}
add_action( 'edited_product_cat', 'save_taxonomy_custom_meta', 10, 2 );
add_action( 'create_product_cat', 'save_taxonomy_custom_meta', 10, 2 );
function save_taxonomy_custom_meta( $term_id ) {
if ( isset( $_POST['term_meta'] ) ) {
$t_id = $term_id;
$term_meta = get_option( "taxonomy_$t_id" );
$cat_keys = array_keys( $_POST['term_meta'] );
foreach ( $cat_keys as $key ) {
if ( isset ( $_POST['term_meta'][$key] ) ) {
$term_meta[$key] = wp_kses_post( stripslashes($_POST['term_meta'][$key]) );
}
}
update_option( "taxonomy_$t_id", $term_meta );
}
}
/**Вывод второго описания категорий Woocommerce **/
add_action( 'woocommerce_after_shop_loop', 'wpm_product_cat_archive_add_meta', 50 );
function wpm_product_cat_archive_add_meta() {
$t_id = get_queried_object()->term_id;
$term_meta = get_option( "taxonomy_$t_id" );
$term_meta_content = $term_meta['custom_term_meta'];
if ( $term_meta_content != '' ) {
if ( is_tax( array( 'product_cat', 'product_tag' ) ) && 0 === absint( get_query_var( 'paged' ) ) ) {
echo '<div class="woo-sc-box normal rounded full">';
echo apply_filters( 'the_content', $term_meta_content );
echo '</div>';
}
}
}
 
удаляем ошибку:
"не используется пассивный прослушиватель событий" подробнее на скрине.
идем сюда /wp-includes/js/jquery/jquery.min.js
добавляем ниже код
Код:
jQuery.event.special.touchstart = {
    setup: function( _, ns, handle ){
        if ( ns.includes("noPreventDefault") ) {
                this.addEventListener("touchstart", handle, { passive: false });
                this.addEventListener("touchmove", handle, { passive: false });
                this.addEventListener("scroll", handle, { passive: false });
        } else {
                this.addEventListener("touchstart", handle, { passive: true });
                this.addEventListener("touchmove", handle, { passive: true });
                this.addEventListener("scroll", handle, { passive: true });
        }
    }
};
 

Вложения

  • 2022-05-27_1-47-38.png
    2022-05-27_1-47-38.png
    50,5 КБ · Просмотры: 9
  • 2022-05-27_2-31-43.png
    2022-05-27_2-31-43.png
    36,1 КБ · Просмотры: 9
  • 2022-05-27_2-33-18.png
    2022-05-27_2-33-18.png
    45,7 КБ · Просмотры: 9
Назад
Верх