دسته بندی مشکلات و راه حلش
دسته بندی مشکلات و راه حلش
ادامه متن رو با زدن روی دکمه مشاهده بیشتر میبینی

سایت انجام شده:rahmataval.ir

وضعیت:حل شده

کدنویسی:

این یک راهنمای کامل و مرتب برای استفاده در پروژه‌های آینده‌تان است. این ساختار بدون نیاز به افزونه سنگین، به شما اجازه می‌دهد هرجایی از سایت که نیاز داشتید، دکمه «مشاهده بیشتر» بسازید. --- ### راهنمای پیاده‌سازی قابلیت «مشاهده بیشتر» (Read More) در المنتور #### ۱. تنظیمات ویجت‌ها در المنتور ابتدا باید به ویجت‌های خود "شناسه" بدهید تا کد با آن‌ها ارتباط برقرار کند. * **ویجت ویرایشگر متن (Text Editor):** * روی ویجت کلیک کنید. * به تب **پیشرفته (Advanced)** بروید. * در بخش **کلاس‌های CSS**، عبارت زیر را دقیقاً بنویسید (بدون نقطه): `read-more-content` * **ویجت دکمه (Button):** * روی دکمه کلیک کنید. * به تب **پیشرفته (Advanced)** بروید. * در بخش **کلاس‌های CSS**، عبارت زیر را دقیقاً بنویسید (بدون نقطه): `read-more-btn-class` #### ۲. اضافه کردن کد اصلی یک ویجت **HTML** را به انتهای صفحه (زیر دکمه یا متن) بکشید و کد زیر را داخل آن قرار دهید: ```html document.addEventListener('DOMContentLoaded', function() { const btn = document.querySelector('.read-more-btn-class'); const content = document.querySelector('.read-more-content'); if (btn && content) { // فعال‌سازی اولیه سایه content.classList.add('collapsed'); btn.addEventListener('click', function(e) { e.preventDefault(); if (!content.classList.contains('expanded')) { // باز شدن متن content.style.maxHeight = content.scrollHeight + 'px'; content.classList.add('expanded'); content.classList.remove('collapsed'); btn.querySelector('.elementor-button-text').innerText = 'بستن متن'; } else { // بسته شدن متن content.style.maxHeight = '150px'; /* این عدد باید با max-height در CSS یکی باشد */ content.classList.remove('expanded'); content.classList.add('collapsed'); btn.querySelector('.elementor-button-text').innerText = 'مشاهده بیشتر'; } }); } }); ``` --- ### ۳. نکات مهم برای پروژه‌های بعدی: 1. **اگر رنگ پس‌زمینه کانتینر شما سفید نیست:** در کد CSS بالا، قسمت `rgba(255, 255, 255, ...)` را پیدا کنید. عدد `255, 255, 255` کد رنگ سفید است. آن را با کد رنگ پس‌زمینه خودتان جایگزین کنید (مثلاً برای خاکستری روشن: `245, 245, 245`). 2. **تنظیم ارتفاع:** اگر می‌خواهید در حالت بسته، متن کوتاه‌تر یا بلندتر باشد، عدد `150px` را در دو جای کد (هم در CSS و هم در بخش `else` جاوا اسکریپت) تغییر دهید. 3. **چندین دکمه در یک صفحه:** اگر می‌خواهید در یک صفحه **چندین** بخش «مشاهده بیشتر» داشته باشید، ساختار کد باید کمی تغییر کند (از کلاس به جای ID استفاده کردیم تا همین الان هم قابلیت استفاده در چندین جا را داشته باشد، اما اگر با هم تداخل پیدا کردند، کافیست کلاس‌های متفاوتی برای هر جفت متن و دکمه انتخاب کنید). این کد بسیار سبک است و هیچ فشاری به دیتابیس یا سرعت سایت شما وارد نمی‌کند. موفق باشید!

تبدیل تصاویر به فرمت WebP در رسانه‌ها

سایت انجام شده:rahmataval.ir

وضعیت:حل شده

کد رو که اضافه کردی وارد کتابخانه رسانه شو و کنار هر عکس گزینه جدید تبدیل تصویر رو میبینی

کدنویسی:

این کد رو در کد اسنیپ بزاریم: // Add a button to the media row actions function add_webp_convert_button($actions, $post) { if ($post->post_mime_type === 'image/jpeg' || $post->post_mime_type === 'image/png') { $url = wp_nonce_url(admin_url('admin-ajax.php?action=convert_to_webp&attachment_id=' . $post->ID), 'convert_to_webp'); $actions['convert_to_webp'] = 'Convert to WebP'; } return $actions; } add_filter('media_row_actions', 'add_webp_convert_button', 10, 2); // Handle the conversion to WebP function convert_image_to_webp() { if (!current_user_can('edit_posts')) { wp_die(__('You do not have permission to edit this post.')); } $attachment_id = intval($_GET['attachment_id']); check_admin_referer('convert_to_webp'); $file = get_attached_file($attachment_id); $info = pathinfo($file); $new_file = $info['dirname'] . '/' . $info['filename'] . '.webp'; if ($info['extension'] === 'jpeg' || $info['extension'] === 'jpg' || $info['extension'] === 'png') { if ($info['extension'] === 'jpeg' || $info['extension'] === 'jpg') { $image = imagecreatefromjpeg($file); } elseif ($info['extension'] === 'png') { $image = imagecreatefrompng($file); } if ($image) { imagewebp($image, $new_file); imagedestroy($image); update_attached_file($attachment_id, $new_file); // Update the attachment metadata $metadata = wp_generate_attachment_metadata($attachment_id, $new_file); wp_update_attachment_metadata($attachment_id, $metadata); wp_safe_redirect(admin_url('upload.php')); exit; } else { wp_die(__('Error converting image to WebP.')); } } else { wp_die(__('Unsupported image format.')); } } add_action('wp_ajax_convert_to_webp', 'convert_image_to_webp'); add_filter( 'elementor_pro/custom_fonts/font_display', function( $current_value, $font_family, $data ) { return 'swap'; }, 10, 3 );

بکگراند شیشه ای

وضعیت:حل شده

کدنویسی:

selector { background: linear-gradient( 135deg, rgba(255,255,255,0.25), rgba(255,255,255,0.08) ); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid rgba(255,255,255,0.3); border-radius: 24px; box-shadow: 0 8px 32px rgba(0,0,0,0.1), inset 0 1px 0 rgba(255,255,255,0.3); }

افزودن لینک صفحه در المنتور

سایت انجام شده:hatefnovin.ir

وضعیت:حل شده

با استفاده از فیلتر Callback در همان ویجت Dynamic Field:

  1. ویجت Dynamic Field جت‌انجین را قرار دهید.
  2. Source: را روی Post/Page Data بگذارید.
  3. Post Data: را روی Post ID (شناسه نوشته) بگذارید (در این حالت ابتدا یک عدد مثل 124 نمایش داده می‌شود).
  4. تیک گزینه Filter field output (فیلتر کردن خروجی فیلد) را در پایین همان پنل فعال کنید.
  5. در کادر Callback: از لیست کشویی تابع Get permalink by ID را انتخاب کنید.(این تابع شناسه نوشته را می‌گیرد و دقیقاً آدرس کامل URL آن را به‌صورت متن چاپ می‌کند).

با استفاده از فیلتر Callback در همان ویجت Dynamic Field: ویجت Dynamic Field جت‌انجین را قرار دهید. Source: را روی Post/Page Data بگذارید. Post Data: را روی Post ID (شناسه نوشته) بگذارید (در این حالت ابتدا یک عدد مثل 124 نمایش داده می‌شود). تیک گزینه Filter field output (فیلتر کردن خروجی فیلد) را در پایین همان پنل فعال کنید. در کادر Callback: از لیست کشویی تابع Get permalink by ID را انتخاب کنید.(این تابع شناسه نوشته را می‌گیرد و دقیقاً آدرس کامل URL آن را به‌صورت متن چاپ می‌کند).

تغییر نام قالب هلو المنتور در سورس

سایت انجام شده:hatefnovin.ir

وضعیت:حل شده

این هم یک **چک‌لیست کامل و تر‌و‌تمیز** برای اینکه هر زمان خواستی روی پروژه‌های بعدی از قالب Hello Elementor یک نسخه اختصاصی (White-label) با برند دلخواهت بسازی، قدم‌به‌قدم از روی آن پیش بروی:

---

### راهنمای ساخت قالب اختصاصی (Child Theme) با پایه هلو المنتور

> **نکته مهم:** همیشه باید قالب اصلی **Hello Elementor** روی سایت نصب باشد، اما آن را فعال نمی‌کنیم و چایلدتم ساخته‌شده را فعال می‌کنیم.

---

#### مرحله ۱: ساخت پوشه قالب
به مسیر زیر در فایل منیجر هاست (یا لوکال) بروید:
`wp-content/themes/`

یک پوشه جدید با نام انگلیسی دلخواه برند بسازید (با حروف کوچک و خط تیره).
*مثال:* `hatef-novin`

---

#### مرحله ۲: ساخت فایل `style.css`
داخل این پوشه جدید، فایلی به نام `style.css` بسازید و کدهای زیر را داخل آن قرار دهید (مشخصات را بر اساس نام برند جدید تغییر دهید):

```css
/*
Theme Name: هاتف نوین
Theme URI: https://hatefnovin.ir
Description: قالب اختصاصی هاتف نوین بر پایه Hello Elementor
Author: هاتف نوین
Author URI: https://hatefnovin.ir
Template: hello-elementor
Version: 1.0.0
Text Domain: hatef-novin
*/
```
> **قانون طلایی:** خط `Template: hello-elementor` حتماً باید دقیقاً به همین شکل بماند، چون ارتباط این قالب با قالب مادر را برقرار می‌کند.

---

#### مرحله ۳: ساخت فایل `functions.php`
داخل همان پوشه، فایلی به نام `functions.php` بسازید و این کدهای کامل را درون آن کپی کنید:

```php
<?php
// ۱. لود کردن استایل‌های قالب والد (Hello Elementor)
add_action( 'wp_enqueue_scripts', 'custom_theme_enqueue_styles' );
function custom_theme_enqueue_styles() {
wp_enqueue_style(
'hello-elementor-parent-style',
get_template_directory_uri() . '/style.css'
);
}

// ۲. تغییر نام منوی «سلام / Hello Theme» در بخش «نمایش» پیشخوان
add_action( 'admin_menu', 'custom_theme_rename_admin_menu', 999 );
function custom_theme_rename_admin_menu() {
global $submenu;
if ( isset( $submenu['themes.php'] ) ) {
foreach ( $submenu['themes.php'] as $key => $item ) {
if ( isset( $item[2] ) && strpos( $item[2], 'hello' ) !== false ) {
$submenu['themes.php'][$key][0] = 'تنظیمات هاتف نوین'; // عنوان دلخواه منو
}
}
}
}

// ۳. تغییر کلمه «سلام» و «Hello Theme» در کل پیشخوان وردپرس
add_filter( 'gettext', 'custom_theme_replace_brand_text', 20, 3 );
function custom_theme_replace_brand_text( $translated_text, $text, $domain ) {
if ( is_admin() ) {
if ( $text === 'Hello Theme' || $text === 'Hello Elementor' || $translated_text === 'سلام' ) {
return 'هاتف نوین'; // نام برند اختصاصی شما
}
}
return $translated_text;
}
```

---

#### مرحله ۴: قرار دادن تصویر پوسته (اختیاری ولی حرفه‌ای)
1. یک تصویر کاور یا لوگوی برند با سایز **۱۲۰۰ در ۹۰۰ پیکسل** طراحی کنید.
2. نام آن را دقیقاً `screenshot.png` بگذارید.
3. فایل را داخل همان پوشه چایلدتم آپلود کنید تا در بخش پوسته‌ها، لوگوی برند شما نمایش داده شود.

---

#### مرحله ۵: فعال‌سازی
1. وارد پیشخوان وردپرس شوید.
2. به بخش **نمایش > پوسته‌ها** بروید.
3. پوسته با نام اختصاصی خودتان را پیدا کرده و روی **فعال کردن (Activate)** کلیک کنید.
4. به مسیر **المنتور > ابزارها** رفته و یک‌بار دکمه **«بازتولید فایل‌ها و داده‌ها»** را بزنید تا کش استایل‌ها بازسازی شود.

کارت محصول جت‌انجین برای محصولات ناموجود خاکستری شود

سایت انجام شده:sun-cosmetic

وضعیت:حل شده

کد اول رو در کد اسنیپ بزار, کد دوم در سی اس اس سفارشی کارت محصول جت انجینی گذاشته شه:

کدنویسی:

// افزودن کلاس ناموجودی به آیتم‌های لیستینگ جت‌انجین add_filter('jet-engine/listing/item-classes', function($classes) { global $product; if ( ! is_a($product, 'WC_Product') ) { $product = wc_get_product(get_the_ID()); } if ( $product && ! $product->is_in_stock() ) { $classes[] = 'is-out-of-stock'; } return $classes; }); ---------------------------------------------------------------- کد دوم در سی اس اس سفارشی کارت محصول جت انجینی گذاشته شه: /* ۱. اعمال فیلتر خاکستری و ماتی روی کل کارت ناموجود */ .jet-listing-grid__item.is-out-of-stock { filter: grayscale(100%); -webkit-filter: grayscale(100%); opacity: 0.7; transition: all 0.3s ease-in-out; } /* ۲. محو کردن ملایم تصاویر داخل کارت */ .jet-listing-grid__item.is-out-of-stock img { filter: blur(1px); -webkit-filter: blur(1px); } /* ۳. استثنا کردن تیتر محصول از افکت خاکستری (شفاف و رنگی ماندن تیتر) */ .jet-listing-grid__item.is-out-of-stock .jet-listing-dynamic-title, .jet-listing-grid__item.is-out-of-stock .elementor-heading-title, .jet-listing-grid__item.is-out-of-stock .product-title, .jet-listing-grid__item.is-out-of-stock h2, .jet-listing-grid__item.is-out-of-stock h3 { filter: none !important; -webkit-filter: none !important; opacity: 1 !important; position: relative; z-index: 5; } /* ۴. غیرفعال کردن کلیک دکمه خرید */ .jet-listing-grid__item.is-out-of-stock .elementor-button, .jet-listing-grid__item.is-out-of-stock button, .jet-listing-grid__item.is-out-of-stock .add_to_cart_button { pointer-events: none; opacity: 0.5; } /* ۵. حالت هاور روی دسکتاپ (اختیاری: برای بازگشت ملایم رنگ با بردن ماوس) */ .jet-listing-grid__item.is-out-of-stock:hover { filter: grayscale(40%); -webkit-filter: grayscale(40%); opacity: 0.9; } .jet-listing-grid__item.is-out-of-stock:hover img { filter: blur(0); -webkit-filter: blur(0); }

نوار ارسال رایگان در قالب وودمارت

سایت انجام شده:sun-cosmetic

وضعیت:حل شده

کد زیر را در کد اسنیپ بزار ،سپس پیشخوان ← ووکامرس ← نوار ارسال رایگان در آنجا مبلغ حداقل سبد را تنظیم کنید؛ مثلاً 200000

کدنویسی:

if ( ! defined( 'ABSPATH' ) ) { exit; } /* |-------------------------------------------------------------------------- | تنظیمات پیش‌فرض |-------------------------------------------------------------------------- */ if ( ! defined( 'AWC_FREE_SHIPPING_DEFAULT_THRESHOLD' ) ) { define( 'AWC_FREE_SHIPPING_DEFAULT_THRESHOLD', 2000000 ); } /* |-------------------------------------------------------------------------- | بررسی ووکامرس |-------------------------------------------------------------------------- */ add_action( 'plugins_loaded', function () { if ( ! class_exists( 'WooCommerce' ) ) { return; } /* |-------------------------------------------------------------------------- | منوی تنظیمات |-------------------------------------------------------------------------- */ add_action( 'admin_menu', function () { add_submenu_page( 'woocommerce', 'نوار ارسال رایگان', '🚚 نوار ارسال رایگان', 'manage_woocommerce', 'awc-free-shipping', 'awc_free_shipping_settings_page' ); } ); /* |-------------------------------------------------------------------------- | ذخیره تنظیمات |-------------------------------------------------------------------------- */ add_action( 'admin_init', function () { if ( empty( $_POST['awc_save_settings'] ) ) { return; } if ( empty( $_POST['awc_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['awc_nonce'] ) ), 'awc_settings_nonce' ) ) { return; } $threshold = isset( $_POST['awc_threshold'] ) ? absint( $_POST['awc_threshold'] ) : AWC_FREE_SHIPPING_DEFAULT_THRESHOLD; $show_bar = isset( $_POST['awc_show_bar'] ) ? 'yes' : 'no'; update_option( 'awc_threshold', $threshold ); update_option( 'awc_show_bar', $show_bar ); add_action( 'admin_notices', function () { echo '

تنظیمات نوار ارسال رایگان ذخیره شد.

'; } ); } ); /* |-------------------------------------------------------------------------- | رایگان کردن هزینه ارسال بعد از رسیدن به حد نصاب |-------------------------------------------------------------------------- */ add_filter( 'woocommerce_package_rates', function ( $rates, $package ) { if ( ! function_exists( 'WC' ) || ! WC()->cart ) { return $rates; } $threshold = (float) get_option( 'awc_threshold', AWC_FREE_SHIPPING_DEFAULT_THRESHOLD ); if ( $threshold <= 0 ) { return $rates; } $current_total = awc_get_cart_progress_amount(); if ( $current_total $rate ) { /* * اگر افزونه یا روش ارسال خاصی با این شناسه دارید، * می‌توانید آن را از رایگان شدن مستثنی کنید. */ if ( false !== strpos( $rate_id, 'plus_shipping' ) ) { continue; } $rates[ $rate_id ]->cost = 0; if ( isset( $rates[ $rate_id ]->taxes ) && is_array( $rates[ $rate_id ]->taxes ) ) { foreach ( $rates[ $rate_id ]->taxes as $tax_key => $tax_value ) { $rates[ $rate_id ]->taxes[ $tax_key ] = 0; } } if ( false === strpos( $rates[ $rate_id ]->label, 'رایگان' ) ) { $rates[ $rate_id ]->label .= ' - رایگان'; } } return $rates; }, 999, 2 ); } ); /* |-------------------------------------------------------------------------- | صفحه تنظیمات مدیریت |-------------------------------------------------------------------------- */ function awc_free_shipping_settings_page() { $threshold = (int) get_option( 'awc_threshold', AWC_FREE_SHIPPING_DEFAULT_THRESHOLD ); $show_bar = get_option( 'awc_show_bar', 'yes' ); ?>

🚚 نوار پیشرفت ارسال رایگان

<input type="number" id="awc_threshold" name="awc_threshold" value="" min="0" step="1000" style="width:240px" />

مثال: برای ۲ میلیون تومان عدد 2000000 را وارد کنید.

نمایش نوار

'۰', '1' => '۱', '2' => '۲', '3' => '۳', '4' => '۴', '5' => '۵', '6' => '۶', '7' => '۷', '8' => '۸', '9' => '۹', ) ); } /* |-------------------------------------------------------------------------- | محاسبه مبلغ سبد |-------------------------------------------------------------------------- */ function awc_get_cart_progress_amount() { if ( ! function_exists( 'WC' ) || ! WC()->cart ) { return 0; } /* * مبلغ کالاها بعد از تخفیف. * هزینه ارسال و مالیات در این مبلغ محاسبه نمی‌شوند. */ $subtotal = (float) WC()->cart->get_subtotal(); $discount = (float) WC()->cart->get_discount_total(); return max( 0, $subtotal - $discount ); } /* |-------------------------------------------------------------------------- | دریافت اطلاعات نوار |-------------------------------------------------------------------------- */ function awc_get_shipping_progress_data() { $threshold = (float) get_option( 'awc_threshold', AWC_FREE_SHIPPING_DEFAULT_THRESHOLD ); $current = awc_get_cart_progress_amount(); $remaining = max( 0, $threshold - $current ); $percent = $threshold > 0 ? min( 100, round( ( $current / $threshold ) * 100 ) ) : 100; $empty = ( ! function_exists( 'WC' ) || ! WC()->cart || WC()->cart->is_empty() ); return array( 'threshold' => $threshold, 'current' => $current, 'remaining' => $remaining, 'percent' => $percent, 'reached' => $current >= $threshold, 'empty' => $empty, ); } /* |-------------------------------------------------------------------------- | ساخت HTML نوار |-------------------------------------------------------------------------- */ function awc_render_shipping_bar() { if ( 'yes' !== get_option( 'awc_show_bar', 'yes' ) ) { return ''; } $data = awc_get_shipping_progress_data(); if ( $data['empty'] ) { return ''; } $remaining = awc_fa_numbers( number_format_i18n( $data['remaining'] ) ); ob_start(); ?> <div class="awc-shipping-progress" data-percent="" data-reached="" >
ارسال رایگان شد 🎉 تومان تا ارسال رایگان
<div class="awc-shipping-progress__fill " style="width:%;" >

<?php return ob_get_clean(); } /* |-------------------------------------------------------------------------- | به‌روزرسانی نوار با fragments ووکامرس |-------------------------------------------------------------------------- */ add_filter( 'woocommerce_add_to_cart_fragments', function ( $fragments ) { $fragments['.awc-shipping-progress-global'] = '
' . awc_render_shipping_bar() . '
'; return $fragments; } ); /* |-------------------------------------------------------------------------- | چاپ نوار، CSS و JavaScript |-------------------------------------------------------------------------- */ add_action( 'wp_footer', function () { if ( is_admin() || ! function_exists( 'WC' ) || ! WC()->cart ) { return; } if ( 'yes' !== get_option( 'awc_show_bar', 'yes' ) ) { return; } ?>
(function($) { 'use strict'; var awcRefreshTimer = null; /* * سلکتورهای رایج Cart Drawer وودمارت */ function awcFindWoodmartDrawer() { return document.querySelector( '.whb-cart-dropdown, ' + '.wd-dropdown-cart, ' + '.cart-widget-side, ' + '.wd-side-hidden-cart, ' + '.woodmart-cart-widget' ); } /* * قراردادن نوار داخل Cart Drawer */ function awcInsertBarIntoDrawer() { var source = document.querySelector( '.awc-shipping-progress-global .awc-shipping-progress' ); if ( ! source ) { return; } var drawer = awcFindWoodmartDrawer(); if ( ! drawer ) { return; } var existingWrapper = drawer.querySelector( '.awc-shipping-progress-drawer' ); var sourceHtml = source.outerHTML; if ( existingWrapper ) { var oldHtml = existingWrapper.innerHTML; if ( oldHtml !== sourceHtml ) { existingWrapper.innerHTML = sourceHtml; } return; } var wrapper = document.createElement('div'); wrapper.className = 'awc-shipping-progress-drawer'; wrapper.innerHTML = sourceHtml; var cartContent = drawer.querySelector( '.woocommerce-mini-cart, ' + '.wd-cart-widget, ' + '.cart_list, ' + '.shopping-cart-widget-body' ); if ( cartContent && cartContent.parentNode ) { cartContent.parentNode.insertBefore( wrapper, cartContent ); } else { drawer.insertBefore( wrapper, drawer.firstChild ); } } /* * اجرای کنترل‌شده، بدون MutationObserver */ function awcScheduleRefresh() { clearTimeout( awcRefreshTimer ); awcRefreshTimer = setTimeout(function() { awcInsertBarIntoDrawer(); }, 250); } /* * رویدادهای استاندارد ووکامرس */ $(document.body).on( 'added_to_cart ' + 'removed_from_cart ' + 'updated_wc_div ' + 'updated_cart_totals ' + 'wc_fragments_refreshed', function() { awcScheduleRefresh(); } ); /* * رویدادهای رایج وودمارت */ $(document.body).on( 'woodmart_cart_updated ' + 'woodmart_update_cart ' + 'cart_updated', function() { awcScheduleRefresh(); } ); /* * وقتی کاربر روی آیکون سبد کلیک می‌کند، * چند بار محدود بررسی می‌کنیم تا Drawer فرصت باز شدن داشته باشد. */ $(document).on( 'click', '.woodmart-cart, .wd-header-cart, .shopping-cart, .cart-widget-opener, .wd-header-cart a', function() { awcScheduleRefresh(); setTimeout( awcInsertBarIntoDrawer, 600 ); setTimeout( awcInsertBarIntoDrawer, 1200 ); } ); /* * اجرای اولیه صفحه */ $(function() { awcScheduleRefresh(); setTimeout( awcInsertBarIntoDrawer, 1000 ); }); })(jQuery); <?php } );
سفید شدن صفحه پیشخوان

سایت انجام شده:Parsparts.com

وضعیت:حل شده

به علت پی اچ پی 8.4 بود که با قالب تداخل داشت پس به نسخه پایینتر کاهشش دادیم و رفع شد

بهینه کردن سرعت برای سایت های وودمارتی

سایت انجام شده:Parsparts.com

وضعیت:حل شده

فونت های وودمارتی برای لود شدن از چند بخش خیلی دیر لود میشدند.پس با کد سی اس اس سفارشی در تنظیمات خود وودمارت این مشکلو رفع کردیم:

کدنویسی:

/* ================================================== PEYDA V4 - FONT FACE ================================================== */ @font-face { font-family: 'Peyda V4'; src: url('/wp-content/themes/woodmart/fonts/PeydaWeb-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: 'Peyda V4'; src: url('/wp-content/themes/woodmart/fonts/PeydaFaNumWeb-SemiBold.woff2') format('woff2'); font-weight: 600; font-style: normal; font-display: swap; } @font-face { font-family: 'Peyda V4'; src: url('/wp-content/themes/woodmart/fonts/PeydaFaNumWeb-Bold.woff2') format('woff2'); font-weight: 700; font-style: normal; font-display: swap; } @font-face { font-family: 'Peyda V4'; src: url('/wp-content/themes/woodmart/fonts/PeydaNoEnWeb-ExtraBold.woff2') format('woff2'); font-weight: 800; font-style: normal; font-display: swap; } @font-face { font-family: 'Peyda V4'; src: url('/wp-content/themes/woodmart/fonts/PeydaWeb-Black.woff2') format('woff2'); font-weight: 900; font-style: normal; font-display: swap; } /* ================================================== GLOBAL SITE FONT ================================================== */ html, body { font-family: 'Peyda V4', sans-serif !important; } body :where( p, span, a, li, label, strong, b, em, small, h1, h2, h3, h4, h5, h6, button, input, textarea, select, option, .button, .wd-button, .wd-btn, .wd-entities-title, .wd-product-title ) { font-family: 'Peyda V4', sans-serif !important; } /* ================================================== ELEMENTOR ================================================== */ .elementor, .elementor * { font-family: 'Peyda V4', sans-serif !important; } /* ================================================== WOODMART TEXT ================================================== */ .wd-page-content, .wd-content, .wd-shop-content, .wd-products, .wd-product, .wd-product-grid, .wd-product-content, .wd-product-detail, .wd-single-product, .wd-cart, .wd-checkout, .wd-my-account { font-family: 'Peyda V4', sans-serif !important; } /* ================================================== DO NOT CHANGE ICON FONTS ================================================== */ /* Woodmart icons */ [class^="wd-icon"], [class*=" wd-icon"], [class^="woodmart-icon"], [class*=" woodmart-icon"] { font-family: "woodmart-font" !important; }

مشکل ورود به پیشخوان به خاطر دیجیتس

سایت انجام شده:khoshkbarmehrad.com

وضعیت:حل شده

وقتی دیجیتس فعال میشد و میخواستیم به پنل میدریت پیشخوان ورود کنیم به جای کادر ورود ،کادر ثبت نام دیجیتس ظاهر میشد.

روی سایت خشکبار مهراد (khoshkbarmehrad.com) هم متوجه مشکل شدم. افزونه Deactivate Plugins per Page چون فعال بود و توی اون قبلا تعریف کردیم که دیجیتس رو توی صفحات فعال نکن باعث شده بود دیجیتس درست کار نکنه. یا باید رول رو خاموش میکردیم با افزونشو غیرفعال.

مشکل خطا 503

سایت انجام شده:Parsparts.com

وضعیت:حل شده

  • سایت بخش دیدگاه هاش اسپم شده بود. برای محصولات ووکامرس و نوشته ها حدودا 31 هزار کامنت ثبت شد. پشت هم داشت کامنت ثبت میشد منابع سرور رو درگیر خود کرده بود.
    حتما باید برای سایتهای وردپرسی من بعد aksimet وردپرس و گوگل کپچا برای تشخیص ربات نصب کنیم تا اینجوری اسپم نشه سایت.
  • از بخش تنظیمات و دیدگاه این سه تا رو هم تیکش رو موقت برداشتم کسی کامنت نزاره
  • افزونه woodmart plus  جدی ترین مشکل رو بوجود اورد برا پیغام 503، غیرفعال کردم مشکل کلا حل شد فعلا.

 

پریدن سی اس اس

سایت انجام شده:benz-bmw-center

وضعیت:حل شده

برو:

پیشخوان → تنظیمات → عمومی

این دو مورد باید دقیقاً این باشند:

نشانی وردپرس (WordPress Address):

https://benz-bmw-center.com

نشانی سایت (Site Address):

https://benz-bmw-center.com


برو داخل پیشخوان:

Elementor → Editor → Settings → Performance

دنبال گزینه‌ای به اسم:

CSS Print Method

بگرد.

اگر روی:

External File

هست، تغییرش بده به:

Internal Embedding

طبق مستندات خود Elementor، این گزینه باعث می‌شود CSS به‌جای اینکه به‌صورت فایل جداگانه در /uploads/elementor/css/ ذخیره و لود شود، داخل HTML صفحه قرار بگیرد. خود Elementor هم این تغییر را برای عیب‌یابی مشکلات فایل‌های CSS پیشنهاد می‌کند.

بعد:

  1. Save Changes
  2. برو Elementor → Tools
  3. Clear Files & Data را بزن.
  4. کش سایت/وودمارت/LiteSpeed را پاک کن.
  5. سایت را با Ctrl + F5 باز کن.

دقت کن هر دو HTTPS باشند.

غیر فعال کردن دسترسی المنتور برای نقش مدیر فروشگاه

سایت انجام شده:khoshkbarmehrad.com

وضعیت:حل شده

کد زیر را در کد اسنیپ بزارید:

کدنویسی:

/** * ========================================================= * Block Elementor for Shop Manager * ========================================================= */ function mz_is_shop_manager() { $user = wp_get_current_user(); return in_array( 'shop_manager', (array) $user->roles, true ); } /** * حذف Elementor از نوار بالای سایت */ add_action( 'admin_bar_menu', function( $wp_admin_bar ) { if ( ! mz_is_shop_manager() ) { return; } $wp_admin_bar->remove_node( 'elementor_edit_page' ); $wp_admin_bar->remove_node( 'edit-with-elementor' ); }, 999 ); /** * حذف Elementor از منوی مدیریت */ add_action( 'admin_menu', function() { if ( ! mz_is_shop_manager() ) { return; } remove_menu_page( 'elementor' ); remove_menu_page( 'elementor-app' ); }, 999 ); /** * مخفی کردن دکمه‌های Elementor */ add_action( 'admin_head', function() { if ( ! mz_is_shop_manager() ) { return; } echo ''; }); /** * جلوگیری از ورود مستقیم به Elementor */ add_action( 'admin_init', function() { if ( ! mz_is_shop_manager() ) { return; } // Elementor Editor if ( isset( $_GET['action'] ) && $_GET['action'] === 'elementor' ) { wp_safe_redirect( admin_url() ); exit; } // Elementor Preview if ( isset( $_GET['elementor-preview'] ) ) { wp_safe_redirect( admin_url() ); exit; } }, 1 );

وصل کردن جت اسمارت فیلتر به لیستینگ شبکه جت انجین

سایت انجام شده:sun-cosmetic

وضعیت:حل شده

کندی سایت به دلیل به روز نبودن افزونه ووکامرسی فارسی

سایت انجام شده:khoshkbarmehrad.com

وضعیت:حل شده

مشکل کند بودن پیشخوان وردپرس خشکبار مهراد بخاطر افزونه ووکامرس فارسی بود. از ورژن 7 به 10 آپدیت شد مشکل حل شد

2خطی شدن تیتر عنوان در کارت محصول ساخته شده با جت انجین

سایت انجام شده:rahmataval.ir

وضعیت:حل شده

کدنویسی:

.elementor-174134 .elementor-element.elementor-element-518acce .elementor-heading-title, .elementor-174134 .elementor-element.elementor-element-518acce .elementor-heading-title > a { display: -webkit-box !important; -webkit-box-orient: vertical !important; -webkit-line-clamp: 2 !important; overflow: hidden !important; }

عدم نمایش درست سایت و خطای "یک خطای مهم در وردپرس وجود دارد"

سایت انجام شده:arabana.com

وضعیت:حل شده

این خطا هنگام ویرایش با المنتور صفحه اصلی وجود داشت:
یک خطای مهم در این وب سایت وجود دارد. لطفاً برای دستورالعمل‌ها، ایمیل مدیر سایت را بررسی نمایید. اگر همچنان مشکل دارید، لطفاً انجمن پشتیبانی را امتحان کنید.
دربارهٔ عیب‌یابی در وردپرس بیشتر بدانید.

یکسری اکستنشن های هاست فعتال شد تا مشکل رفع شد, اکستنشن های dom, xml ,xmlreader ,xmlwriter

ساخت ربات بله و اتصال به افزونه

سایت انجام شده:Parsparts.com

وضعیت:حل شده

جابجایی باکس تخفیف صفحه تسویه حساب

سایت انجام شده:gilzar.com

وضعیت:حل شده

مراحل جابه‌جایی باکس کد تخفیف ووکامرس در المنتور:

3) در المنتور، به کانتینری که می‌خواستم فرم داخلش نمایش داده شود، این کلاس را دادم:
my-custom-coupon-container

4) این کد را در functions.php یا Code Snippets گذاشتم تا فرم اصلی کوپن به آن بخش منتقل شود:

add_action('wp_footer', function() {
if ( is_checkout() ) {
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$(document.body).on('updated_checkout', function(){
moveCouponForm();
});

function moveCouponForm() {
var $form = $('.checkout_coupon');
var $target = $('.my-custom-coupon-container');

if ($form.length && $target.length && !$target.has($form).length) {
$form.appendTo($target);
$form.show();
$('.woocommerce-form-coupon-toggle').hide();
}
}

moveCouponForm();
});
</script>
<?php
}
});

5) برای استایل بهتر، این CSS هم اضافه شد:

.my-custom-coupon-container {
padding: 20px;
background: #f9f9f9;
border-radius: 8px;
margin-bottom: 20px;
}

.my-custom-coupon-container .checkout_coupon {
display: flex !important;
gap: 10px;
max-width: 100% !important;
}

نتیجه:
فرم کد تخفیف فقط جابه‌جا شد، ساختار اصلی حفظ شد، و دکمه اعمال کد بدون رفرش و درست کار می‌کند.

کدی که در باکس وارد کردم رو در کد اسنیپ گذاشتم

کدنویسی:

add_action('wp_footer', function() { if ( is_checkout() ) { ?> jQuery(document).ready(function($) { $(document.body).on('updated_checkout', function(){ moveCouponForm(); }); function moveCouponForm() { var $form = $('.checkout_coupon'); var $target = $('.my-custom-coupon-container'); if ($form.length && $target.length && !$target.has($form).length) { $form.appendTo($target); $form.show(); $('.woocommerce-form-coupon-toggle').hide(); } } moveCouponForm(); }); <?php } }); -------------------------------------------- برای استایل بهتر، این CSS هم اضافه شد: .my-custom-coupon-container { padding: 20px; background: #f9f9f9; border-radius: 8px; margin-bottom: 20px; } .my-custom-coupon-container .checkout_coupon { display: flex !important; gap: 10px; max-width: 100% !important; }

پریدن فایل های css/js کروسل صفحه اصلی

سایت انجام شده:gilzar.com

وضعیت:حل شده

بعد از نصب افزونه کش wp rocket تمامی فایل های css/jsصفحه اصلی پرید و کروسل ها فقط لینک داشتند ولی محتوایی نشون نمیدادند

راه حل:بعد از تست یکسری موارد برگه ی جدیدی ساخته شد و تمامی بخش های طراحی المنتور درگ و دراپ شد و در اخر برگه ی جدید رو به عنوان صفحه اصلی سایت فراخونی کردیم/همچنین در تنظیمات افزونه wp rocket تنظیمات مربوطه رو تیکشو برداشتم(عکس), بعد از تست یکسری موارد برگه ی جدیدی ساخته شد و تمامی بخش های طراحی المنتور درگ و دراپ شد و در اخر برگه ی جدید رو به عنوان صفحه اصلی سایت فراخونی کردیم

افزودن پاپ اپ دیجیتس در هدر وودمارت

سایت انجام شده:gilzar.com

وضعیت:حل شده

فقط کافیه در تنظیمات سربرگ ویجت متن html بیاری و کد کوتاه رو داخلش بزاری

عدم دریافت کد یکبار مصرف دیجیتس

سایت انجام شده:gilzar.com

وضعیت:حل شده

عدم دریافت کد یکبار مصرف دیجیتس خطایی مثل تصویر میاد:

کافیه در قسمت نمونه متن ارسالی به شماره موبایل کاربر عبارت داخل تصویر رو وارد کنی

رفع خطای int5 هنگام ارسال پیامک

سایت انجام شده:gilzar.com

وضعیت:حل شده

در تنظیمات مربوط به ارسال پیامک اول خطای int(-110) میومد و من پسوورد رو به apiتغییر دادم اما الان خطای int 5میاد برای معتبر نبودن شماره فرستنده

به پشتیبانی پیام دادم از طریق پنل ملی پیامک و شماره فرستنده رو تغییر دادن و مشکل رفع شد

رفتن به حالت لودینگ ویجت ها در المنتور

سایت انجام شده:gilzar.com

وضعیت:حل نشده

رفتن به حالت لودینگ ویجت ها در المنتور و درست نمیشد

افزونه زیر تداخل داشت: عمده فروشی محصولات ووکامرس / میل چیمپ برای وردپرس / فارسی ساز وودمارت

کدنویسی:

@font-face { font-family: 'Peyda V4'; src: url('/demo/wp-content/themes/woodmart/fonts/PeydaWeb-Black.woff2') format('woff2'); font-weight: 900; font-style: normal; font-display: swap; } /* فقط روی متن‌ها فونت اعمال بشه، نه روی آیکن‌ها */ body, button, input, textarea, select

عدم لینک پذیری مگا منو در بلوک اچ تی ام ال

سایت انجام شده:sun-cosmetic

کد پایین رو به سی اس اس اضافه کردم حل شد

کدنویسی:

.whb-submenu{
margin-top:0 !important;
padding-top:0 !important;
}
.whb-header,
.whb-main-header,
.whb-row{
overflow:visible !important;
}
/*dropdown link */
.wd-dropdown-menu.wd-design-aside{
pointer-events:auto !important;
}

حذف دکمه افزودن به سبد خرید و جایگزینی با دکمه پیش ثبت نام در قالب استادیار

سایت انجام شده:https://academy.gilmarketing.com/

کدنویسی:

کد php و css زده شد:

// حذف دکمه افزودن به سبد خرید
remove_action(
'woocommerce_single_product_summary',
'woocommerce_template_single_add_to_cart',
30
);

// افزودن دکمه جدید
add_action(
'woocommerce_single_product_summary',
'custom_course_register_button',
30
);

function custom_course_register_button() {

$link = 'https://academy.gilmarketing.com/pre-registration/';

echo '
<div class="course-register-wrapper">
<a href="' . esc_url($link) . '" class="course-register-btn">
پیش ثبت نام دوره
</a>
</div>';
}


.course-register-wrapper{
display:flex;
justify-content:center;
align-items:center;
width:100%;
margin:20px 0;
}

.course-register-btn{
display:inline-flex;
justify-content:center;
align-items:center;
min-width:220px;
padding:14px 30px;
background:#673894;
color:#fff;
border-radius:8px;
text-decoration:none;
font-size:16px;
font-weight:600;
transition:.3s;
}

.course-register-btn:hover{
background:#673894C6;
color:#fff;
}

موقع تسویه حساب خطای پر کردن ادرس میداد

سایت انجام شده:asencollection.com

موقع تسویه حساب با وجود اینکه فیلد ادرس پر شده بود اما خطای پر شدن ادرس میداد که برای اینکار افزونه woo checkout رو غ فعال کردیم و این کد را در اسنیپ کد گذاشتیم تا مشکل رفع شه:

کدنویسی:

add_action('woocommerce_after_checkout_validation', 'fix_address_validation_error', 10, 2);
function fix_address_validation_error($data, $errors) {
if (!empty($data['billing_address_1'])) {
foreach ($errors->errors as $code => $messages) {
foreach ($messages as $index => $message) {
if (strpos($message, 'آدرس') !== false || strpos($message, 'billing address') !== false) {
unset($errors->errors[$code][$index]);
}
}
}
}
}

ویژگی های اضافه شده برای تمامی محصولات اعمال شده

سایت انجام شده:khoshkbarmehrad.com

وضعیت:حل شده

راه حل:افزونه های زیر باهم تداخل داشتن غ فعال کردم:ویژگی های متنوع برای ووکامرس و variation swatch

راه حل 2:راه قبلی بعد از چند روز دیگه جواب گو نبود پس کاری کردم.دکمه افزودن به سبد خرید سفارشی رو در لوپ کارت محصولی که ساخته بودم حذف کردم و به جاش دکمه افزودن به سبد رو گذاشتم و در تنظیماتش نمایش مقدار رو خاموش کردم و مشکل رفع شد.

البته افزونه های woo variation & woo varaiation pro هم به اخرین نسخه اپدیت شدند.
افزونه wp-security-audit-log.5.6.4 روی سایتشون نصب شد تا تمامی فعالیت ها روش ثبت شه.

مشکل تعداد ورود غیر مجاز هنگام ورود به پیشخوان

سایت انجام شده:royancollection.com

مشکل تعداد ورود غیر مجاز هنگام ورود به پیشخوان

افزودن کد گرویتی داخل صفحه بعد از تسویه حساب برای روش پرداخت"انتقال مستقیم بانکی"

سایت انجام شده:shimmergold.ir

افزودن کد گرویتی داخل صفحه بعد از تسویه حساب برای روش پرداخت"انتقال مستقیم بانکی"

کدنویسی:

/** * اضافه کردن فرم Gravity Forms برای روش پرداخت "انتقال بانکی" * در صفحه "جزئیات سفارش" پس از تکمیل خرید. */ add_action('woocommerce_order_details_after_order_table', 'add_gravityform_for_direct_bank_after_checkout', 10, 1); function add_gravityform_for_direct_bank_after_checkout($order) { $payment_method_slug = 'bacs'; // اسلاگ روش پرداخت انتقال بانکی $uploaded_file_url = $order->get_meta('direct_bank_file_url'); // فرض می‌کنیم Gravity Forms این متا دیتا را ذخیره کند if ($order->get_payment_method() === $payment_method_slug) { ?>
<?php // اگر Gravity Forms فایلی را آپلود و ذخیره کرده باشد، آن را نمایش می‌دهیم. // این بخش نیاز به تنظیمات در خود Gravity Forms دارد تا فایل را به صورت متا دیتا ذخیره کند. if ($uploaded_file_url) { echo '

'; echo 'فیش واریزی: '; echo ''; echo esc_html($order->get_meta('direct_bank_file_name') ? $order->get_meta('direct_bank_file_name') : 'مشاهده فایل'); echo ''; echo '

'; } else { // نمایش فرم Gravity Forms echo do_shortcode('[gravityform id="2" title="true"]'); } ?>
get_payment_method() === 'bacs') { * // فرض می‌کنیم نام فیلد آپلود فایل در Gravity Forms 'field_upload_receipt' باشد * $file_upload_field_id = 'field_upload_receipt'; // شناسه فیلد آپلود در Gravity Forms شما * $file_url = RGFormsModel::get_field_value($entry, GFAPI::get_field($form, $file_upload_field_id)); * * if ($file_url) { * // استخراج نام فایل از URL * $file_name = basename(parse_url($file_url, PHP_URL_PATH)); * * $order->update_meta_data('direct_bank_file_url', esc_url($file_url)); * $order->update_meta_data('direct_bank_file_name', sanitize_file_name($file_name)); * $order->save(); * } * } * } * } */ /** * نمایش لینک فایل آپلود شده در صفحه جزئیات سفارش در پنل مدیریت */ add_action('woocommerce_admin_order_data_after_billing_address', 'display_gravity_file_admin_after_checkout', 10, 1); function display_gravity_file_admin_after_checkout($order){ $file_url = $order->get_meta('direct_bank_file_url'); $file_name = $order->get_meta('direct_bank_file_name'); $payment_method_slug = 'bacs'; // اسلاگ روش پرداخت if ($order->get_payment_method() === $payment_method_slug && $file_url) { echo '
'; echo '

' . __('اطلاعات انتقال بانکی', 'woocommerce') . '

'; echo '

' . __('فیش واریزی:', 'woocommerce') . ' '; echo '' . esc_html($file_name ? $file_name : __('مشاهده فایل', 'woocommerce')) . ''; echo '

'; echo '
'; } }

در حال لود...