سألني صديق من فترة عن طريقة إدراج محتوى داخل المقالات مع إمكانية تغييره والتحكم به كليا، أول شيء خطر في ذهني هو إنشاء حقل من نوع textarea في مخصص ووردبريس وجعل محتواه يظهر داخل التدوينة، لكن الفكرة لم تقنعني لأنه في هذه الحالة فقط سنتمكن من إضافة نصوص أو أكواد فقط وليس كل ما نرغب به … الفكرة التي أعجبتني بالفعل هي إنشاء sidebar وإدراجه داخل التدوينة وهكذا سنتمكن من وضع أي شيء داخلها، وعندما أقول أي شيء يعني أي شيء يخطر في بالك يمكن إدراجه وسط محتوى التدوينة 🙂
إنشاء سايدبار جديد
للوصول إلى النتيجة المرغوبة أول شيء سنقوم به إذا هو إنشاء sidebar جديد وذلك باستعمال الوظيفة register_sidebar()
التي يمكن أن نمرر لها array
يحتوي على سبعة عناصر، أهم هذه العناصر هما ال name وال id.
$args = array(
'name' => __( 'Content sidebar', 'text_domain' ),
'id' => 'content-sidebar',
'description' => '',
'class' => 'content-sidebar',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widgettitle">',
'after_title' => '</h3>'
);
register_sidebar( $args );
جلب السايدبار
في ووردبريس نتوفر على وظيفة dynamic_sidebar التي تستعمل لطباعة السايد بار، لكن لا توجد أي وظيفة من نوع get ، أظنك فهمت لماذا نريد وظيفة من نوع get، نعم نحتاجها لغرض استعمالها في الفلتر the_content.
الطريقة التي خطرت في بالي هي الآتية، إذا كانت لديك فكرة أخرى أعلمني بها إذا 🙂 وشكرا مسبقا.
if ( ! function_exists( 'get_dynamic_sidebar' ) ) {
function get_dynamic_sidebar( $name ) {
if ( ! is_active_sidebar( $name ) ) {
return;
}
ob_start();
dynamic_sidebar( $name );
return ob_get_clean();
}
}
إدراج سايد بار وسط محتوى المقالات
الآن لدينا السايد بار ولدينا الوظيفة get_dynamic_sidebar()
، فقط بقي لنا إدراجه داخل محتوى المقالات، لأجل هذا سأقوم باستعمال كود متداول بشكل كبير في الإنترنت وكنت قد استعملته من قبل في تدوينة وضع الإعلانات داخل محتوى المقالة، لكن مع بعض التغييرات الطفيفة، حيث أن الكود الأصلي يمكن بواسطته إضافة محتوى بعد فقرة معينة من المقالة لكن أنا قمت بالتعديل عليه لكي يقوم بإضافة السايد بار الخاص بنا في منتصف المقالة بالضبط.
function insert_sidebar( $insertion, $content ) {
$closing_p = '</p>';
$paragraphs = explode( $closing_p, $content );
$paragraph_count = count($paragraphs );
$paragraph_id = floor( $paragraph_count / 2 );
foreach ($paragraphs as $index => $paragraph) {
if ( trim( $paragraph ) ) {
$paragraphs[$index] .= $closing_p;
}
if ( $paragraph_id == $index + 1 ) {
$paragraphs[$index] .= $insertion;
}
}
return implode( '', $paragraphs );
}
أول شيء تقوم به الوظيفة هو تفكيك المحتوى بواسطة وظيفة ال PHP pexplode()
ثم بعدها الحصول على عدد الفقرات الموجودة في المحتوى بواسطة وظيفة ال PHP count()
وبالتالي قسمته على 2 وذلك للحصول على نصف عدد الفقرات، ما تبقى أظن أنه مفهوم بما فيه الكفاية.
الأن كل ما علينا فعله هو “فلترة” محتوى المقالة وإدراج السايد بار في وسطها باستخدام الوظيفة insert_sidebar()
function insert_sidebar_in_the_content( $content ) {
if ( ! is_singular( 'post' ) ) {
return $content;
}
$sidebar = get_dynamic_sidebar( 'content-sidebar' );
$content = insert_sidebar( $sidebar, $content );
return $content;
}
add_filter( 'the_content', 'insert_sidebar_in_the_content' );
كان هذا هو كل شيء بالنسبة لتدوينة اليوم، الآن إذا أحببت كذلك يمكنك إضافة سايد بار جديد وإدراجه قبل محتوى المقالة وآخر لإدراجه في نهاية المحتوى … وبهذه الخطوات البسيطة سوف تتمكن من إضافة أي شيء تريده إلى تدويناتك، على سبيل المثال إعلانات، مقالات ذات صلة، أكواد قصيرة أو أي ودجة موجودة عندك.
إذا أعجبك الموضوع ووجدته مفيد، لا تنسى مشاركته مع أصدقائك لكي يستفيد عدد أكبر من الناس
يزيد قال
مشكووور جداً على المقالة الرائعة أستاذ سعيد، جزاك الله خيراً.
سعيد البقالي قال
العفو أخي يزيد، يفرحني أن التدوينة لقت اعجابك 🙂
Elsayed قال
شكرا لك على الشرح الجيد ساجربها الان
سعيد البقالي قال
العفو أخي، أتمنا أن تكون مفيدة لك ولكل الوافدين على مدوونتي المتواضعة 🙂
عيسى محمد علي قال
شكرا صديقي سعيد،
هذه الطريقة مفيدة جدا، خاصة للأشخاص الذين يسألون عن كيفية وضع فورم النشرة البريدية وسط التدوينة.
تحياتي لكم على هذا المحتوى الممتاز.
سعيد البقالي قال
العفو أخي عيسى، شكرا لك أنت على مرورك العطر والرفع من معنوياتي في ظل هذه الظروف المريرة … ?
عدنان السعيدي قال
شكرا جزيلا .. وجعله الله في ميزان حسناتك
محمد الجيلاني قال
شكرا لك على ابداعاتك اخي سعيد فعلا مقالاتك وشروحاتك تفيد الزائر وتخليه يعود غصبا عنه ?
عشان يتعلم منك ومن ابداعاتك استمر الله يحفظك
حامد عبد الله قال
جزاك الله خير يا باشمهندس سعيد و نسأل الله عز وجل ان يجعل هذا في ميزان حسناتك
الموضوع اعجبني لكن لدي بعض سؤال :
اين اضع كود انشاء الsidebar و بقية الاكواد في الوردبريس؟
سعيد البقالي قال
اللهم أمين أخي حامد، كل الأكواد المذكورة في هذه التدوينة يمكنك وضعها داخل ملف [code lang=”php” inline=”true”]functions.php[/code] أو من الأفضل عمل إضافة خاصة بك، تم شرح ذلك في تدوينة إنشاء إضافة لتنظيم الوظائف في ووردبريس.
بالتوفيق.
خالد العنزي قال
من أفضل الأشخاص في هذا المجال بالفعل الموقع الوحيد الذي وضعته في المفضلة وأستخدمه كمرجع لي
في إضافات وتحسينات موقعي المتواضع ..جزاك الله كل خير أخي سعيد لما تقدمه بدون أسلوب بعض المدونين
الذي يرمي لتشتيت الزائر بين الصفحات للحصول على المعلومة بارك الله بك
قمرين قال
موضوع رائع جدا