مشکلات و راه حل ها
سایت انجام شده: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 استفاده کردیم تا همین الان هم قابلیت استفاده در چندین جا را داشته باشد، اما اگر با هم تداخل پیدا کردند، کافیست کلاسهای متفاوتی برای هر جفت متن و دکمه انتخاب کنید). این کد بسیار سبک است و هیچ فشاری به دیتابیس یا سرعت سایت شما وارد نمیکند. موفق باشید!
سایت انجام شده: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:
- ویجت Dynamic Field جتانجین را قرار دهید.
- Source: را روی
Post/Page Dataبگذارید. - Post Data: را روی Post ID (شناسه نوشته) بگذارید (در این حالت ابتدا یک عدد مثل
124نمایش داده میشود). - تیک گزینه Filter field output (فیلتر کردن خروجی فیلد) را در پایین همان پنل فعال کنید.
- در کادر 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:%;"
>
تنظیمات نوار ارسال رایگان ذخیره شد.
🚚 نوار پیشرفت ارسال رایگان
|
<input
type="number"
id="awc_threshold"
name="awc_threshold"
value=""
min="0"
step="1000"
style="width:240px"
/>
مثال: برای ۲ میلیون تومان عدد 2000000 را وارد کنید. |
|
| نمایش نوار |
سایت انجام شده: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 چون فعال بود و توی اون قبلا تعریف کردیم که دیجیتس رو توی صفحات فعال نکن باعث شده بود دیجیتس درست کار نکنه. یا باید رول رو خاموش میکردیم با افزونشو غیرفعال.
سایت انجام شده:Parsparts.com
وضعیت:حل شده
تحلیل مشکل:
- سایت بخش دیدگاه هاش اسپم شده بود. برای محصولات ووکامرس و نوشته ها حدودا 31 هزار کامنت ثبت شد. پشت هم داشت کامنت ثبت میشد منابع سرور رو درگیر خود کرده بود.
حتما باید برای سایتهای وردپرسی من بعد aksimet وردپرس و گوگل کپچا برای تشخیص ربات نصب کنیم تا اینجوری اسپم نشه سایت.
- از بخش تنظیمات و دیدگاه این سه تا رو هم تیکش رو موقت برداشتم کسی کامنت نزاره
- افزونه woodmart plus جدی ترین مشکل رو بوجود اورد برا پیغام 503، غیرفعال کردم مشکل کلا حل شد فعلا.
حتما باید برای سایتهای وردپرسی من بعد aksimet وردپرس و گوگل کپچا برای تشخیص ربات نصب کنیم تا اینجوری اسپم نشه سایت.
راه حل ها:
سایت انجام شده: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 پیشنهاد میکند.
بعد:
- Save Changes
- برو Elementor → Tools
- Clear Files & Data را بزن.
- کش سایت/وودمارت/LiteSpeed را پاک کن.
- سایت را با
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 );
سایت انجام شده:khoshkbarmehrad.com
وضعیت:حل شده
تحلیل مشکل:
مشکل کند بودن پیشخوان وردپرس خشکبار مهراد بخاطر افزونه ووکامرس فارسی بود. از ورژن 7 به 10 آپدیت شد مشکل حل شد
راه حل ها:
سایت انجام شده: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
سایت انجام شده: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; }
سایت انجام شده:gilzar.com
وضعیت:حل شده
تحلیل مشکل:
بعد از نصب افزونه کش wp rocket تمامی فایل های css/jsصفحه اصلی پرید و کروسل ها فقط لینک داشتند ولی محتوایی نشون نمیدادند
راه حل ها:
راه حل:بعد از تست یکسری موارد برگه ی جدیدی ساخته شد و تمامی بخش های طراحی المنتور درگ و دراپ شد و در اخر برگه ی جدید رو به عنوان صفحه اصلی سایت فراخونی کردیم/همچنین در تنظیمات افزونه wp rocket تنظیمات مربوطه رو تیکشو برداشتم(عکس), بعد از تست یکسری موارد برگه ی جدیدی ساخته شد و تمامی بخش های طراحی المنتور درگ و دراپ شد و در اخر برگه ی جدید رو به عنوان صفحه اصلی سایت فراخونی کردیم
سایت انجام شده: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 روی سایتشون نصب شد تا تمامی فعالیت ها روش ثبت شه.
راه حل ها:
سایت انجام شده: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 ''; } }
'; 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"]'); } ?>' . __('اطلاعات انتقال بانکی', 'woocommerce') . '
'; echo '' . __('فیش واریزی:', 'woocommerce') . ' '; echo '' . esc_html($file_name ? $file_name : __('مشاهده فایل', 'woocommerce')) . ''; echo '
'; echo '

















