اذهب إلى المحتوى

لوحة المتصدرين

  1. maram mohammed

    maram mohammed

    الأعضاء


    • نقاط

      2

    • المساهمات

      60


  2. Anmar Fadel

    Anmar Fadel

    الأعضاء


    • نقاط

      2

    • المساهمات

      36


  3. سارة فايز

    سارة فايز

    الأعضاء


    • نقاط

      2

    • المساهمات

      5


  4. Ahmad Mohee

    Ahmad Mohee

    الأعضاء


    • نقاط

      1

    • المساهمات

      2


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 04/08/20 في كل الموقع

  1. الهواتف الذكيّة والسيارات، الحواسيب الخارقة والأجهزة المنزلية، أجهزة سطح المكتب وخواديم الشركات - كلها تستعمل نظام التشغيل لينكس، النظام الذي ستراه حولك أينما أدرت وجهك. بدأ نظام التشغيل لينكس منذ منتصف التسعينات تقريبًا وقد حقّق منذئذ قاعدة مستخدمين ضخمة تجوب العالم. وكما مستخدميه، فلينكس في كل مكان: أجهزتك المحمولة، منظّمات الحرارة، السيارات، الثلاجات، أجهزة Roku لبثّ الوسائط المتعدّدة، أجهزة التلفاز، وغيرها وغيرها. ولا ننسى أنّ أغلب شبكة الإنترنت تعمل عليه، إضافةً إلى أقوى 500 حاسوب خارق في العالم، كما والبورصة أيضًا. ولكن لو نسينا لبرهة أنّه الخيار الأمثل لتشغيل الأجهزة المكتبيّة والخواديم والأنظمة المضمّنة، فنظام التشغيل لينكس هو أكثر نظام من بين الأنظمة الموجودة - أكثرها أمانًا وثقةً ويُسرًا دون متاعب تُذكر. كتبنا لك أدناه كل ما تحتاجه لتكون عارفًا وعالمًا بمنصّة لينكس. فلو كنت مبتدئًا، فلا تقلقنّ البتة. ما هو نظام التشغيل لينكس أصلًا؟ ”وندوز“ و”آي‌أو‌إس“ و”ماك أو‌إس“ هي أنظمة تشغيل، ولينكس أيضًا نظام تشغيل. وفي هذا السياق، أتعلم أنّ أكثر منصّة رائجة في كوكبنا الأرض ”أندرويد“ تعمل بنظام التشغيل لينكس؟ نظام التشغيل (ويُختصر بِـ OS) هو البرمجية التي تُدير كلّ ما يتعلّق بالعتاد في حاسوبك المكتبي أو المحمول. لنبسّطها أكثر، نظام التشغيل يُدير الاتصالات بين البرمجيّات (Software) والعتاد (Hardware) على جهازك. ودون نظام التشغيل فلن تعمل أيًا من البرامج. يعتمد أساس نظام التشغيل لينكس على هذه الأجزاء المختلفة: محمِّل الإقلاع (Bootloader): أي البرمجية التي تُدير عمليّة إقلاع/تشغيل حاسوبك. حين يرى أغلب المستخدمين شاشة البداية التي تظهر أمامهم وتختفي بعد فترة لتفتح نظام التشغيل، تعرف أنّهم قد رأوا هذا المحمِّل. النواة (Kernel): في الواقع فَإن نظام التشغيل لينكس مكوّن من أجزاء عديدة، النواة هذه واحدة منها. كما يدلّ اسمها، فهي نواة النظام والتي تُدير المعالج والذاكرة والأجهزة الداخليّة والخارجيّة. تعد النواة المستوى الأدنى من مستويات نظام التشغيل وهي حلقة الوصل الفعليّة بين البرمجيّات والعتاد. نظام التمهيد (Init System): هذا أحد الأنظمة الفرعيّة التي ”تُمهّد“ المساحة المخصّصة للمستخدم، إضافةً إلى إدارة العفاريت. أكثر هذه الأنظمة استعمالًا هو systemd ويتصادف أنّه أيضًا أكثرها جدلًا بين المستخدمين. تقع على عاتق هذا النظام إدارةَ عمليّة الإقلاع ما إن يُسلِّم محمّل الإقلاع (مثل GRUB أي ”محمِّل الإقلاع الموحّد الأعظم“ [GRand Unified Bootloader]) عمليّة الإقلاع الأولي. العفاريت (Daemons): الخدمات التي تجري في الخلفيّة (مثل الطباعة والصوت وترتيب مهام النظام وغيرها) تُسمّى بالعفاريت، ويمكن أن تبدأ إمّا أثناء الإقلاع أو بعد الدخول إلى سطح المكتب. تعمل هذه الخدمات بمنأًى عن تحكّم المستخدم المباشر، ويمكن أن تنفّذ مختلف الوظائف والعمليات والأوامر. خادوم الرسوميّات (Graphical Server): هذا أحد الأنظمة الفرعيّة الأخرى التي تعرض أيّ رسوم ورسوميّات على الشاشة لديك. النسخة الأولية منه كانت ”خادوم X“ (أو إكس/X اختصارًا)، أما الآن فالتوجه نحو Wayland وهو أفضل من نواحٍ عدّة عن سلفه ”خادوم X“. بيئة سطح المكتب (Desktop Environment): هذه هي ما يتفاعل المستخدمين معه حقًا. توجد أعداد كبيرة من بيئات سطح المكتب ليختار المستخدم ما يُريحه منها (جنوم أو القرفة أو متّة أو بانيثون أو إنلايتمنت أو كدي أو إكسفسي أو غيرها). وفي كلّ بيئة سطح مكتب عدد من التطبيقات المثبّتة مبدئيًا (مثل مدراء الملفات وأدوات الضبط ومتصفّحات الوِب والألعاب). التطبيقات: بالطبع، لا تقدّم بيئات سطح المكتب كلّ ما تحتاج من تطبيقات. فكما نظامي وندوز وماك أو‌إس، يقدّم نظام التشغيل لينكس أيضًا آلافًا مؤلّفة من البرمجيات الموثوقة عالية الكفاءة وسهلة الوصول والتثبيت. أصبحت تحتوي أغلب توزيعات لينكس الحديثة (نتطرّق إليها أسفله) أدوات تشبه ”أسواق البرامج“ تحاول تبسيط تثبيت البرمجيات وتوحيدها في مكان واحد. فمثلًا تحتوي توزيعة أوبنتو لينكس على ”مركز برمجيات أوبونتو“ (نسخة من «برمجيّات جنوم») وهو يقدّم لك آليّة سهلة للبحث بسرعة بين آلاف التطبيقات وتثبيتها، كلّه في مكان واحد. ما هي مزايا نظام التشغيل لينكس؟ يطرح أغلب الأشخاص هذا السؤال بالذات. لماذا أُتعب نفسي وأتعلّم بيئة حاسوبيّة مختلفة تمامًا عمّا أعرف، طالما نظام التشغيل -المثبّت في أغلب الأجهزة المكتبية والمحولة والخواديم- يعمل دون مشاكل تُذكر؟ لأُجيبك على هذا السؤال سأطرح سؤالًا آخر. هل حقًا يعمل نظام التشغيل الذي تستعمله الآن ”دون مشاكل تُذكر“؟ أمّ أنّك تصارع (بل وتكافح ضدّ) المصاعب المتوالية من فيروسات وبرامج ضارّة وحالات بطء وانهيارات وإصلاحات باهظة للنظام ورسوم تراخيص ثقيلة؟ لو كنت حقًا كذلك فربّما تكون لينكس المنصّة الأمثل لاحتياجاتك! فقد تطوّر نظام التشغيل لينكس وصار واحدًا من الأنظمة البيئيّة الثِّقة للحواسيب على هذه البسيطة. هذه الثِّقة زائدًا تكلفة الصفر قرش ستكون حقًا أمثل حلّ لمنصّات أسطح المكتب. نظام تشغيل مجاني كما قلتُ تمامًا، صفر قرش… أي مجانًا. يمكنك تثبيت نظام التشغيل لينكس على الحواسيب التي تريد (مهما كان العدد) دون أن تدفع ولو قرشًا لتراخيص البرمجيّات أو الخواديم. تعال نرى تكلفة خادوم لينكس موازنةً بخادوم وندوز 2016. تكلفة Standard edition من Windows Server 2016 هي 882 دولارًا (نشتريها من مايكروسوفت مباشرةً). هذا لا يشمل ترخيص الوصول للعميل (CAL) ورُخص البرمجيات الأخرى التي سيشّغلها الخادوم (مثل قاعدة البيانات وخادوم الوِب وخادوم البريد وغيرها). فمثلًا يُكلّف ترخيص CAL لمستخدم واحد لِـ Windows Server 2016 38 دولارًا. لو اضطررت إلى إضافة 10 مستخدمين فتزيد عليها 388 أخرى فقط لترخيص برمجيات الخادوم. لو كنت على خادوم لينكس فسيكون كلّ هذا مجانيًا وسهل التثبيت. بل أنّ تثبيت خادوم وِب كامل متكامل (ويشمل خادوم قواعد بيانات) عمليّة قوامها بعض النقرات أو الأوامر (لتعرف مدى بساطة ذلك طالع ”كيفية تثبيت حزم LAMP“). ألم تقتنع بعد بالصفر قرش؟ إذًا لو أخبرتك بنظام تشغيل سيعمل دون أيّة مشكلة تُذكر مهما طال استخدامك له، ما تقول؟ استعملت شخصيًا نظام التشغيل لينكس طوال 20 سنة أو يزيد (أكان لجهاز المكتب أم لمنصّة الخادوم) ولم أواجه قط أيّ مشكلة مع برامج الفِدية أو البرامج الضارة أو الفيروسات أو غيرها. فلينكس (وبصفة عامة) أقلّ تعرضًا لهذه الأخطار والاعتداءات من غيره. وحين نتحدّث عن إعادة إقلاع الخادوم، فهي مطلوبة فقط وفقط عند تحديث النواة. ولو سمعت بأنّ خواديم لينكس تعمل لسنوات وسنوات دون إعادة إقلاعها فلا تستغرب، هذا طبيعي. لو أخذت بالتحديثات المستحسن تثبيتها دوريًا، فتأكّد من ثبات النظام واستقلاليّته، وليس هذا حبرًا على ورق، بل كلام عمليّ مُثبت. بل أنّ منهجيّة ”اضبطه مرّة وانساه كل مرّة“ (Set it and forget it) هي المتّبعة في أوساط خواديم لينكس. مفتوح المصدر كما وأنّ نظام التشغيل لينكس يُوزّع برخصة مفتوحة المصدر. وهذا ما تضمنه لك فلسفات البرمجيات مفتوحة المصدر: حريّتك في تشغيل البرنامج لأيّ سبب أردته. حريّتك في دراسة أسلوب وطريقة عمل البرنامج، كما وتغييرها لتتناسب مع رغباتك. حريّتك في إعادة توزيع نُسخ البرنامج لتُساعد جارك في الانتقال. حريّتك في توزيع نُسخ البرنامج التي عدّلتها للآخرين. إدراك هذه النقاط ضروري لتفهم طبيعة المجتمع الذي يعمل على تطوير منصّة لينكس. ولا شكّ بأنّ لينكس هو نظام ”طوّره الناس، ليستعمله الناس“. كما أنّ هذه الفلسفات هي من الأسباب الرئيسية لتفضيل الناس لينكس على غيره. الحريّة، حريّة الاستخدام، حريّة الخيار، هذا ما يسعى وراءه المرء. ما هي توزيعات نظام التشغيل لينكس؟ توجد عديد من الإصدارات المختلفة من نظام التشغيل لينكس الهادفة إلى تقديم الخيار لجميع الناس مهمًا كانوا، أكانوا مستخدمين جدد أو معمّرين. أيًا كنت فستجد ”نكهة“ من لينكس تناسب متطلباتك واحتياجاتك. هذه الإصدارات هي ما نسمّيه التوزيعات (Distribution). يمكن تنزيل كلّ توزيعة من توزيعات لينكس مجانًا (إلى حدّ ما)، وحرقها على اسطوانة (أو جهاز USB) وتثبيتها (على أيّ جهاز أردت، بل وأجهزة أيضًا). من التوزيعات الشائعة للينكس: لينكس مِنت (Linux Mint) مانجارو (Manjaro) دِبيان (Debian) أوبونتو (Ubuntu) أنتيرغوس (Antergos) سولوس (Solus) فيدورا (Fedora) إليمنتري أو‌ إس (elementary OS) أوبن سوزة (openSUSE) لكلّ توزيعة منها توجّه مختلف على ماهيّة سطح المكتب. بعضها تفضّل واجهات المستخدم الحديثة (مثل جنوم وبانيثون في ”نظام تشغيل إليمنتري“)، والأخرى تفضّل البقاء مع بيئات سطح المكتب التقليدية (مثل أوبن سوزة التي تستخدم كدي). يمكنك أيضًا مطالعة موقع Distrowatch لتعرف أفضل 100 توزيعة لينكس من جهة نظر المجتمع. ولو فكّرت للحظة بأنّ الخواديم ليس لها نصيب من هذا، فأنت مخطئ! انظر: Red Hat Enterprise Linux Ubuntu Server CentOS SUSE Enterprise Linux بعض هذه التوزيعات المخصّصة للخواديم مجّاني (مثل Ubuntu Server وCentOS)، وأخرى تطلب ثمنًا لقائها (مثل Red Hat Enterprise Linux وSUSE Enterprise Linux). هذه التي تطلب الثمن تقدّم الدعم الفنّي أيضًا. ما هي توزيعة لينكس التي تناسبني؟ إجابتك على هذه الأسئلة الثلاثة تحدّد التوزيعة الأنسب لك: مدى خبرتك بالأمور التقنية والحاسوبية. أكنت تريد واجهة مستخدم حديثة أم قياسية عادية. أكنت تريده للخادوم أو للأجهزة المكتبية. لو كانت خبرتك ومهاراتك بالحاسوب بسيطة، فالأفضل أن تتّجه نحو توزيعة تناسب المبتدئين مثل Linux Mint أو Ubuntu أو Elementary OS أو Deepin. ولو كانت مهاراتك فوق المتوسّط، فستكون التوزيعات أمثال Debian وFedora أفضل لك. أمّا لو كنت ”احترفت مِهنة الحاسوب“ وإدارة الأنظمة، فتوزيعة جنتو وأمثالها طُوّرت لك خصّيصًا. لكن، لو أردت تحدّيًا لمهاراتك الفذّة أخي الخبير، فاصنع توزيعة لينكس خاصّة بك أنت، طبعًا مستعينًا بِـ Linux From Scratch. في حال كنت تبحث عن توزيعة للخواديم فقط، فالسؤال الرابع هو لو أردت واجهة سطح مكتب أم أنّك ستُدير الخادوم عبر سطر الأوامر دون واجهة. فمثلًا Ubuntu Server لا تحتوي واجهة رسوميّة، وهذا يعطيك ميزتين. الأولى هي إزاحة ثقل تحميل الرسوميات عن الخادوم، والثانية هي تعلّم سطر أوامر لينكس تعلّمًا عميقًا. يمكنك مع ذلك تثبيت حزمة واجهة رسوميّة في Ubuntu Server بأمر بسيط مثل sudo apt-get install ubuntu-desktop. غالبًا ما يختار مدراء الأنظمة التوزيعات حسب الميزات التي تقدّمها. فهل تريد توزيعة متخصّصة للخواديم تقدّم لك كل ما تحتاجه لخادومك على طبق من فضّة؟ لو أردت فستكون CentOS فضل الخيارات. أو ربما تريد توزيعة لسطح المكتب تُضيف ما تريد من برامج وحزم فيها؟ لو كان كذلك فستقدّم لك Debian أو Ubuntu Linux ما تحتاج. ننصحك بالرجوع إلى مقالة الدليل النهائي لاختيار توزيعة لينكس لمزيد من التفاصيل حول التوزيعات واختيارها. تثبيت لينكس لسان حال أغلب الناس عن تثبيت نظام التشغيل هو ”ماذا؟ صعب! مستحيل! محال!“. بينما الواقع (صدّقته أم لا) هو أنّ تثبيت نظام التشغيل لينكس هو الأسهل من بين كلّ أنظمة التشغيل. بل أنّ أغلب نُسخ لينكس تقدّم لك ما نسمّيه ”التوزيعة الحيّة“ (Live Distribution)، أي التي تشغّل منها نظام التشغيل وهو على اسطوانة CD/DVD أو على إصبع USB (فلاش ميموري) دون أن تُعدّل أيّ بايت في القرص الصلب. هكذا تعرف بمزايا التوزيعة كاملةً دون تثبتيها حتّى، وما إن تجرّبها وترتاح لها، وتقرّر وتقول ”هذه هي توزيعة أحلامي“، تنقر مرّتين أيقونة ”ثبِّت“ وسيأخذك مُرشد التثبيت في رحلة التثبيت البسيطة (فقط!). غالبًا ما تكون رحلة مُرشد التثبيت هي هذه الخطوات (نوضّح هنا عملية تثبيت Ubuntu Linux): التحضير: التأكّد من استيفاء الجهاز لمتطلّبات التثبيت. يمكن أن يسألك هذا لو أردت تثبيت برمجيّات من الأطراف الثالثة (مثل ملحقات تشغيل MP3 ومرمزات الفيديوهات وغيرها). إعداد الاتصال اللاسلكي (لو أردته): في حال كنت تستعمل حاسوبًا محمولًا (أو جهازًا يدعم الاتصال لاسلكيًا) فقد يُطلب منك الاتصال بالشبكة لتثبيت برمجيات الأطراف الثالثة والتحديثات. تخصيص المساحة للقرص الصلب: تُتيح لك هذه الخطوة اختيار المكان الذي سيُثبّت فيه نظام التشغيل، وهل تريد تثبيت لينكس مع نظام تشغيل آخر (أي ”الإقلاع المزدوج“) أو استعمال القرص الصلب كلّه أو ترقية نسخة لينكس المثبّتة أو تثبيت لينكس عوض النسخة التي لديك. المكان: أي، مكانك على الخريطة. تخطيط لوحة المفاتيح: لغات الكتابة التي تريدها في النظام. إعداد المستخدم: أي اسم المستخدم وكلمة السر. طبعًا، يمكنك ألّا تحذف كامل القرص بما فيه (مثلما ترى في الصورة أعلاه ”تحذير“)، بل تعديل بعضه وإبقاء الآخر عبر الخيار الآخر Something else (ويفضّل طبعًا تحديد مساحة لقرص التبديل/Swap تتناسب وحجم الذاكرة). وعلى سبيل الطرفة، كثير من مستعملي لينكس يواجهون هذه المشكلة أول مرة ويمسحون جميع بياناتهم المخزنة على القرص، حتّى أنا مترجم المقال فكن حذرًا إني لك من الناصحين :-). لكن هذا ليس سببًا بأنّ لينكس نظام سيئ (وبالعامية ”قمامة“)، لكنه سببٌ ”لأقرأ كامل السؤال قبل الإجابة“ :). يمكنك أيضًا تعمية القرص لتكون آمنًا من أيّ هجمات محتملة. فقط. هذا فقط. وما إن ينتهي تثبيت النظام، أعِد التشغيل واشرع العمل! لو أردت دليلًا لتثبيت لينكس معمّقًا أكثر، فطالع ” أسهل وأأمن طريقة لتثبيت لينكس وتجربته“ أو نزّل كتيّب PDF عن تثبيت لينكس من مؤسّسة لينكس نفسها. تثبيت البرمجيات في لينكس كما كان تثبيت نظام التشغيل سهلًا، فتثبيت التطبيقات سهل أيضًا. تحتوي أغلب توزيعات لينكس على ما يمكن تسميته بسوق للبرمجيات، وهو مكان موحّد يمكنك البحث فيه عن ما تريد من برامج وتثبيتها. تعتمد Ubuntu Linux (وغيرها الكثير) على «برمجيّات جنوم»، وتستعمل Elementary OS مركز AppCenter، أمّا Deepin فَـ Deepin Software Center، و openSUS أداة AppStore، وثمّة توزيعات تعتمد على Synaptic. مهما كان الاسم فالوظيفة واحدة: مكان واحد لتبحث عن برامج لينكس فيه، وتثبّتها أيضًا. وبالطبع، فهذه البرمجيات تعتمد على الواجهة الرسومية، لو لم تكن موجودة لما عملت. فلو لديك خادوم بدون واجهة فعليك استعمال واجهة سطر الأوامر لتثبيت البرامج. ولهذا سنأخذ نظرة سريعة على أداتين مختلفين لنوضّح سهولة التثبيت من سطر الأوامر، أسهل من شرب الماء ربما. تُستعمل هاتين الأداتين في التوزيعات المبنيّة على Debian، والمبنيّة على Fedora تستعمل الأولى (توزيعات دبيان) أداة apt-get لتثبيت البرمجيات، أمّا توزيعات فيدورا تستعمل أداة yum، ولكلتا الأداتين آلية عمل متشابهة سنوضّحها باستعمال أمر apt-get. فلنقل فرضًا أنّك تريد تثبيت أداة wget (أداة مفيدة جدًا لتنزيل الملفات عبر سطر الأوامر). لتثبيت هذه الأداة باستعمال apt-get، ستُدخل هذا الأمر: sudo apt-get install wget نُضيف أمر sudo لأنّ تثبيت البرمجيات يطلب امتيازات المستخدم الفائقة (مدير الجهاز). وكما دبيان، فتثبيت البرامج في توزيعات فيدورا على خطوتين: أولا su للامتيازات تلك (أي أن تكتب الأمر su وتُدخل كلمة سرّ الجذر)، بعدها: yum install wget هذا كل ما تحتاجه لتثبيت البرامج في جهاز لينكس. أكان صعبًا ومحالًا كما تخيّلته؟ لا تقل لي أنّك متردّد بعد؟! أتذكر ”كيفيّة تثبيت حزم LAMP“ التي تكلمنا عنها؟ بأمر واحد: sudo taskel بأمر واحد تُثبّت خادوم LAMP (اختصار Linux Apache MySQL PHP أي ”حزمة لينكس وأباتشي وMySQL وPHP“) متكامل على توزيعتك كانت للخواديم أم للأجهزة المكتبية. أجل، بأمر واحد فقط. سهل صحيح؟ مصادر أخرى للاستزادة توزيعات لينكس هي حقًا الخيار الأمثل لك لو أردت منصّة آمنة ثِقة لجهازك المكتبي وخادومك على الشبكة. كن على ثقة بأنّ لينكس سيُريحك وسطح المكتب من مختلف المشاكل، ويُشغّل لك خواديمك دون عناء، ويقلّل من طلباتك بحثًا للدعم إلى أدنى درجة. إليك بعض الروابط المفيدة لتستزيد عن لينكس بمعلومات تخدمك طول فترة استعمالك له: Linux.com: كل ما تحتاج لتعرف لينكس حقّ المعرفة (أخبار ودروس وغيرها). Howtoforge: دروس عن لينكس. مشروع توثيق لينكس: أدلّة تعليميّة وأسئلة شائعة وإجابات ”كيف أستطيع كذا“. قاعدة معلومات لينكس ودروس عنه: دروس وأدلّة عديدة وتدخل في الصميم. LWN.net: أخبار عن نواة لينكس وأكثر. قسم لينكس في الأكاديمية: مقالات متنوعة عن نظام التشغيل لينكس وكيفية تثبيت العديد من الخدمات والتطبيقات. مجتمع لينكس العربي كتاب سطر أوامر لينكس كتاب دليل إدارة خوادم أوبنتو كتاب دفتر مدير ديبيان كتاب الإدارة المتقدمة لجنو/لينكس كتاب أوبنتو ببساطة (تنويه: إصدار أوبنتو الذي يشرحه الكتاب قديم ولكن يمكن أخذ الفكرة العامة عنه وعن لينكس عمومًا) ترجمة -وبتصرف- للمقال What is linux?‎ من موقع linux.com
    1 نقطة
  2. إن الحصول على المواضيع من قاعدة بيانات الوورد بريس هي إحدى المواضيع المفضلة لدي، وذلك بسبب المرونة الرائعة التي يتيحها صنف WP_Query التي تسمح لنا بالحصول على مانريده، وتُعتبر هذه الطريقة هي إحدى الميزات الأساسية في أنظمة إدارة المحتوى CMS التي نراها عند العمل في الواجهات الأمامية front-end. قد تظهر أمامنا العديد من الحالات التي نحتاج فيها إلى معلومات محددة مثل قائمة بالمهام المدخلة من قبل مستخدم محدد بين تاريخين معينين، أو قائمة بكل المواضيع والصفحات المُدرجة ضمن تصنيف معيّن، والتي أُدخِل عليها تعديلات خلال أقل من أسبوعين. يمكن الحصول على جميع هذه المعلومات باستخدام صنف WP_Query، والذي يمتاز بسهولة استخدام وتطبيقه، حيث سنشرح في هذا المقال طريقة استخدامه وسندرج أيضًا العديد من الأمثلة البرمجية العملية. ماهو استعلام الوورد بريس؟ لنستذكر أولًا بعض المعلومات العامة المتعلقة بالاستعلامات queries، حيث يمكن تعريف الاستعلام من قاعدة البيانات بأنه السؤال عن بعض المعلومات الموجودة ضمنها، والتي يمكن أن تكون أي معلومة ابتداءًا من أرقام الهواتف لجميع المستخدمين ومرورًا بكل التصنيفات الأخرى المتاحة. كما ننوّه إلى أن ذكرنا لكلمة استعلام query، أو استعلام وورد بريس wordpress query نقصد بها الاستعلام الذي يقوم باسترجاع بعض المواضيع posts من قاعدة البيانات الخاصة بالوورد بريس. تقوم كل صفحات الوورد بريس تقريبًا بإنشاء الاستعلام الخاص بها، فصحة الفهرسة (وهي الصفحة الرئيسية التي تظهر في المدونة) هي عبارة عن إظهار نتيجة الاستعلام عن آخر المواضيع المنشورة، كما أن فئة الأرشيف تحوي على استعلام يقوم باستعادة أحدث المشاركات داخل هذه الفئة وتُظهر النتيجة ضمن الفئة المحددة، أما بالنسبة لصفحات المؤلف فإنه تُظهر آخر المواضيع التي نشرها المؤلف. كما أن المنشورات الوحيدة والصفحات المفردة تستخدم استعلامات خاصة بها، ولكن في هذه الحالة تستعاد دومًا نتيجة واحدة فقط من خلال الاستعلام. وبالتالي نجد أن أي صفحة افتراضية نُحمّلها تحوي في الغالب على استعلام يُجرى تلقائيًا. الحلقة: كيفية استخدام الاستعلامات تُعتبر الحلقة طريقة لاستعادة مجموعة من المواضيع معًا، ولكن المسألة الأساسية هنا هي كيفية عرض المواضيع المُسترجعة، حيث أن كل موضوع يستخدم عناصر الإظهار و HTML الخاصة به، مع أنها جميعها تشترك في حلقة واحدة. ببساطة تقوم الحلقة باستخدام آلية خاصة في الوورد بريس تُمكّنها من الانتقال عبر المواضيع المُسترجعة مع تمكين الموضوع من عرضه بطريقته الخاصة. يمكن شرح هذه الآلية من خلال الأسطر البرمجية: <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post() ?> <div <?php post_class() ?>> <h2><?php the_title() ?></h2> <?php the_content() ?> </div> <?php endwhile ?> <?php else : ?> <h2>Ooops, no posts here!</h2> <?php endif ?> إن المثال السابق هو مثال مبسط عمّا يمكن إيجاده في أي صفحة تحوي قوائم يوجد داخلها مجموعة من المواضيع، حيث نلاحظ في المثال أن الحلقة تحوي أيضًا على تعليمة if/else . حيث قمنا باستخدام ()have_post للتأكد من أنه في حالة وجود موضوع مُستعاد، نُنشئ عنصر من هذا الموضوع ويكون الخرج عبارة عن العنوان ومحتوى الموضوع. أما تابع ()the_post فإنه هو المسؤول عن معالجة حالة "هل يوجد مواضيع أخرى بعد الموضوع الحال أم لا". وفي النهاية عند المرور على جميع المواضيع، تُنفّذ تعليمة else وهي إظهار نص محدد قد يشير كما في المثال السابق إلى انتهاء المواضيع. الآن قبل المتابعة في هذه المقالة، أود توضيح بعض المصطلحات التي مرت معنا، أولا مصطلح الحلقة "the loop" والذي يستخدم لوصف حلقة تمر على قائمة مو المواضيع الموجودة في الصفحة والمنشورة على الوورد بريس، لنستعرض مثالًا توضيحيًا، في حال كان لدينا قسم في المدونة نستعرض فيه المواضيع المتعلقة بمدونتنا والتي نستعرضها في قسم "Related articles on our blog" إن هذا القسم عبارة عن مجموعة من قوائم المواضيع التي تم الحصول عليها من خلال استخدام استعلام مخصص وحلقة خاصة بها، ولكن لايمكننا اعتبار هذه القوائم تشبه القوائم التي نتجت عن الاستعلام السابق (في المثال البرمجي) وذلك لأنه العناصر الموجودة داخل هذا القسم ليست إحدى القوائم الافتراضية الخاصة بهذه الصفحة، إنما هي عبارة عن ناتج عدة استعلامات وحلقات وُضعت في نفس الصفحة . بناء استعلام مخصص سنتعلم في هذه الفقرة طريقة بناء استعلام مخصص، لنفترض أننا نريد الحصول على قائمة بالمواضيع الخاصة بمؤلف معين ومُدرجة ضمن فئة معينة. هذا المثال يطرح طريقة برمجية للوصول إليها: <?php $args = array( 'author_name' => 'danielpataki', 'category_name' => 'wordpress' ); $author_posts = new WP_Query( $args ); if ( $author_posts->have_posts() ) : ?> <?php while ( $author_posts->have_posts() ) : $author_posts->the_post() ?> <div <?php post_class() ?>> <h2><?php the_title() ?></h2> <?php the_content() ?> </div> <?php endwhile ?> <?php else : ?> <h2>Ooops, no posts here!</h2> <?php endif ?> يتعامل القسم الأول من التعليمات مع الاستعلام في قاعدة البيانات حيث ترى أنني قمت ببناء غرض WP_Query من خلال تمرير مجموعة من المعاملات arguments، ولكن لاتقلق في حال لست من المهتمين بالبرمجة غرضية التوجه لأننا سنستخدمها بطريقة بسيطة جدًا، حيث مررنا اسم المؤلف من خلال المعامل author_name والفئة المختارة من خلال المعامل category_name. الآن لترتيب هذه المواضيع ضمن قائمة واحدة نحتاج إلى تعديل الحلقة قليلًا وذلك من خلال استخدام التوابع الخاصة بالغرض WP_Query بدلًا من استخدام التوابع ()have_post و ()the_post وذلك يعني أن نسبق اسم التابع باسم المتغير بالشكل ()variable_name->function$. مع العلم أنني لن أعرض الحلقة في الأمثلة التالية وذلك لأن الفكرة نفسها ستتكرر دومًا، والآن اسم متغيرنا هو $custom_post لذلك سنستخدم التوابع ()custom_posts->have_post$ و ()custom_posts->the_post$. معاملات WP_Query إن بناء استعلام مخصص يعتمد بالأساس على تغيير المعاملات parameters، ومن الأمثلة على الاستعلامات المخصصة استعلام الحصول على المواضيع من تاريخ محدد، المؤلفين، نمط نشر معين، تصنيفات مخصصة، وحالات وأمور أخرى. الآن لنلق نظرة على جميع المعاملات من خلال بعض الأمثلة الأساسية البسيطة. معامل المؤلف Author Parameters يوجد أربع طرق مختلفة يمكن استخدامها لتجميع المؤلفين، حيث أن المعامل author يقبل رقم تعريفي وحيد لمؤلف محدد، أو قائمة من الأرقام المعرفة للمؤلفين مفصولة عن بعضها بفاصلة، كما يمكن استخدام السالب أمام الأرقام التعريفية للمؤلفين لاستبعادها من ناتج الاستعلام: // Posts from the author with the ID of 42 $args = array( 'author' => 42 ); // All posts except the ones from author 42 $args = array( 'author' => -42 ); // Posts from author 42, 38 and 55 $args = array( 'author' => '42,38,55' ); // Posts from everyone except author 42 and 38 $args = array( 'author' => '-42,-38' ); يمكن استخدام المعامل author_name في حال كنا نريد تمرير اسم المؤلف بدلًا من رقمه التعريفي، ولكن من المهم الانتباه إلى استخدام اسم المستخدم username الصحيح. $args = array( 'author_name' => 'danielpataki' ); المعاملان المتبقيان والمتعلقان بالمؤلف هما author_in و author_not_in حيث أُضيف هذين المعاملين في النسخ اللاحقة من الوورد بريس في 3.7 حيث تعرّف المؤلفين من خلال إدخال أرقام المؤلفين على شكل مصفوفة. // Posts from author 42, 38 and 55 $args = array( 'author__in' => array( 42, 38, 55 ) ); // Posts from everyone except author 42 and 38 $args = array( 'author__not_in' => array( 42, 38 ) ); إن هذه الطريقة لاتبدو مختلفة كثيرا عن استخدام المعامل author ولكن هذه الطريقة أفضل من حيث الطريقة التنظيمية. حالة استخدام: إعداد قائمة بمقالات المؤلفين الأعلى تصنيفًا لنلق نظرة على كيفية بناء قائمة بمقالات المؤلفين الأعلى تصنيفًا. حيث نفترض أن لدينا نظام تصنيف في مكان ما يُخزن فيه التقييم العالمي لكل مؤلف ضمن جدول أساسي مع معرف خاص به هو التصنيف rating، ونستيطع الحصول على المطلوب من خلال ‏التابع ()get_user الذي يحوي حلقة مخصصة لجمع مشاركات المؤلفين الأعلى تصنيفًا وإعادتها كخرج للتابع المذكور. <?php $args = array( 'meta_key' => 'rating', 'meta_value' => 4, 'meta_compare' => '>', 'fields' => 'id', ); $top_users = get_users( $args ); $args = array( 'author__in' => $top_users; ); $top_author_posts = new WP_Query( $args ); ?> معامل الفئة Category Parameters يمكن تقييد إضافة المواضيع على أساس الفئة باستخدام ما لا يقل عن خمس توابع منفصلة. إن المعامل cat يشبه المعامل author الذي شرحناه بالأعلى، من حيث إسناد الأرقام الصحيحة والتي تستخدم كمفتاح تعريف للفئة، كما يمكن إضافة إشارة السالب (-) من أجل استبعاد الفئة التي تُعرّف بالرقم الصحيح الذي يلي الإشارة. // Posts from the category with the ID of 42 $args = array( 'cat' => 42 ); // All posts except the ones from category 42 $args = array( 'cat' => -42 ); // Posts from categories 42, 38 and 55 $args = array( 'cat' => '42,38,55' ); // Posts from all categories except 42 and 38 $args = array( 'cat' => '-42,-38' ); من الأفضل عدم استخدام category_name وذلك لأن اسم الفئة غالبًا يستخدم في توليد رابط URL الخاص بالمقالة، من خلال استخدام اسم الفئة وعنوان المقالة مع بعض التعديلات الخاصة مثل تحويل جميع الأحرف إلى أحرف صغيرة، وحذف جميع الكلمات الخاصة، واستبدال الفراغات بـ (-)، فمثلًا الفئة المخصصة لمراجعات الكتب والمسماة "Book Reviews" غالبًا ستجد قسم من رابط المقالة يحوي على "book-reviews". $args = array( 'category_name' => 'book-reviews' ); كما يمكننا استخدام مصفوفة من الفئات تحوي ثلاثة معاملات هي category_in، و category_not_in والتي تماثل في طريقة عملها مماثلاتها في معامل author، حيث يمكن من خلالها التأكد من أن المواضيع التي تم تحديدها من خلال الفئات المدخلة فقط هي التي استُرجِعت بواسطة الاستعلام. $args = array( 's' => 'awesome+wordpress+plugins', 'posts_per_page' => 8 ); $results = new WP_Query( $args ); echo "A total of " . $results->found_posts . " posts were found.<br />"; echo "We will be displaying " . $results->query_vars['posts_per_page'] . " posts per page if possible.<br />"; echo "We need a total of " . $results->max_num_pages . " pages to display the results". حالة استخدام: الحصول على مقالات الفئات الأكثر استخدمًا نقصد بالفئات الأكثر استخدمًا هي الفئات التي تحوي أكبر عدد من المواضيع المنشورة، وسنقوم بهذه العملية من خلال استرجاع قائمة بالفئات اعتمادًا على عدد العناصر (المواضيع) الموجودة داخل الفئة، ثم نقوم بتمرير هذه المعلومة للاستعلام الذي نبنيه للحصول على المواضيع المنشورة في الفئات الثلاثة الأعلى استخدامًا. $args = array( 'number' => 5, 'orderby' => 'count', 'order' => 'DESC', 'fields' => 'ids' ); $top_categories = get_terms( array( 'category' ), $args ); $args = array( 'category__in' => $top_categories; ); $top_category_posts = new WP_Query( $args ); معامل الوسم Tag Parameters يمرر لمعامل الوسم خمس متغيرات هي tag، tag_id، tag_and، tag_in، tag_not_in نلاحظ وجود ثلاث منها ذُكرت مع المعاملات السابقة، وسنشرحها من خلال المثال: // Posts from the tag named "Awesome Colors" $args = array( 'tag' => 'awesome-colors' ); // Posts from the tag named "Awesome Colors" or "Awesome People" $args = array( 'tag' => 'awesome-colors,awesome-people' ); // Posts from the contain both "Awesome Colors" and "Awesome People" $args = array( 'tag' => 'awesome-colors+awesome-people' ); // Posts from the tag with the ID of 23 $args = array( 'tag_id' => 23 ); // Posts from tag 42, 38 and 55 $args = array( 'tag__in' => array( 42, 38, 55 ) ); // Posts from all tags except 42 and 38 $args = array( 'tag__not_in' => array( 42, 38 ) ); // Posts that are assigned both tag 42 and 38 $args = array( 'tag__and' => array( 42, 38 ) ); أود أن أشير إلى أمرين، الأول أن نواة الوورد بريس ليست متناسقة تمامًا، فمثلًا معامل category يتوقع أن يمرر لها معرف ID، أما معامل tag و category_name فيتوقع قسم من الرابط، لذلك فالتحدي الذي يواجهك في البرمجة هنا هو أن تجعل المعلومات التي تدخلها دومًا متناسقة قدر الإمكان، مع أنه في بعض الأحيان تُجبر على تخطي بعض هذه القواعد لأسباب قديمة كانت موجودة سابقًا في النواة. أما الأمر الثاني هو أنه من الأفضل استخدام المصفوفات في حال كان ذلك مسموحًا، فمثلًا على الرغم من أن معامل tag يتيح لك إدخال متغيرات متعددة ولكن من الأفضل استخدام tag_in والمتغيرات الأخرى التي تسمح بتمرير القيم على شكل مصفوفة. ولتسهيل الأمور أكثر في التعامل مع الوسوم يوجد أيضًا معاملين آخرين هما tag_slug_and و tag_slug_in ويكون التعامل معها بالشكل التالي: // Posts from the tag named "Awesome Colors" or "Awesome People" $args = array( 'tag_slug__in' => array( 'awesome-colors', 'awesome-people' ) ); // Posts from the contain both "Awesome Colors" and "Awesome People" $args = array( 'tag_slug__and' => array( 'awesome-colors', 'awesome-people' ) ); حالة استخدام: الدمج بين معاملات الوسم، الفئة، المؤلف بما أننا تعرفنا على بعض المعاملات يمكننا الدمج فيما بينها ضمن استعلام واحد، على سبيل المثال لنجمع المقالات المتميزة (التي أُضيف لها وسم "featured") لمؤلفين محددين وذلك في فئتي الكتب والأفلام. $args = array( 'tag' => 'featured', 'category__in' => array( 43, 52 ), 'author__in' => array( 255, 930 ) ); $author_featured_posts = new WP_Query( $args ); أنواع المواضيع Post Type تحوي الوورد بريس على عدد من أنواع المواضيع المبنية داخله بالأساس وهي موضوع post، الصفحة page، مرفقات attachment، مراجعة revision، و عنصر قائمة التنقل، ولكن أصبح من الشائع إضافة أنواع أخرى عند إدارة المشاريع مثل الأعمال، المنتجات، المنتديات وهكذا بحسب مايحتاجه المشروع من أنواع. يسمى المعامل المخصص للتعامل مع أنواع المواضيع الجديدة post_type والذي يساعدنا في تحديد النوع الذي ينتمي له الموضوع المُراد نشره. عند تمرير هذا المعامل سيقوم الاستعلام بالبحث عن المنشورات المنتمية لهذا النوع فقط، ولكن في حالة تمرير القيم على شكل مصفوفة فإن البيانات المُعادة ستكون جميع المنشورات التي تطابق هذا النوع. // Return posts with the 'page' post type $args = array( 'post_type' => 'page' ); // Return posts from two custom post types $args = array( 'post_type' => array( 'product', 'post' ) ); // Returns posts from all post types $args = array( 'post_type' => 'any' ); مع العلم أنه هذا المعامل له قيمة افتراضية هي post، ولذلك في حال كنت ترغب في استعادة أنواع أخرى من المنشورات عليك تحديدها بشكل واضح. في حال استخدام المعامل tax_query (سنتكلم عنه لاحقًا) ستصبح القيمة الافتراضية هي any. حالة المنشور Post Status كما في الفقرة السابقة الخاصة بأنواع المواضيع، يمكننا تحديد حالة منشور محدد أو حالات لعدة مواضيع باستخدام المعامل post_status والذي يمرر له قيمة من نوع نص string في حال المنشور وحيد أو مصفوفة في حال اخترنا أكثر من واحدة،. تحوي الوورد بريس على ثماني حالات مبنية في النواة هي: publish الموضوع Post أو الصفحة page منشورة pending الموضوع قيد الانتظار للمراجعة draft الموضوع حُفظ كمسودة auto-draft الموضوع المُنشأ حديثًا ولكن بدون محتوى future موضوع سينشر في المستقبل private ليس معروضًا أمام المستخدمين غير المسجلين الدخول inherit مراجعة (له علاقة بـ get_children) trash الموضوع في سلة المهملات (هذه الحالة متاحة في النسخة رقم 2.9) يمكننا أيضًا استخدام القيمة any لنقول بأننا نريد تضمين جميع حالات الموضوع، أما القيمة الافتراضية فهي Publish لذلك من الأفضل أن تتأكد بأنك حددت الحالة في حال كنت ترغب بحالة مختلفة. حالة استخدام: الإعلان عن المنتجات القادمة لنفترض أنك تدير متجر كتب وتعلم بأن الكتب الأكثر مبيعًا المحتملة ستصدر قريبًا، حيث يمكنك بناء استعلام وورد بريس مخصص لبناء قائمة بهذه الكتب. في هذه الحالة لاتحتاج إلى نشر الكتب على شكل مواضيع ثم استخدام بعض الخدع لتستثنيها من العرض حتى يُؤمّن ويستطيع المستخدم طلبها، يمكنك فقط ترتيب قائمة مباشرة بها بالشكل التالي: $args = array( 'post_status' => 'future', 'post_type' => 'product', 'category_name' => 'books' ); معامل البحث The Search Parameter يسمى المعامل الخاص بعملية البحث s، ويأخذ قيمة نصية string هي نفسها المُستخدمة في عملية البحث داخل الموضوع. ولكن يجب تأكد من ترميز العبارة النصية المُستخدمة في البحث، حيث يمكنك القيام بذلك من خلال استخدام التابع urlencode الموجود في PHP والذي يساعدك في تحديد عدد الفراغات والمحارف الخاصة الأخرى وتحويل العبارة إلى كلمات يمكن البحث عنها. $args = array( 's' => 'awesome+wordpress+plugins' ); حالة استخدام: البحث في موضوع فرعي يمكن البحث في المحتوى كاملًا من خلال شريط البحث الافتراضي الموجود في الوورد بريس باستخدام المعامل s، ولكن يمكن أن يبحث بطريقة أكثر مهنية من خلال الدمج بين معامل البحث والمعاملات الأخرى، سنطرح في المثال التالي طريقة للبحث في مواضيع فرعية متعددة: // Show posts about ACF (Advanced Custom Fields) from the news category $args = array( 's' => 'ACF', 'category_name' => 'news' ); // Search an author's posts $args = array( 's' => 'custom post types', 'author_name' => 'danielpataki' ); // Search an array of custom post types $args = array( 's' => 'wordpress', 'post_type' => array( 'project', 'portfolio' ) ); المواضيع المحمية بكلمة مرور تستطيع اختيار الموضوع الذي ترغب بحمايته بكلمة مرور من المربع الخاص بإعدادات النشر، حيث يوفر لك هذا الخيار المزيد من حماية خصوصية المحتوى، أو يمكن استخدامه لبناء نموذج اشتراك. في جميع الحالات التي تجعلك ترغب بإضافة كلمة مرور للموضوع الخاص بك، يمكنك استخدام المعامل has_password لتحديد فيما إذا كنت ترغب بإدراج الموضوع إلى قائمة المواضيع المحمية بكلمة المرور. يمكن أن يُمرَّر للمعامل has_password قيمة true عندها سيقوم الاستعلام بجمع المواضيع التي تم إعطاؤها كلمة مرور، أو قيمة false وبذلك يختار الاستعلام المواضيع التي لم تُزود بكلمة مرور، ولكن في حال كانت قيمة المعامل محذوفة أو تم إسناد null لها عندها ستُنشر جميع المواضيع. كما يمكن استخدام المعامل post_password من أجل إعداد قائمة بالمواضيع المحمية بكلمة مرور محددة. // Return only password protected posts $args = array( 'has_password' => true ); // Return posts protected with the password: qweasd $args = array( 'post_password' => 'qweasd' ); حالة استخدام: لعبة صيد الكنز أونلاين يمكن بناء لعبة مرحة باستخدام الوورد بريس بالشكل التالي، يقوم المستخدمون بحل الأحجية والحصول على كلمة المرور الخاصة بقائمة المواضيع التي تحوي على أدلة تقود للحل الأخير. الآن يجب على المستخدم وضع كلمة المرور في المكان المخصص لها وعند إدخالها وتثبيت الجواب، سينتقل المستخدم إلى صحفة تستخدم كلمة المرور المُدخلة كمعامل مُمرر لاستعلام بالشكل التالي: $args = array( 'post_type' => 'clue', 'post_password' => 'treasurehunt2015' ); وباستخدام حلقة كاملة تمر على جميع المواضيع الموجودة ستكون لدينا حالتان، الأولى في حال كانت كلمة المرور المُدخلة خاطئة عندها ستظهر رسالة للمستخدم محتواها "لم يعثر على مواضيع"، أما الحالة الثانية فهي في حال كانت كلمة المرور المدخلة صحيحة عندها ستُعرض قائمة بالمواضيع المحمية بكلمة المرور هذه. تضمين، استبعاد، واستهداف مواضيع محددة يوجد تسعة معاملات مختلفة تُستخدم للحصول على مواضيع معينة في الاستعلام: المعامل p: يُستخدم في تجميع المواضيع بالاعتماد على معرف الموضوع ID. المعامل name: يُستخدم في تجميع تجميع المواضيع من خلال تمرير slug كقيمة نصية له. المعاملين page_id و page_name: الأول يشبه معامل p والثاني يشبه name ولكنها تعمل بالنسبة للصفحات، مع بعض الاختلاف بينهما. حيث سيعملان بشكل متشابه تمامًا في حال تم تحديد قيمة للمعامل post_type أما في حال عدم تحديد هذه القيمة فإن معامل page_id سيعمل كما هو مُتوقع منه على عكس معامل p المعاملين post_in و post_not_in: تعمل بنفس الطريقة التي تعمل بها شبيهاتها مع الفئات والوسوم حيث تقبل تمرير مصفوفة من مُعرِّفات المواضيع. المعامل post_parent: يأخد معِّرف وحيد عندها يقوم الاستعلام بإعداد قائمة بالمواضيع التي تكون أبناء تابعة للموضوع المُحدد بالمعرف المذكور. المعاملين post_parent_int و post_parent_not_int: كما في شبيهاتها يُمرَّر لها مصفوفة من معرِّفات المواضيع. من المهم الأخذ بالحسبان نوع المنشور post_type عند التعامل مع هذه المعامل، ففي حال قمت بتضمين المُعرِّفات لمجموعة من أنواع المواضيع عندها ستحتاج لتمرير القيمة any للمعامل post_type، أو تدخل النوع المحدد الذي تبحث عنه. // Grab post 532 only $args = array( 'p' => 532 ); // Grab the post with the given slug $args = array( 'name' => 'guide-to-wp-query' ); // Retrieve page 55 $args = array( 'page_id' => 55 ); // Retrieve the about page $args = array( 'pagename' => 'about' ); // Get the specified 5 posts $args = array( 'post__in' => array( 31, 36, 39, 91, 119 ) ); // Get all posts except the specified 5 $args = array( 'post__not_in' => array( 31, 36, 39, 91, 119 ) ); // Get all child posts of post 6 $args = array( 'post_parent' => 6 ); // Get posts which are the children of the listed posts $args = array( 'post_parent__in' => array( 6, 23, 55 ) ); // Get posts which do not have the listed parents $args = array( 'post_parent__not_in' => array( 6, 23, 55 ) ); حالة استخدام: الوصول إلى جميع المرفقات في الموضوع في حال كنت ترغب بالحصول على قائمة للصور والمرفقات الأخرى الموجودة في المنشور، ستحتاج لاستخدام معاملات الآباء للوصول إلى الهدف المحدد، حيث تعد هذه الطريقة المثالية لتنفيذ فكرة التوليد التلقائي للمعرف أو قوائم التحويل. global $post; $args = array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_status' => 'any' ); استعلامات التصنيف بعد أن تعرفنا بشكل مفصل عن المعاملات المُستخدمة في الاستعلام وكيفية التعامل معها، يمكننا الانتقال إلى موضوع متقدم أكثر هو tax_query. إنّ ميزة هذا المعامل بأنه عبارة عن مصفوفة، يمكن استخدمها لبناء شروط أكثر تعقيدًا، أو في بناء تصنيفات مخصصة بشكل أكبر. سنأخذ نظرة عامة في المثال المقتبس من WordPressCodex: $args = array( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'movie_genre', 'field' => 'slug', 'terms' => array( 'action', 'comedy' ), ), array( 'taxonomy' => 'actor', 'field' => 'id', 'terms' => array( 103, 115, 206 ), 'operator' => 'NOT IN', ), 'relation' => 'AND', ), ); يحوي استعلام التصنيف على شرطين condition وعلاقة relation، وهذه العلاقة هي التي تحدد إما أنه يجب أن يتحقق شرط واحد على الأقل (OR) أو يجب تحقيق كلا الشرطين (AND)، أما بالنسبة للشرطين نفسهما فإنهما عبارة عن مصفوفات تحدد فيها قيود التصنيف. وبالعودة إلى المثال المُرفق في الأعلى سنجد أن الشرط الأول ينص على أن المواضيع التي نبحث عنها يجب أن تندرج تحت تصنيف أفلام حركة أو كوميدية، بينما ينص الشرط الثاني على أن المواضيع المُختارة (أي الأفلام) يجب ألا يكون أي من الممثلين الثلاثة الذين تم إدخالها إلى الشرط عن طريقة مصفوفة بأرقام معرفاتها ID مشاركين في الفيلم، فيما العلاقة بين الشرطين هي AND وبالتالي يجب أن يتوفر الشرطان معًا أي أننا نبحث عن أفلام الحركة أو الكوميدية والتي لايشارك بها أي من الممثلين الثلاثة. يحوي كل شرط في استعلام التصنيف على ثلاثة معاملات خاصة به هي: taxonomy : يُحدَّد من خلاله المقطع slug الخاص بالتصنيف. field : يمكن من خلاله الاختيار فيه بين المعاملات الثلاثة وهي term_id، أو name أو slug. operator : يستخدم لتحديد كيفية التعامل مع المصطلحات المتواجدة في الشرط، حيث IN سيسمح لأي من المواضيع التي تنتمي لأي من الشروط المدرجة بالتواجد في القائمة النهائية، أما NOT IN سيسمح لأي من المواضيع التي لاتتضمن أيًا من الشروط المدرجة، أما AND فسيسمح للمواضيع التي تحقق جميع الشروط المدرجة. Include_children : يحدد فيما إذا كان بالإمكان السماح أو عدم السماح بتضمين المواضيع التي تنتمي للتصنيف الابن في التصنيفات الهرمية حالة استخدام: تصفية محتوى متقدمة تحتوي فلاتر التصنيف على نطاق واسع من الاستخدامات، مثل التعامل مع تصنيفات المنتجات المخصصة، أو إنشاء قاعدة بيانات للأفلام تشبه IMDB، وسنطرح مثال جديد لتصفية كتب متقدمة. $args = array( 'post_type' => 'book', 'tax_query' => array( array( 'taxonomy' => 'mood', 'field' => 'slug', 'terms' => array( 'negative', 'bad', 'sad' ), 'operator' => 'NOT IN' ), array( 'taxonomy' => 'genre', 'field' => 'slug', 'terms' => array( 'comedy', 'romance' ), 'operator' => 'NOT IN', ), 'relation' => 'AND', ), ); في هذه الحالة بالتحديد يريد المستخدم النظر إلى جميع الكتب التي تحوي أفكار إيجابية(التي لاتحوي على وسوم سلبية تم إعطاؤها إياها) ولكن لايمكن أن تكون مُصنفة ككتب كوميدية أو رومانسية. الاستعلامات من نمط Meta Query تشبه بنية الاستعلام من نمط Meta query استعلام التصنيف. حيث يُسمح للاستعلام عن المواضيع بالاعتماد على القيم الخاصة بها من الجداول التعريفية الأساسية الخاصة بالوورد بريس meta table. يقدم الوورد بريس أربع معاملات يمكن استخدامها هي meta_key، meta_value، meta_value_num، و meta_compare ولكن يمكن استبدالها بالمعامل meta_query وهو الأفضل. لنلق نظرة على المثال: $args = array( 'post_type' => 'book', 'meta_query' => array( array( 'key' => 'pages', 'value' => 500, 'compare' => '>', 'type' => 'NUMERIC' ), ), ); في هذا المثال يقوم استعلام meta query باسترجاع الكتب التي عدد صفحاتها أكثر من 500 صفحة. يُعتبر هذه الطريقة أسهل بكثير من استخدام استعلام التصنيف. لنتعرف أكثر على المعاملات الفرعية الموجودة في المثال السابق: key: مفتاح الحقل المُدخل value: القيمة التي نبحث عنها compare: نوع عملية المقارنة ويمكن أن تكون أحد قيم المساواة(=)، اللامساواة (!=) أكبر (>)، أكبر أو يساوي (>=)، أصغر (<)، أصغر أو يساوي (<=)، يشابه (LIKE)، لايشبه(NOT LIKE)، داخل(IN)، ليس ضمن (NOT IN)، بين (BETWEEN)، ليس بين (NOT BETWEEN)، موجود (EXISTS)، وليس موجود (NOT EXISTS). type: نوع البيانات الموجودة في الحقل. ومن الممكن نوع القيمة ‘NUMERIC‘, ‘BINARY‘، ‘CHAR‘، ‘DATE‘، ‘DATETIME‘، ‘DECIMAL‘، ‘SIGNED‘، ‘TIME‘، ‘UNSIGNED‘. ومن المهم الانتباه دومًا إلى العلاقة بين المعاملات التي تشير إلى العلاقة بين جمل الاستعلام المنفصلة، حيث أنها تعمل تمامًا مثل استعلامات التصنيف الذي شرحناه بالأعلى. حالة استخدام: المواضيع المُرفقة بصور مميَّزة يوجد الكثير من الطرق لاستخدام استعلام meta queries. من أهم الأمثلة عليه هي جمع المواضيع التي تحوي صور مميزة. كل معرف ID للصور المميزة يخزّن في أحد الجداول التعريفية الأساسية للوورد بريس باسم _thumbnail_id ويمكن من خلال استعلام meta query للبحث عن المواضيع التي تكون فيها قيمة هذا المفتاح المعرف meta key الذي لايكون فارغًا. $args = array( 'meta_query' => array( array( 'key' => '_thumbnail_id', 'value' => '', 'compare' => '!=', ), ), ); استعلامات التاريخ تشبه طريقة عمل استعلامات التاريخ استعلامات meta queries، حيث تقدم WP_Query ثمانية معاملات لتضيق قائمة المواضيع بالاعتماد على التاريخ ويمكن تعويضها جميعًا بمعامل date_query وسنشرحه بتفصيل بسبب أهميته وكثرة استخدامه. لنتعرف أولًا على المعاملات الخاصة بالتاريخ، والمقتبسة من WordPressCodex: year - وهي عبارة عن السنة مؤلفة من 4 أرقام مثل 2011. month - رقم الشهر من 1 إلى 12. week - رقم الأسبوع ضمن السنة من 0 إلى 53. day - رقم اليوم ضمن الشهر من 1 إلى 31. hour - الساعة من 0 إلى 23. minute - الدقيقة من 0 إلى 59. second - الثانية من 0 إلى 59. after - التاريخ الذي نريد استرجاع المواضيع بعده. حيث يمرر التاريخ من خلال ()strtotime والذي يمكن أن يأخذ التاريخ كقيمة نصية أو من خلال مصفوفة تحوي القيم السنة ‘year‘، الشهر ‘month‘، واليوم ‘day‘ على النحو التالي: year – تقبل السنة بصيغة الأربع أرقام ولكن القيمة الافتراضية هي أن تكون فارغة. month - الشهر من السنة ويقبل الأرقام من 1 إلى 12 والقيمة الافتراضية هي 12. day - هو اليوم من السنة وتأخذ قيمة من 1 إلى 31 أما القيمة الافتراضية هي آخر يوم من الشهر. before - التاريخ الذي نريد استرجاع المواضيع التي قبله. حيث يمرر التاريخ من خلال ()strtotime والذي يمكن أن يأخذ التاريخ كقيمة نصية أو من خلال مصفوفة تحوي القيم السنة ‘year‘، الشهر ‘month‘، واليوم ‘day‘ على النحو التالي: year – تقبل السنة بصيغة الأربع أرقام ولكن القيمة الافتراضية هي أن تكون فارغة. month - الشهر من السنة ويقبل الأرقام من 1 إلى 12 والقيمة الافتراضية هي 1. day - هو اليوم من السنة وتأخذ قيمة من 1 إلى 31 أما القيمة الافتراضية هي 1. inclusive - تستخدم مع before/after من أجل تحديد فيما إذا كانت قيمة التاريخ متضمنة ضمن المجال أو لا. compare -يمكن الإطلاع على ()WP_Date_Query::get_compare. column - القيمة الافتراضية له post_date. relation - وتأخذ إحدى القيمتين OR أو AND والتي تحدد كيف ستتعامل المصفوفات الفرعية فيما بينها لإتمام عملية المقارنة، والقيمة الافتراضية له هي AND. وهكذا نكون قد شرحنا القليل فقط عن استعلامات التاريخ، ولكنه يساعدنا في التعامل بمرونة كبيرة مع النطاقات الزمنية باستخدام المعاملات السبعة الأولى معًا. // Return all posts from 2014 $args = array( 'date_query' => array( array( 'year' => 2014, ), ), ); // Return all posts from January 2015 $args = array( 'date_query' => array( array( 'year' => 2015, 'month' => 1 ), ), ); // Return all Valentine's Day posts, regardless of year: $args = array( 'date_query' => array( array( 'month' => 2 'day' => 14 ), ), ); وللتحكم أكثر بالنطاق الزمني يمكن استخدام المعاملين before و after، ولكنك تحتاج لتحديد السنة، الشهر، واليوم كعناصر في المصفوفة الفرعية. كما يمكن استخدام المعامل inclusive لتحديد حدود النطاق الزمني بشكل دقيق أكثر. $args = array( 'date_query' => array( array( 'after' => 'January 1st, 2013', 'before' => array( 'year' => 2013, 'month' => 2, 'day' => 28, ), 'inclusive' => true, ), ), ); سيعيد هذا المثال المأخوذ من Codex كل المواضيع المنشورة بين الأول من كانون الثاني عام 2013 و الثامن والعشرين من شباط عام 2013. وبما أن القيمة الممررة للمعامل inclusive هي true فستكون المواضيع المنشورة في التواريخ الحدودية مُتضمَّنة في النتيجة. إن وظيفية التاريخ هنا تعتمد على صنف WP_Date_Query، لذلك أقترح الإطلاع أكثر على الموضوع. حالة استخدام: المنشورات الموسمية السابقة تمتلك العديد من المواقع محتوى موسمي، مثل المواضيع الخاصة بالميلاد، وبالسنة الجديدة، وأمور عيد الحب وهكذا. ومن خلال استعلام مخصص لتاريخ معين يمكننا إضافة محتوى خاص بهذا التاريخ إلى موقعك من الأرشيف. المثال القصير التالي سيضيف موضوعا خاصا بخدعة الأول من نيسان: $args = array( 'date_query' => array( array( 'month' => 4, 'day' => 1 ), ), ); قد تعتقد أن عدد المعاملات المستخدمة في عملية الترقيم هي واحد أو اثنين، ولكن في الحقيقة يوجد أكثر من سبعة معاملات للتعامل مع الترقيم فقط. المعامل الرئيسي الأكثر استخدامًا هو posts_per_page والذي يحدد بشكل رئيسي عدد المواضيع التي يتم اختيارها من قاعدة البيانات ووضعها في الصفحة، ويمكن ضبط الإعداد على القيمة -1 حيث سيقوم بجمع كل المواضيع المحتملة. المعامل paged هو أحد المعاملات المستخدمة بكثرة حيث يحدد أي صفحة يمكن عرض نتائجها. ويمكن ربطها مع المعامل posts_per_page. مثلًا إذا تم عرض 10 مواضيع في الصفحة وأُسنِد للمعامل paged القيمة 4 فستعدل قيمة 4 إلى 10. المعامل nopaging يسمح لك بتجاهل ترقيم الصفحات بشكل كلي إذا عدلت قيمته إلى true. كما يوجد معامل offset والذي يعمل كما في MySQL حيث تزاح المواضيع المسترجعة من خلال القيمة الممرة للمعامل وبالتالي ستكسر قاعدة ترقيم الصفحات مالم تكن تعرف ماتفعله، وسنشرح عن هذا الموضوع بشكل بسيط. وفي حال وجدت نفسك لاتحتاج للمواضيع الموسومة على أنها ثابتة stick posts، يمكنك استخدام المعامل ignore_sticky_posts لتجاهلها. حيث أن المواضيع الموسومة بأنها ثابتة تتواجد دائما في أعلى القائمة وهو المكان الطبيعي لها ولتجاهل هذا التصرف تسند القيمة false للمعامل المذكور. يحدد المعامل posts_per_archive_page عدد الصفحات التي توجد في صفحات الأرشيف، والتي ستكون هي الصفحات التي تُعطى القيمة true للتوابع ()is_archive و i()s_search، مع العلم أن هذا المعامل لايُستخدم مع معامل posts_per_page. أخيرًا، المعامل page يُظهر المواضيع التي عادةً ما تظهر فقط في الصفحة X من الصفحة الأمامية الثابتة. $args = array( 'posts_per_page' => 20, 'offset' => 2, 'ignore_sticky_posts' => true ); يعيد المثال في الأعلى المواضيع العشرين الثانية (كانت قيمة الإزاحة 2) من قاعدة البيانات مع تجاهل المواضيع المثبتة. ترتيب النتائج إن ترتيب النتائج هو بنفس أهمية استرجاع النتائج. ويمكن التحكم في ترتيب النتائج من خلال معاملين هما order و orderby. إن معامل orderby يحدد ترتيب المواضيع التي ستُستعاد. ويوجد لدينا العديد من الخيارات منها: none - لايوجد ترتيب وهو القيمة الافتراضية في MySQL ID - ترتيب المواضيع من خلال المفتاح المعرف author - ترتيب المواضيع بحسب معرف المؤلف title - ترتيب المواضيع بحسب العنوان name - ترتيب المواضيع بالاعتماد على slug type - ترتيب المواضيع بحسب نوع الموضوع date - ترتيب المواضيع بحسب التاريخ modified - ترتيب المواضيع بالاستناد إلى تاريخ آخرت تعديل parent - ترتيب المواضيع بالاستناد إلى معرف الأب rand - ترتيب عشوائي للمواضيع comment_count - ترتيب المواضيع بحسب عدد التعليقات على الموضوع menue_order - ترتيب المواضيع بحسب ترتيب الصفحات meta_value - ترتيب المواضيع بالاستناد إلى القيمة meta value meta_value_num ترتيب المواضيع بالاستناد إلى القيمة الرقمية ل meta value post_in الحفاظ على الترتيب المدخل في هذا المعامل تقريبًا جميع هذه المعاملات تشرح نفسها بنفسها، ولكن لنتعمق أكثر في طريقة ترتيب المواضيع باستخدام meta value. للقيام بهذا العمل، علينا أول تحديد معامل meta_key كما يعرّفه الوورد بريس بأنه المفتاح الذي يحوي قيمة meta value، ولكن يجب عليك الاهتمام بتحديد النمط الصحيح عند الترتيب وإلا فإننا سنحصل على نتائج غير مُتوقعة. مع الملاحظة أنه في في حال كنا نرتب معلومات رقمية عندها سنستخدم المعامل meta_value_num بدلًا من meta_value. ويمكن أيضًا استخدام المعامل meta_type الذي يسمح لنا بتحديد نوع البيانات. إن المعامل order يحدد اتجاه الترتيب ففي حال كانت القيمة المُمررة له هي ASC عندها ستكون نتيجة الترتيب تصاعديًا، فيما ستكون نتيجة الترتيب تنازلية في حال كانت قيمة المعامل DESC ، والآن لنلق نظرة على المثال التالي الذي يعطينا نظرة عملية عن طريقة الترتيب: // Reverse order by post title $args = array( 'post_type' => 'post', 'orderby' => 'title', 'order' => 'DESC' ); // List specific posts, preserve given order $custom_posts = array( 56, 928, 2271, 22, 491, 883 ); $args = array( 'post_type' => 'any', 'post__in' => $custom_posts, 'orderby' => 'post__in', ); // Order by meta data (grab posts with thumbnails first) $args = array( 'post_type' => 'post', 'meta_key' => '_thumbnail_id', 'orderby' => 'meta_value', 'order` => 'DESC' ); ولتوخي الدقة في المعلومات فإن خيار الترتيب باستخدام عدة أعمدة كان على شكل تمرير قيم منفصلة في نسخ الوورد بريس التي سبقت الإصدار 4.0 ولكن من الإصدار 4.0 ومافوق، حُسّن الأمر من خلال استخدام مصفوفة يمكن تحديد طريقة الترتيب من خلالها بشكل منفصل: $args = array( 'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' ) ); حالة استخدام: ترتيب المنتجات حسب السعر تتطلب نماذج مواقع التجارة الالكترونية طريقة لترتيب المنتجات بحسب السعر. سنبحث في المثال التالي عن المنتجات التي يتجاوز سعرها 20 دولارًا وترتيبها في قائمة حسب السعر من الأدنى إلى الأعلى: $args = array( 'meta_query' => array( array( 'key' => 'price', 'value' => '20', 'compare' => '>=', ), ), 'post_type' => 'product', 'meta_key' => 'price', 'orderby' => 'meta_value_num', 'order` => 'ASC' ); القيم المُسترجعة يبدو أن المعامل fields ليس معروفًا بشكل جيد، بالرغم من أنه أحد الميزات الهامة في الاستعلامات التي تسمح بحمل القيم المُسترجعة من الاستعلامات بسهولة، وذلك من خلال تمرير قيمتين لهذا المعامل. في حال حذف المعامل fields فستُسترجع البيانات من الاستعلام بالطريقة المُعتادة، أما في حال ممرنا القيمة ids لهذا المعامل فستكون النتيجة المُرجعة من الاستعلام على شكل مصفوفة تحوي أرقام المعرفات الخاصة بالمواضيع post IDs، وفي حال كانت قيمة المعامل هي id=>parent عندها ستكون النتيجة المُرجعة من الاستعلام هي مصفوفة ولكنها تحوي أرقام المعرفات الخاصة بالآباء المرتبطة بالعلاقة المذكورة في الاستعلام. أعتقد أن هذا المعامل يضيف ميزات كبيرة في تحسين الاستعلام، وذلك لأن بعض الإضافات المستخدمة في WP_Query المستخدمة لجمع معرفات المواضيع لاتستخدم معامل fields لحمل القيم المُرجعة وبالتالي ستتم عملية استرجاع البيانات من خلال إعطاء الخادم server الكثير من العمل ليقوم به، وفي هذه العملية صرف لموارد الخادم ووقت العمل نحن بغنى عنه. حالة استخدام: إضافة معرض صور برمجيًا لنفترض أننا نريد إضافة معرض خاص بالصور التي مرت في الموضوع بعد الانتهاء من عرضه، سنقوم بعمل ذلك من خلال الاستعلام التالي: // Programmatically placing a gallery shortcode global $post; $args = array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_status' => 'any', 'fields' => 'ids' ); $images = new WP_Query( $args ); $image_id_string = implode( ',', $images ); echo do_shortcode( '[gallery ids="' . $image_id_string . '"]' ); لقد قمنا أولًا بجمع كل المرفقات من الموضوع ثم التأكد من أن القيمة المُسترجعة هي المعرف ID فقط. ثم قمنا ببناء قيمة نصية string تحوي على جميع عناصر المصفوفة (وهي المعرفات ID) مع إضافة فاصلة بين كل معرف والذي يليه، بعدها استخدمنا التابع ()do_shortcode لإنشاء المعرض. الإذن Permission إن هذا الجزء غامض قليلًا لأنه لم ينفذ وفق تصميم معين. الفكرة فيه هو استخدام المعامل perm وإعطاؤه القيمة readable كقيمة وعندها ستظهر فقط المشاركات التي يمكن للمستخدم الحالي قراءتها. هذه الطريقة عملية في حال كنت تريد إعداد قائمة من المواضيع الخاصة أو العادية ولكن يجب أن تتأكد من أنك قمت بإدراج هذه المواضيع الخاصة في المكان المخصص لها. $args = array( 'post_status' => array( 'publish', 'private' ), 'perm' => 'readable', ); التخزين المؤقت Caching هذه أحد التحسينات المتقدمة التي تسمح بالتحكم بطريقة التخزين المؤقت التي تستخدمها الاستعلامات. بشكل عام إن تخزين نتاج الاستعلام بشكل مؤقت يعتبر فكر جيدة لأن لديها فرصة كبيرة في استخدمها عدة مرات في نفس الصفحة. مثلا قائمة بأفضل 10 مواضيع على الأغلب لن تتغير من استعلام إلى آخر وبالتالي يمكن الاستفادة من تخزينها. يوجد حالتين يمكن فيها التحكم بهذا التخزين المؤقت. إذا قمت بتخزين قائمة ولاتحتاج إلى البيانات الأساسية منها metadata أو إلى تصنيفها يمكن أن تستخدم المعاملين update_post_meta_cache و update_post_term_cache وذلك لإيقاف التخزين المؤقت الخاص به. كما أنه في حال كنت تقوم باستعلام لمرة وحيدة من أجل اختبار ما سريع يمكن استخدام المعامل cache_results لإيقاف تخزين نتايج الموضوع نفسه. // Do not cache results $args = array( 'posts_per_page' => -1, 'cache_results' => false ); // Don't cache taxonomy data $args = array( 'posts_per_page' => 10, 'update_post_term_cache' => false ); قمت في هذا المثال ببناء جدول تصدير سريع لجميع المواضيع المتواجدة في قاعدة البيانات تحوي جميع معرفات المواضيع، عناوينها، الفئات، والوسوم المُسندة إليها، حيث أن تخزين هذا الاستعلام ذو الاستخدام لمرة واحدة غير منطقي، فما الفائدة من تخزين بيانات بدائية meta date عن 8000 موضوع أو أكثر. خصائص استعلامات الوورد بريس WP_Query حتى الآن كنا نتكلم عن المعاملات التي يمكن تمريرها لاستعلام WP_Query، ولكن الآن سنتكلم عنه كصنف Class وسنشرح الخصائص properties و التوابع methods التي يمكن أن نتعامل معها. يحوي WP_Query Properties Documentation على شرح وافٍ لجميع الخصائص الخاصة بهذا الصنف، ولكن سنتحدث هنا عن أكثر الخصائص فائدة وكيفية الاستفادة منها. لنبدأ أولًا بالخاصية $found_posts التي تحمل قيمة عدد المواضيع التي تم العثور عليها كإجمالي ناتج الاستعلام المدخل. أما الخاصية $post_count فإنها تحمل عدد المواضيع التي تظهر حاليًا، وهي قيمة غير ثابتة منذ استخدم ترقيم الصفحات، فمثللًا يمكن أن يكون هناك 52 موضوع أوجده الاستعلام ولكن تعرض 10 فقط في الوقت الحالي. كما أنه يجب الانتباه إلى أن القيمة التي يحملها $post_count ليس من الضروري أن تكون نفسها الموجودة في post_per_page فعلى سبيل المثال إذا وُجد 52 موضوع وكانت كل صفحة تعرض 10 مواضيع في المرة الواحدة ستكون الصفحة الأخيرة تحوي موضوعين فقط . أخيرًا سنتحدث عن الخاصية $max_num_pages والتي تحمل عدد الصفحات التي نحتاجها لإظهار النتائج، وهي عمليًا ناتج العملية $found_posts\$posts+per_page ويقرّب الناتج إلى أكبر قيمة صحيحة. $args = array( 's' => 'awesome+wordpress+plugins', 'posts_per_page' => 8 ); $results = new WP_Query( $args ); echo "A total of " . $results->found_posts . " posts were found.<br />"; echo "We will be displaying " . $results->query_vars['posts_per_page'] . " posts per page if possible.<br />"; echo "We need a total of " . $results->max_num_pages . " pages to display the results". توابع استعلامات الوورد بريس WP_Query Methods بما أننا نتكلم عن الأصناف فإن الخصائص تشابه بشكل كبير المتغيرات، والتوابع methods تشبه أيضًا الدوال functions. يمتلك استعلام الوورد بريس العديد من التوابع رغم أنك لاتحتاج إلى استخدامها مباشرة بشكل عام. ولكن أهم تابعين ذكرناهما في الأعلى هما ()have_post و ()the_post. بعض التوابع الأخرى المفيدة هي ()rewind_posts والذي يعيد ضبط الحلقة ويمكن استخدامها في حال مثلًا كان الخرج عبارة عن قائمتين متماثلتين تمامًا في مكانين مختلفين. بالنسبة للتوابع ()get و ()set ستسمح لك بالوصول إلى متغيرات الاستعلام ولانستخدمها إلا في حالات قليلة جدًا. لمزيد من المعلومات حول توابع استعلام الوورد بريس، يمكن الإطلاع على Method Documentation. سلامة البيانات: التحقق Validating، التنظيف Sanitizing، والتهريب Escaping تقترن بعض الاستعلامات المخصصة مع واجهات المستخدمين. والسيناريو الأمثل لضمان سلامة المعلومات هو إضافة فلتر مخصص يتحكم بصلاحيات الوصول للمستخدم للمواضيع. يمكن الإطلاع على المزيد من المعلومات في المقالة Adding Post Filters To Your WordPress Site. وفي حال كنت تملك مكان من الواجهة يستطيع المستخدم فيه إدخال بيانات ما، فيجب دوما التحقق وتهريب البيانات المدخلة لمنع الهجومات التي تحصل على قاعدة البيانات. ويمكن الإطلاع على معلومات أكثر في المقالة Validating, Santitizing And Escaping User Data. تعديل استعلامات SQL يوجد عدد من الفلاتر التي تسمح لك بالنفاذ إلى استعلامات SQL الفعلية والتي تُنفّذ بناء على استعلامات WP_Query. وغالبًا لا نستخدم هذه الفلاتر لذلك من الأفضل أن تتعامل مع المعاملات التي ذكرناها سابقًا. تسمح الفلاتر مثل posts_where و posts_join بتعديل شروط معينة في استعلام SQL بينما تكون استعلامات الوورد بريس أكثر مرونة ولكنها لاتسمح بوجود شروط معقدة بعد WHERE بما في ذلك التصنيفات المتعددة أو العلاقات المتعددة. في هذه الحالة يمكن استخدام الفلاتر التي ذكرناها. يمكن الإطلاع على WP_Query Filters للمزيد من المعلومات. الخلاصة أرجو أن تكون قد كونت فكرة أفضل عن صنف استعلام الوورد بريس WP_Query Class، وكيفية الحصول على المعلومات التي نريدها عبر بناء قوائم من المواضيع، كما يمكنك الدمج بين أنواع المواضيع المختلفة، التصنيفات والبيانات الأساسية لبناء نظام إدارة محتوى قوي. إذا كنت مهتمًا ببرمجة الوورد بريس، يوجد مجموعة من الأصناف التي تعمل بشكل مشابه لصنف WP_Query مثل صنف WP_Comment_Query الذي يُستعمل لتجميع التعليقات بنفس الطريقة التي يعمل بها صنف WP_Query. كما أن صنف WP_Meta_Query يتعامل مع الاستعلامات الأساسية meta_queries، بينما يتعامل صنف WP_Date_Query مع كل حدود التواريخ. ترجمة -وبتصرّف- للمقال An In-Depth Guide to Conquering WP_Query لصاحبه Daniel Pataki
    1 نقطة
  3. يأتي الباعة بجميع الأشكال والأحجام والأنواع، ومن المحتمل أنك قد اشتريت شيئًا منهم خلال السّاعة/ اليوم/ الأسبوع الماضي (دون أن تفكر في أنك تشتري من رجل/ امرأة). ما الذي يجب عليك فعله للتغلب على الخوف من البيع أوّل ما عليك القيام به هو التوقّف عن جعل قراراتك تابعةً لتخميناتك. لن يجدي التفكير بهذه الأفكار نفعًا، لأنّها أفكارٌ وليدةُ عقولنا بمعظمها: "سيعتقد الناس أنني أتحايل عليهم."* "هل سيظنون أنني لست بائعًا جيدًا بمجرد أن أبدأ بالسّؤال عن المال؟"* "هل سأبدو محتالًا إذا ما عرضت شيئًا ما للبيع ولم يقم أحد بشرائه؟"* إنّها أفكارٌ تخطر للجميع، لكنّهّا تبقى تخمينات حتى تحدث فعليًا (وهذا يعني أنها خاطئةٌ عادةً). التّخمينات سيئةٌ وقد تستنزف نجاحك المستقبلي إذا ما سمحت لها بذلك، لذا امنعها! اعترف بها ودوّنها إذا ما أردت أن تطردها من ذهنك، ثم تابع المضي قدمًا. هل تريد التّغلّب على تخميناتك؟ دوّنها على ورقة ثم احرقها! *( احرقها في مكان آمن.) * يفشل معظمنا في التّمييز بين البيع (selling) وبين الغدر (sellout)، فالفرق كبيرٌ بينهما. إذا كنت تعمل في وظيفة عادية مملّة وتكره مديرك فأنت غدّار. إذا شعرت بأنك تطلب من الناس شراء منتجٍ لست مقتنعًا به فأنت غدّار. إذا كنت تتقاضى مبالغ من المال لقاء تهريب الطيور الإندونيسية النّادرة فأنت غدّار. (قد لا يكون هذا صحيحًا، لكنّه لا يزال سيئًا بجميع الأحوال). لذا سنتحدث عن وظيفتك هذه. 3 مخططات بيع واقعية تساعدك على زيادة المبيعات وتخفيف التوتر يمكنك بيع أي شيء بعدّة طرق، ولا سيّما عبر الإنترنت. إن اختيار مخطط بيع يناسبك أمرٌ مفيدٌ للغاية، وفيما يلي بعض هذه المخططات: 1. قلل خوفك من البيع عبر البيع لفترة محدودة بِع شيئًا ما لمدّةٍ محدّدة (ولنقل أسبوعًا واحدًا)، ثم توقّف عن البيع. قيّم بعدها كيفية سير الأمور، لا سيّما إذا كنت تبيع منتجًا جديدًا أو أنّها عملية البيع الأولى التي تقوم بها. تؤدّي استراتيجية البيع لمدةٍ محدودة (على نحو سنوي أو وفق أيّ جدول زمني آخر) إلى جعل عملائك يشعرون بالحاجة الملحّة إلى شراء منتجك بسرعةٍ وبندرة هذا المنتج، وتُتيح لك في الوقت ذاته الحفاظ على التّوازن بين عملك وحياتك: تبيع خلال فترة البيع المحدودة، ثم تستمتع بحياتك باقي الوقت. استراتيجية البيع لمدةٍ محدودةٍ رائعةٌ أيضًا لأنّها تمنحك القدرة على اختيار الوقت المناسب لك للبدء بالبيع، فلا أحد يريد أن يبيع طوال الوقت. 2. اعتمد المنتجات الخضراء التي يمكن بيعها طوال العام المنتجات الخضراء رائعةٌ من حيث المبدأ، لكن عليك الحذر عند اعتماد هذا الخيار. على الرّغم من أنّ مخطط البيع المتمثّل في عرض منتج ما بصورة دائمة يستحقّ التّفكير، إلا أنّه يتطلّب في 99% من الحالات انتباهًا وجهدًا مستمرين. إذا كنت تودّ عرضك منتجك للبيع طوال الوقت فهذا أمرٌ مقبولٌ تمامًا، لكنّك ستُضطّر في الغالب إلى إطلاق حملات ترويج ربع سنوية أو حملات مصغّرة خلال العام لتحقيق ارتفاع حاد ّفي المبيعات. لا تنسَ أن بإمكانك التحكّم بتلك الارتفاعات وهذا أمرٌ جيد! 3. لا تتبع جدولا محددا لا ترغب في الالتزام بمخطط بيعٍ محدّد! أضف إلى التّقويم الخاص بك دورة مبيعات تتيح لك التطلّع إلى هدفٍ معينٍ والالتزام به. يميل كاتب المقال الأصلي إلى التّخطيط لحملة إطلاق منتجه مسبقًا بنحو 3- 6 أشهر. يمكنك إضافة ذلك إلى التّقويم وتغييره على النحو الأنسب لك. يمكنك تغيير مخطط البيع الذي تقرر اتّباعه بغضّ النّظر عن نوعه. يمكنك دومًا دمجُ الأمور والتّعلم من تجاربك. ويبقى الجزء الأكثر أهمية هو قدرتك على البيع وإتاحة الفرصة أمام النّاس لزيادة رصيدك المصرفي مقابل الشّيء الذي تقدّمه. مرحلة ما قبل التسويق هي الجزء الأكثر أهمية من عملية البيع لن يتمكّن أي شخص من الحصول على المال لمجرد قيامه بإنشاء صفحةٍ للمبيعات. ربما سمعت عن حملات Kickstarter التي تجني ملايين الدولارات وكأنّها تجنيها بين ليلة وضحاها، ولكن كيف حقّقت تلك الحملات هذا النجاح؟ لقد أمضى القائمون عليها أشهرًا طوالًا في مرحلة ما قبل التّسويق. قامت بالعديد من هذه الحملاتِ علاماتٌ تجاريةٌ كوّنت جماهيريةً محدودةً، حيث وجدت منتجًا ناجحًا وشرعت ببيعه في البداية بكمياتٍ صغيرةٍ على نحو جيد. يقول جايسون زوك كاتب المقال: "عندما أطلقتُ مشروع BuyMyFuture عام 2015، كنتُ قد أطلقته بطريقة البيع لمدة محدودة. ربما بدا هذا المشروع للأشخاص الذين اطّلعوا عليه خلال فترة البيع البالغة أسبوعين وكأنّه قد ظهر من العدم، جاهزٌ للانطلاق، لكنّ الحال لم يكن كذلك إطلاقًا. لقد أمضيت 4 أشهرٍ في التحضير لفترة البيع البالغة 14 يومًا منذ أن تبادرت الفكرة الأولية إلى ذهني وحتى إطلاقها رسميًّا. وفيما يلي الخطوات الفعلية التي قمت بها في مرحلة ما قبل التّسويق والتي جعلتني أحقّق مبيعاتٍ بقيمة 178000 دولار في غضون أسبوعين: تحدّثت عبر الهاتف مع 49 عميلًا سبق أن تعاملتُ معهم (تواصلٌ بشري حقيقي!). شاركت أكثر من 30 تحديثٍ أثار جدلًا حول المشروع عبر وسائل التواصل الاجتماعي (صور، شعارات، فيديوهات قصيرة). أنشأتُ موقعًا مخصصًا لتلقّي رسائل البريد الإلكتروني من الزّبائن المحتملين في المرحلة التي سبقت إطلاق المشروع. كتبت 60 تدوينة يومية قبل تاريخ إطلاق المشروع (بلغ عدد كلماتها أكثر من 40,000 كلمة). نسّقت 26 مقابلة إذاعية ليتم بثّها مباشرةً عبر الإنترنت عند إطلاق المشروع (سُجّلت جميعها قبل إطلاق المشروع). تواصلت مع 52 صديقًا وطلبت منهم أن يكونوا شركاء (تمكّن 14 منهم من تحقيق المبيعات). وظّفت متخصّصًا في إعلانات فيس بوك لإطلاق حملةٍ لإعادة استهداف. أطلقت برنامجًا إذاعيًا عبر الإنترنت للحديث عن المشروع وسجّلت 21 حلقة. أدرجت اسم المشروع وتاريخ إطلاقه في رسائل البريد الإلكتروني التي أرسلتها أسبوعيًا إلى هذه القائمة البريدية. أشاركُ معك هذا المشروع كمثالٍ لأُبيّن لك الكثير من الأمور التي يمكنك القيام بها. هناك الكثير من الأمور التي كان بإمكاني القيام بها لكنّ ما قمت به كان كافيًا ووافيًا. لستَ مضّطرًا إلى القيام بهذا القدر من العمل في مرحلة ما قبل التّسويق إذا لم ترغب بذلك، ولكن تذكّر أمرًا واحدًا: قد لا تحتاجُ إلى إجراء 49 مكالمة هاتفية (أو مكالمة عبر سكايب). يكفي إجراء 5 – 10 مكالمات، ولكن احرص على إجرائها مع أناسٍ يُعتَبرون الزّبائن المثاليين للمنتج الذي تبيعهُ. (لا تُجرِ مكالمةً مع والدتك ما لم يكن المنتج الذي تبيعه موجّهًا لأناسٍ مثلها). أخبرهم عن منتجك، واصغِ إلى الكلمات التي يستخدمونها عندما يكرّرون الحديث عن منتجك. أنصت إلى المزايا أو الفوائد التي تهمّهم، واحرص على تسليط الضّوء عليها عند قيامك بالبيع.* لم لا يزال التسويق عبر البريد الإلكتروني هو الاستراتيجية الأفضل لتحقيق المبيعات؟ إنّ التّسويق عبر البريد الإلكتروني هو الطريقة الأفضل لبيع أي شيءٍ اليوم. لا تُضيّع وقتك على وسائل التّواصل الاجتماعي. لا تُضيّع وقتك ومالك على الإعلانات المدفوعة. أنشئ قائمةً بريديةً تضمّ الأشخاص المهتمين بالمنتج وتوجّه بالبيع لهم مباشرةً. الإعلانات المدفوعة مفيدةٌ إذا كانت المنتجات تحقّقُ مبيعاتٍ سلفًا، أو إذا كنتَ تعرف خبيرًا في عالم التّسويق المدفوع. تبدو إعلانات فيس بوك جذّابةً بالفعل، لكنّها قد تُشكّل مصدر إلهاءٍ كبير ومضيعةً للمال إذا لم تُحسن استخدامها ولا تملك منتجًا يرغب الناس بشرائه.* ما هي المشكلة التي سيحلها منتجك للزبون المحتمل؟ هل نجح هذا المنتج في حلّ مشكلةٍ تواجهك؟ شارك قصتك تلك! يحبّ النّاس سماع القصص، لاسيّما تلك التي تمسّهم. يسرد كاتب المقال المثال التالي: هل يقدم منتجك شيئا مميزا؟ يُستحسن أن يكون كذلك. لن يبرز منتجك ما لم يقدّم شيئًا مميزًا بغضّ النّظر عن الرّسائل الكثيرة التي تُرسلها إلى النّاس عبر البريد الإلكتروني واصفًا إيّاه. اعثر على أمرٍ يميّزه. تلميح: سيكون عادةً شيئًا يلفِتُ زبائنُك المحتملون نظركَ إليه (ستكتشفه في الاتصالات التي تجريها مع زبائنك). في حال عدم وجود زبائن تتصل بهم، ابحث عن بعضهم! عليك أن تتعلّم كيفية الحديث عن منتجك خلال مرحلة ما قبل التسويق قبل أن تبدأ ببذل الكثير من الجهد في مرحلة البيع. اخلق شعورا بالعجالة البيع لمدّة محدودة؟ خصوماتٌ محدودة المدّة؟ حملة إطلاق سنوية؟ عددٌ محدودٌ من المبيعات؟ كلّها أمورٌ تخلق شعورًا بالعجالة والنّدرة وتدفع النّاس إلى الشّراء. لا تقل بأنّ هذا الشيء "سيظلّ متوفرًا حتى الأسبوع المقبل فقط" إذا كان النّاس سيجدونه بعد أسبوع أو أسبوعين، فهذا عملٌ غير مجدٍ وسيضرّ بسمعتك. فيما يلي نموذج عن مخطط لإرسال رسائل مبيعات عبر البريد الإلكتروني إلى قائمتك البريدية خلال حملة إطلاق مدتها أسبوعين: اليوم السابق للإطلاق: ستقوم بإطلاق منتجك/ خدمتك غدًا! لا تتردد في مشاركة الآخرين بالتّفاصيل والتّكلفة. يمكنك تأجيل ذلك إلى يوم الإطلاق إذا أردت. يوم الإطلاق: أصبح منتجك متوفرًا الآن! لا تقل "اشترِ الآن!" بل اسرد عبر رسائل البريد الإلكتروني قصةً أو مثالًا عن مشكلة نجح منتجك في حلّها، واحرص على إدراج عدد من روابط الشّراء في رسالتك هذه. اليوم الثالث: قدّم قصصًا ذات صلة أو شهاداتٍ لأناسٍ استخدموا منتجك واستفادوا منه على نحو فعليّ (يمكنك سرد قصتك الخاصّة أيضًا). اليوم السابع: إنّه الوقت المثالي لتقديم هديةٍ في منتصف مرحلة الإطلاق. يمكنك التّخطيط مسبقًا لهذا الأمر! هل لديك شيءٌ مثيرٌ للاهتمام تقدّمه للأشخاص الذي يشترون منتجك؟ اذكره في رسالة البريد الإلكتروني. يمكنك أيضًا ذِكر شهادات بعض المشترين. عليك أيضًا أن تقدّم هذه الهدية إلى جميع الأشخاص الذين اشتروا المنتج أو الذين سيشترونه. اليوم الثالث عشر: سيتوقّف البيع غدًا! هل لديك قصةٌ أخرى عن تفرّد وتميّز منتجك؟ شاركها وذكّر النّاس بأنّ البيع يتوقّف غدًا. اليوم الأخير (صباحًا): آن الأوان! العجالة! النّدرة! ** - اليوم الأخير (مساءً، للأشخاص الذين قاموا بالنّقر فقط):** تتعلق هذه النقطة بعلامات ConvertKit التي سنتحدث عنها بعد قليل. إنّها دعوةٌ أخيرةٌ للشّراء وهي ناجعةٌ فعلًا. يَفترضُ هذا المخطط أنّك قمت بالكثير في مرحلة ما قبل التّسويق، بما في ذلك ذكر تاريخ إطلاق المنتج مسبقًا عددًا من المرات. يمكنك ذكر هذا التاريخ قبل ستة أشهر من تاريخ وقوعه إذا أردت، ولكن عليك ذكره قبل شهر واحدٍ على الأقل في رسائلك عبر البريد الإلكتروني. نصائح مهمة للتسويق عبر البريد الإلكتروني قد تسبّب أتمتة الأمور في وقتٍ مبكر الكثير من التّعقيدات والمخاوف، وقد شهدنا ذلك مرارًا وتكرارًا. يؤذي النّاس أنفسهم عندما يفرطون في أتمتة جميع الأمور المتعلقة بالبريد الإلكتروني. تابع قراءة هذا المقطع إذا كنت متمرسًا في هذه الأمور، أما إذا كنت جديدًا على عالم التّسويق عبر البريد الإلكتروني فمن الأفضل أن تتخطاه. سنذكر تكتيكات استخدام منصة ConvertKit، باعتبارها منصةً تُستخدم في التّسويق عبر البريد الإلكتروني (يمكنك استخدام تكتيكاتٍ مشابهة كالتّقسيم وإنشاء العلامات مع غيرها من مزودي خدمة البريد الإلكتروني). 1. أنشئ العلامات واعرف المزيد عن مشتركيك أنشئ علامةً جديدةً وسمّها "اسم المنتج – النّقر"، ثم أنشئ خدمة تشغيل آلي جديدةً يتم تفعيلها عند النّقر على رابطٍ معيّن. يجب أن ينقل هذا الرّابط الزّبون إلى صفحة مبيعات منتجك، وينبغي عنّد النقر عليه أن يُضيف العلامة الجديدة التي أنشأتها للتو (اسم المنتج – النّقر). أنشئ علامةً جديدةً وسمّها "اسم المنتج – الشراء". إذا كنت تبيع منتجاتك على موقع Gumroad، تتيح لك ConvertKit إنشاء خدمة تشغيل آلي تضيف العلامة بمنتهى السّهولة. يمكنك أيضًا استخدام خدمة Zapier.com لإنشاء خدمة تشغيل آلي تضيف علامة الشّراء عندما تتمّ عملية البيع باستخدام Stripe (ومعالجات الدفع الأخرى). يمكنك أيضًا إضافة العلامة يدويًا عند قيام النّاس بالشّراء. إذا شعرت بالارتباك نتيجة كل ذلك فلا تقلق. لست مضّطرًا إلى تنفيذ أية خدمات تشغيل آلي عند البيع، لكنّ قيامك بذلك أمرٌ جيّد. 2. كيف تستخدم العلامات على نحو فعال تأكّد من استخدام رابط التّفعيل الذي أنشأته في كلّ مرّةٍ تربط فيها صفحة مبيعاتك بالبثّ عبر البريد الإلكتروني Email Broadcast، فهذا من شأنه أن يُحصي النّقرات (المشترين المحتملين!) ويضيفها إلى علامة "اسم المنتج –النّقر" التي أنشأتها (المزيد عن ذلك في الخطوة التالية). عند إعداد رسائل المبيعات عبر البريد الإلكتروني، أرسلها إلى قائمتك البريدية بأكملها، أما عندما تقوم باختيار المشتركين من أجل بثّ جديد، اختر التّصفية "يطابق لا شيء" واختر العلامة "اسم المنتج – الشّراء". يستبعد هذا الإجراء الأشخاصَ الذين قاموا بالشّراء من استلام بقية رسائل المبيعات عبر البريد الإلكتروني. وفيما يلي مثال عن عمل هذه العلامات: 3. إرسال "الدعوة الأخيرة!" (مساء) عبر البريد الإلكتروني أرسل هذا البثّ الأخير عبر البريد الإلكتروني إلى الأشخاص الذين قاموا بالنّقر على رابط صفحة المبيعات في رسائل البريد الإلكتروني السّابقة. سيُذهلك عدد الأشخاص الذين يحتاجون إلى هذا التّنبيه الأخير، وأنّ الأشخاص الذين سيتحولون إلى مشترين هم الذين أظهروا اهتمامهم بالشّراء (قاموا بالنّقر!). في البثّ الأخير، اختر الإرسال إلى المشتركين الموجودين في علامة "اسم المنتج – النّقر" فقط. يمكنك أن تُذكّرهم بأنّهم قاموا بالنّقر وأنّ هذه هي فرصتهم الأخيرة لشراء الشّيء الذي أثار اهتمامهم. بالحديث عن التسويق عبر البريد الإلكتروني، تغلب على خوفك من البيع بطلب المساعدة من جمهورك يمكن لجملةٍ بسيطةٍ في رسالةٍ عبر البريد الإلكتروني أو عبر وسائل التّواصل الاجتماعي أن تجعل جمهورك الحالي يساعدك في مشاركة الشيء الذي تقوم ببيعه. ملاحظة هامة عليك أخذها في الحسبان: هل الشّيء الذي تبيعه مثيرٌ للاهتمام؟ كن صادقًا مع نفسك لأنّك لا تشارك الأمور التي لا تثير الاهتمام. عباراتٌ بسيطةٌ مثل "هل تريد المساعدة في نشر الخبر؟ شارك هذا!" أو "يسعدني أيّها الرّفاق أن تقوموا بمساعدتي في توجيه هذه الرّسالة إلى صديق أو مشاركتها مع أصدقائكم على وسائل التّواصل الاجتماعي!" لا تنفعل وتكتب "أعد تغريد هذه الرّسالة من فضلك" بعد كل تغريدة. لا تطلب من جميع أصدقائك على فيس بوك أن يشاركوا حالتك. اجعل طلبك بسيطًا واترك للنّاس خيار مساعدتك إذا ما رغبوا بذلك. الكلمةُ مؤثرةٌ لكنّ الكلمة الصّادقة هي الأكثر تأثيرًا. الطلّب البسيط مقبولٌ بالتّأكيد، إلّا أنّه من الأفضل أن يُحسن النّاس الظّن بك ويقدموا لك المساعدة في حال وجدوا أنّ ما تبيعه مثيرٌ للاهتمام بما فيه الكفاية. ماذا عن الشركاء؟ لا أستخدم - والحديث للكاتب - التّسويق بالعمولة كثيرًا مع جمهوري، لذا لا أعتبر نفسي المصدر الأفضل للمعلومات المتعلّقة بهذا الخصوص. إذا عرض النّاس عليك مساعدتك في بيع منتجك بصفتهم شركاء، فربما عليك التّحري عن ذلك أكثر. لا ينبغي أن يكون التسويق مخيفا أو مرهقا نأمل أنّك قد عرفت الآن أن التّسويق هو الخطوة التّالية التي تلي صُنع شيءٍ ما، وأنّه ليس جبلًا شاهقًا مخيفًا أو وحشًا يختبئ في الخزانة. هل تشعر بالإرهاق؟ لا بأس! فهذا أمرٌ طبيعي. هدفنا هنا أن نقدّم لك مجموعةً من الخيارات والأفكار المفيدة. المعلومةُ قوةٌ في وجه الخوف، وأفضل ما في الأمر أنّك لست مضطرًا للقيام بكلّ تلك الأمور. تذكّر أنّ بإمكانك إطلاق حملات بيعٍ أصغر حجمًا إذا كنت جديدًا على عالم البيع. تعلّم من تجربتك. لا تدع الخيارات المتاحة أمامك وإمكانيات كسب المال تُفقدك تركيزك، فالمال آتٍ. ركّز على عملية البيع الأولى ثم الثّانية ثم الثّالثة. عامل زبائنك معاملة رائعة، قدّم لهم أكثر من المطلوب، وستجد أن مبيعاتك تزداد بمرور الوقت. ترجمة - وبتصرف - للمقال We’re All Selling Something, So Overcome The Fear of Selling لصاحبه Jason Zook
    1 نقطة
  4. ستتعلم في هذا الدرس التوضيحي طريقة رسم مشهد لطائرة مركونة على مدرج الطيران باستخدام برنامج Adobe Illustrator. وبالاعتماد على الأشكال الأساسية مثل الشكل البيضاوي والشكل المستطيل والمستطيل ذو الحواف الدائرية لعمل الرسم المطلوب، ستتعلم تقنيات متعددة لإضافة بعض التدرجات والتأثيرات اللونية للحصول على نتيجة واقعية قدر الإمكان. فلتبدأ المهمّة! إنشاء مستند عمل جديد 1- بعد تشغيل البرنامج اضغط على Ctrl+N لإنشاء ملف عمل جديد، واضبط الإعدادات التالية: Number of Artboards: ‏1 Units:‏ ‏Pixels Width:‏px‏860 Height‏:‏ 640px ثم بالانتقال إلى Advanced اضبط الإعدادات كالتالي: Color Mode‏:‏ RGB Raster Effects‏:‏‏ (Screen (72ppi Preview Mode‏:‏ Default ثم تحقق من عدم تفعيل خيار Align New Objects to Pixel Grid قبل الضغط على OK. رسم هيكل الطائرة 2- باستخدام أداة رسم الشكل البيضاوي (Ellipse Tool ltr (L ارسم شكلًا بيضاويًا باللون الأسود وبأبعاد 95107px، ثم بأداة التحديد (Direct Selection Tool (A حدد نقاط التحكم اليمنى واليسرى للشكل البيضاوي وحركهم بمقدار 4px لأعلى. بنفس أداة التحديد (Direct Selection Tool (A مع الضغط على مفتاح Shift اسحب ذراع التحكم العلوية للوصول إلى الشكل المرفق أدناه. باستخدام أداة (Rectangle Tool (M ارسم مستطيلًا باللون الأصفر بأبعاد 1004.5px، واضبط موضعه كما هو موضح في الصورة. 3- حدد الشكل البيضاوي الناتج من الخطوة 2 واصنع نسخة منه بالضغط على Ctrl+F ،Ctrl+C واستبدل لون حدود الشكل المنسوخ إلى اللون الأحمر. أعد تحديد الشكل البيضاوي الأحمر والمستطيل الأصفر واصنع نسخة منهم، أبقِ الأشكال محددة ثم انتقل إلى نافذة Pathfinder وذلك بالذهاب إلى pathfinder < window واضغط على أيقونة Minus Front. ثم اضغط على مفاتيح Ctrl+Shift+G لإلغاء تجميع العناصر في المجموعة الناتجة. حدّد الشكل العلوي الناتج وغيّر لون حدوده إلى اللون الأزرق، ثم انتقل للجزء السفلي وغيّر لون حدوده إلى اللون التركوازي، حدّد الجزء المتبقي من الشكل البيضاوي الأحمر والشكل المستطيل الأصفر ثم انقر على أيقونة intersectمن نافذة Pathfinder. أخيرًا ضعِ الشكل الناتج في مقدمة سطح العمل بالضغط على Ctrl +Shift +Right* *Square Bracket. 4- بالرجوع إلى الشكل البيضاوي من خطوة 2، حدّد الشكل وضعه في مقدمة سطح العمل بالضغط على Ctrl +Shift** +Right Square Bracket**، ثم حدّد نقطة التحكم العلوية واحذفها. بالاستفادة من أداة *Convert Anchor Point Tool* أو بالضغط على مفاتيح اختصارها Shift +C اضغط على ذراع التحكم العلوية لنقطة التحكم اليسرى واسحبها للأسفل ناحية اليمين. كرر العملية مع نقطة التحكم اليمنى واسحب ذراع التحكم إلى الأسفل ناحية اليسار. 5- حدد الشكل ذو اللون التركوازي الناتج من الخطوة 3، أزل حدود الشكل واملأه بتدرج قطري كما يظهر في الصورة الثانية أدناه. انتقل إلى الشكل الأصفر وأزل لون حدوده واملأه باللون الأسود درجة 000000#، مع إبقائك على الشكل محددًا غير نظام الدمج (Blending Mode) إلى Hard Light وقلل الشفافية حتى 50%. انتقل الآن إلى الشكل الأسود وأزل لون حدوده واملأه بتدرج قطري كما هو موضح في الصورة. أبق على تحديد الشكل الناتج واذهب إلى Feather < stylize < Effect، اضبط القيمة على 2px ثم اضغط OK. وأخيرًا غير نظام دمج الشكل الناتج إلى Soft Light. 6- بالاعتماد على الأدوات (Pen Tool (P و(Tool (G ارسم شكلًا مضيئًا باللون الأزرق الأقرب للرمادي كما هو ظاهر في الصورة المرفقة، أعد تحديد الشكل الناتج واذهب إلى Gaussian Blur < Blur < Effect، ثم اضبط القيمة على 3px Radius ثم OK. غير نظام الدمج للشكل الناتج إلى overlay وقلل الشفافية حتى 70%. 7- انتقالًا إلى حجرة القيادة، ارسم مستطيلًا بأبعاد 5*px17 باللون الأزرق، حدّد المستطيل الناتج وبالضغط على مفتاح Shift انقر على الشكل العلوي الناتج من خطوة 5. حرر مفتاح Shift واضغط على الجزء العلوي الناتج من خطوة 5 مجددًا (لتعديل موضعه)، بعدها افتح نافذة Align بالذهاب إلى Align > Window، اضغط على أيقونة **Horizontal *Align Center ثم Vertical Align Top. أعد تحديد المستطيل الأزرق وحرّكه بمقدار 20px لأسفل. انتقالًا إلى أداة رسم المستطيل (Rectangle Tool (M أدرج مستطيلين بأبعاد: 2017px و7.5*15.5px واضبط موضع المستطيلين كما هو موضح في الصورة. ثم بالاعتماد على أداة (Direct Selection Tool (A حدد نقطة التحكم السفلية من جهة اليمين الخاصة بالمستطيل الأحمر وحركها بمقدار 9px لليمين. وانتقل إلى نقطة التحكم السفلية من جهة اليسار وحركها بمقدار 8px لليمين. أخيرًا حدد نقطة التحكم السفلية من جهة اليمين للمستطيل الأحمر المتبقي وحركها بمقدار 9px لليمين. 8- حدّد الشكل الأحمر الكبير واذهب إلى Move < Transform < Object وأدخل القيم -1.5px في مربع Horizontal و3.5px في مربع Vertical، ثم اضغط على Copy. استبدل لون حدود الشكل الناتج إلى اللون الأصفر، الآن حرر الشكل الأحمر الكبير واصنع نسخة منه بالضغط على Ctrl+F ،Ctrl+C. أبقِ على تحديد الشكل ثم بالضغط على مفتاح Shift اضغط على الشكل الأصفر. افتح نافذة Pathfinder بالذهاب إلى **Pathfinder > **Window واضغط على أيقونة Minus Front. بعدها استبدل لون حدود الشكل الناتج إلى اللون الأصفر. ركز على الصورة الثالثة أدناه، حدد نقطتي التحكم المشار إليهما بعلامة زرقاء ثم اضغط على أيقونة Cut path at selected anchor points من شريط Properties، وهذا سيجعل الشكل الأصفر بمسارين. حدّد المسار العلوي ثم بالضغط على الزر الأيمن للفأرة في مسطح العمل اختر Join من القائمة المنسدلة واستبدل لون حدود الشكل الناتج باللون الأخضر. أخيرًا حدّد المسار المتبقي من الشكل الأصفر واضغط على Ctrl+J لتحصل على النتيجة الموضحة أدناه. 9- حدد الشكل الأحمر الصغير واذهب إلى Move < Transform < Object وأدخل القيم -1.5px في مربع Horizontal و2.5px في مربع Vertical ثم اضغط Copy. استبدل لون حدود الشكل الناتج باللون التركوازي. حرر الشكل الأحمر الصغير واصنع نسخةً منه بالضغط على Ctrl+C ،Ctrl+F. أبقِ على تحديد النسخة الجديدة، اضغط على مفتاح Shift ثم انقر على الشكل التركوازي. افتح نافذة Pathfinder بالذهاب إلى Pathfinder < Window واضغط على أيقونة Minus Front. ثم استبدل لون حدود الشكل الناتج إلى اللون الأصفر. ركز على الصورة الثالثة أدناه وحدد نقاط التحكم المشار إليها باللون الأزرق ثم اضغط على Cut path at selected anchor points من شريط Properties. وهذا سيجعل للشكل الأصفر مسارين، حدد المسار العلوي وبالنقر على زر الفأرة الأيمن على مسطح العمل اختر Join من القائمة المنسدلة. ثم استبدل لون حدود الشكل الناتج إلى اللون الأخضر. أخيرًا حدد المسار المتبقي للشكل الأصفر واضغط على Ctrl+J للحصول على النتيجة الموضحة أدناه. 10- حدد الشكلين باللون الأحمر وأزل لون الحدود ثم املأ الشكلين بدرجةٍ من الأزرق الغامق 0e1520‏#. انتقل إلى تحديد الشكلين باللون الأخضر وأزل لون الحدود واملأ الشكلين بدرجةٍ من الأزرق المائل للرمادي 2e333d‏#. ثم انتقل للشكلين باللون الأصفر وكرر الخطوات السابقة واملأ الأشكال باللون الأزرق الداكن المائل للرمادي 454954‏#. الآن أعد تحديد أول شكلين صنعتهم في هذه الخطوة وبالضغط على Ctrl+F ،Ctrl+C اصنع نسخةً منهم، عدّل موضع النسخ لتصبح في مقدمة سطح العمل بالضغط على Ctrl +Shift +Right Square Bracket. أبق على تحديد الأشكال الناتجة واستبدل لون التعبئة بعمل تدرج خطي كما يظهر أدناه. أخيرًا غّير نظام دمج الأشكال الناتجة إلى screen وقلل الشفافية حتى 80%. 11- حدد الأشكال الناتجة من الخطوة 7 وحتى الآن -باستثناء المستطيل الأزرق- واضغط على Ctrl+G لتجميعهم معًا. أبقِ على تحديد المجموعة الجديدة واذهب إلى Reflect < Transform < Object، اختر vertical ثم copy، ثم حرك النسخة إلى اليسار. حدد وأزل المستطيل الأزرق. أخيرًا حدّد العناصر الناتجة من خطوة 2 وحتى الآن وبالضغط على Ctrl+G ضعهم معًا في مجموعةٍ واحدة. رسم ذيل الطائرة 12- باستخدام الأداة (Rectangle Tool (M ارسم شكلًا مستطيلًا أبعاده 12123px بلون أحمر، واضبط موضعه كما يظهر في الصورة. ثم بالاعتماد على أداة التحديد (Direct Selection Tool (A حدد نقطة التحكم العلوية اليمنى للمستطيل الجديد وحرّكه لليسار بمقدار 5px، وانتقل لنقطة التحكم العلوية اليسرى وحركها أيضًا بمقدار 5px لليمين. أعد تحديد الشكل باللون الأحمر واذهب إلى Round Corners < Stylize < Effect وأدخل قيمة 2px Radius ثم OK. ارسم شكلًا بيضاويًا باستخدام أداة (Ellipse Tool (L أبعاده 15.51.6px، واضبط موضعه كما هو موضح في الصورة الرابعة أدناه. أعد تحديد الشكلين الناتجين من هذه الخطوة وأزل لون الحدود، ثم املأ الشكلين بتدرجٍ خطيٍّ كما يظهر في الصورة أدناه. أخيرًا أخفِ الشكل البيضاوي خلف الأشكال المتبقية في هذه الخطوة. 13- حدد الشكل الكبير الناتج عن خطوة 12، اختر أداة (Rotate Tool (R وبالضغط على مفتاح Alt انقر على النقطة الوسطى أسفل الشكل. في مربع الحوار Rotate أدخل قيمة 83 درجة للزاوية واضغط Copy. حرك الشكل الناتج 3px لأسفل ولليمين بمقدار 3px أيضًا، واستبدل لون تعبئته بعمل تدرجٍ خطيٍّ كما يظهر في الصورة أدناه. احتفظ بتحديد الشكل واذهب إلى Reflect < Transform < Object، اختر Vertical واضغط Copy. اسحب النسخة إلى اليمين كما يظهر في الصورة الأخيرة. أخيرًا حدد جميع الأشكال التي نتجت من بداية الخطوة 12 للآن وضعهم في الخلفية Ctrl +Shift +Left Square Bracket. رسم أجنحة الطائرة 14- ستكون البداية برسم الجناح الأيمن، حدد الشكل كما هو موضحٌ في الصورة الأولى المرفقة واذهب إلى **Scale < **Transform < Object، اختر Uniform وأدخل القيمة 275% في خانة Scale ثم Copy. أبقِ على تحديد الشكل الأخير وحرّكه بزاوية دوران -1.5 درجة ثم اضبط موضعه كما هو موضحٌ في الصورة الرابعة أدناه، واستبدل لون التعبئة للشكل بتدرجٍ خطيٍّ كما يظهر في الصورة الخامسة. اختر أداة (+) Add Anchor Point Tool واضغط على النقطة المحددة باللون الأحمر، أعد تحديد نقطة التحكم الجديدة وحركها لأعلى 6px. 15- ارسم شكلًا مستطيلًأ باللون الأحمر باستخدام أداة (Rectangle Tool (M واضبط موضعه كما هو موضحٍ في الصورة الأولى أدناه. أعد تحديد الشكل الناتج عن خطوة 14 وانسخه بالضغط على Ctrl+F ،Ctrl+C، احتفظ بتحديد النسخة وبالضغط على مفتاح Shift وانقر على المستطيل الأحمر ثم افتح نافذة Pathfinder بالذهاب إلى Pathfinder < Window واضغط على Intersect. أزل لون حدود الشكل الناتج واملأه بتدرجٍ خطيٍّ كما يظهر في الصورة. باستخدام أداة () Line Segment Tool ارسم خطًا رأسيًا، بسماكة 1px وحدوده بلون أحمر قاتم 231f20‏# وبلا تعبئة. أخيرًا طبق Width Profile 1 للخط المرسوم. 16- باستخدام أداة (Pen Tool (P ارسم عنصرًا باللون الأسود كما يظهر في الصورة الأولى أدناه، وانسخ الشكل الناتج بالضغط على Ctrl+F ،Ctrl+C، ثم استبدل لون الحدود باللون الأحمر. بالاعتماد على أداة (Direct Selection Tool (A اضبط ذراع التحكم للعنصر الأحمر كما يظهر في الصورة. أعد تحديد الشكلين الناتجين من هذه الخطوة وأزل لون الحدود ثم املأ الشكلين بتدرج ٍ خطيٍّ كما يظهر في آخر صورتين. 17- اتبع تسلسل الخطوات المُوضح في الصور التالية وكرر نفس طريقة الرسم في الخطوات السابقة لرسم المزيد من الأشكال. رسم المحرك النفاث 18- باستخدام أداة (Ellipse Tool (L ارسم شكلًا بيضاويًا باللون الأحمر بأبعاد 13.5px12.5. أبقِ على تحديد الشكل واذهب إلى Offset Path < Path < Object وأدخل قيمة 1.5px Offset- واضغط OK. انتقل إلى أداة رسم المستطيل (Rectangle Tool (M وارسم مستطيلًا باللون الأصفر بأبعاد 1.5px12 واضبط موضعه كما هو موضحٌ في الصورة. بالاعتماد على أداة (Direct Selection Tool (A حدد نقطة التحكم العلوية اليمنى للمستطيل الأصفر وحركها لليمين 1px، وكرر نفس العملية مع نقطة التحكم العلوية اليسرى 1px بالاتجاه المعاكس. أعد تحديد الشكل الأصفر واذهب إلى Round Corners < Stylize < Effect، أدخل قيمة 1px Radius ثم اضغط OK. أبقِ على تحديد الشكل الناتج وأزل لون حدوده واملأه بتدرجٍ خطيٍّ كما هو موضحٌ في الصورة الأخيرة. 19- حدد الشكل الأسود الناتج من خطوة 18 ثم استخدم الأداة (Rotate Tool (R ومع الضغط على مفتاح Alt انقر على مركز الشكل البيضاوي ذو اللون الأحمر. في مربع الحوار Rotate أدخل قيمة الزاوية 15 درجة واضغط Copy. كرر الخطوة بالضغط على Ctrl+D حتى تصل إلى النتيجة الموضحة في الصورة الثانية أدناه. حدد الشكلين باللون الأحمر من خطوة 18 وضعهم في مقدمة سطح العمل بالضغط على Ctrl +Shift +Right Square Bracket. أعد تحديد الشكل البيضاوي الكبير وأزل لون حدوده واملأه باللون الأزرق الداكن المائل للرمادي 404952#. ثم حدد الشكل البيضاوي الأحمر المتبقي وأزل لون حدوده واملأه بتدرجٍ خطيٍّ كما في الصورة السابقة. أخيرًا حدد كافة الأشكال الناتجة من خطوة 18 حتى الآن وضعها في مجموعة. 20- اختر أداة (Ellipse Tool (L وارسم شكلًا بيضاويًا باللون الأحمر بأبعاد 38.5*36px. أبقِ على تحديد الشكل واذهب إلى Offset Path < Path < Object وأدخل قيمة 7.5px Offset ثم OK، بعدها حرك الشكل الناتج 1px لأسفل ثم انسخ الشكل الأخير وذلك بالضغط على Ctrl+F ،Ctrl+C، واستبدل لون حدوده باللون الأزرق. أبقِ على تحديد الشكل البيضاوي الأزرق وافتح نافذة Transform بالذهاب إلى Transform < Window وغير قيم العرض إلى 60.5px والارتفاع إلى 53.5px. حرك الشكل الناتج 2px لأعلى وكذلك 2px لليسار، وأخفهِ خلف الشكل البيضاوي الأحمر الكبير. 21- حدّد المجموعة الناتجة من خطوة 19 ومع الضغط على مفتاح Shift انقر على الشكل البيضاوي الأحمر الصغير. افتح نافذة المحاذاة Align وذلك بالذهاب إلى Align < Window، ثم اضغط على Horizontal Align Center واضغط على Vertical Align Center. أعد تحديد المجموعة الناتجة من خطوة 19 وافتح نافذة Transform بالذهاب إلى Transform < Window، ثم غير قيم العرض إلى 38.5px والارتفاع إلى 36px. 22- حدّد الشكل البيضاوي الأحمر صغير الحجم وانسخه بالضغط على Ctrl+F ،Ctrl+C. أبقِ على تحديد النسخة وبالضغط على مفتاح Shift انقر على الشكل البيضاوي الكبير. افتح نافذة Pathfinder وذلك بالذهاب إلى Pathfinder < Window واضغط على زر Minus Front. أزل حدود الشكل الناتج واملأه بتدرجٍ خطيٍّ كما يظهر في الصورة الثانية أدناه. طبق تأثير Feather 4px على الشكل الناتج، ثم غير نظام الدمج إلى Screen وقلل الشفافية حتى 80%. 23- حدد الشكل الناتج من خطوة 22 وانسخه بالضغط على Ctrl+F ،Ctrl+C. باستخدام أداة (Selection Tool (V انقر نقرًا مزدوجًا على المسار الجديد. حدد الشكل البيضاوي الصغير واذهب إلى Scale < Transform < Object، اختر Uniform، وأدخل قيمة 115% في مربع Scale ثم OK. حدد الشكل المتبقي ثم افتح مربع حوار Scale من جديد. فعّل Non-Uniform وأدخل 86% في مربع Horizontal و89% في مربع Vertical ثم OK. بعدها انقر نقرًا مزدوجا في أي مكانٍ بعيدًا عن المسار المركّب. ركز في الصورة الرابعة أدناه، استبدل لون التعبئة للمسار الناتج بتدرجٍ خطيٍّ. مع إبقائك للمسار الجديد محددًا افتح بند Feather. في مربع حوار Feather أدخل 2px Radius ثم اضغط OK. وغير نظام الدمج للمسار إلى Lighten. 24- حدّد الشكل البيضاوي الأحمر المتبقي وأزل لون حدوده ثم املأه بلونٍ أسود 000000#. بعدها ضع الشكل البيضاوي الناتج في الخلفية Ctrl +Shift +Left Square Bracket. أكمل بتحديد البيضاوي الأزرق وأزل لون حدوده واملأ الشكل بتدرجٍ إشعاعيٍّ كما هو موضحٌ في الصورة الثانية أدناه. الآن حدد جميع الأشكال الناتجة من خطوة 18 وضعهم معًا في مجموعةٍ واحدة. واضبط مكانها وفق ما تراه في الصورة المرفقة. 25- باستخدام أداة (Pen Tool (P ارسم الشكلين الموضحين في الصورة الأولى، ثم أعد تحديد الشكل الأحمر وانسخه، واستبدل لون حدود الشكل باللون الأخضر. ركز على الصورة الثانية وحدد نقطتي التحكم المشار إليهما في الصورة باللون الأحمر ثم اضغط على أيقونة Cut path at selected anchor points من شريط Properties. هذا سيجعل للشكل الأخضر مسارين منحنيين. حدد وأزل المسار الأطول. بعدها حدد المسار الأخضر المتبقي ثم اختر Join من القائمة المنسدلة التي تظهر عند النقر على مسطح العمل بالزر الأيمن للفأرة. أعد الخطوة مجددًا واختر Join. الآن أعد تحديد الشكلين الناتجين من هذه الخطوة وأزل لون الحدود ثم املأهما بتدرجٍ خطيٍّ كما يظهر في الصورة الخامسة والسادسة. أخيرًا ارسم شكلين باللون الأزرق الداكن المائل للرمادي 393d41‏# كما يظهر في آخر صورتين، ثم أرسلهما إلى الخلفية Ctrl +Shift +Left Square Bracket. رسم عجلة الهبوط 26- باستخدام أداة (Pen Tool (P ارسم الشكلين الموضحين في الصورة الثانية. أعد تحديد الشكل الأزرق وأزل لون حدوده ثم املأه بتدرجٍ خطيٍّ كما يظهر في الصورة الثالثة. انسخ الشكل واستبدل لون تعبئته بالتدرج الخطي. أضف تأثير Feather بقيمة 3px للشكل الجديد وغير نظام الدمج إلى Hard Light. الآن أعد تحديد الشكل الأحمر وأزل لون حدوده واملأه بالتدرج الخطي الموضح أدناه. انسخ الشكل الناتج واستبدل تعبئته بتدرجٍ لونيٍّ مجددًا، أخيرًا غيّر نظام الدمج إلى Hard Light. 27- باستخدام أداتي (Rectangle Tool (M و(Gradient Tool (G ارسم مستطيلًأ كما هو موضحٌ في الصورتين الأولى والثانية. التقط أداة Rounded Rectangle Tool من شريط الأدوات وانقر على مسطح العمل. في مربع الحوار Rounded Rectangle أدخل البيانات الموضحة في الصورة الثالثة أدناه واضغط OK. بعدها اضبط مكان المستطيل كما يظهر في الصورة الثالثة أدناه. انسخ الشكل بالضغط على Ctrl+F ،Ctrl+C واسحب النسخة إلى موضعها الصحيح الذي توضحه الصورة الرابعة ولا تنسَ الضغط على مفتاح Shift لسحب الشكل باستقامة. أعد تحديد الشكلين وأزل لون الحدود ثم املأهما بتدرجٍ خطيٍّ كما يظهر في الصورة الأخيرة. 28- حدد الأشكال الناتجة من خطوة 14 وحتى هذه المرحلة وضعهم معًا في مجموعةٍ واحدةٍ وذلك بالضغط على Ctrl+G، ثم أرسل إلى الخلفية Ctrl +Shift +Left Square Bracket. أبق على تحديد المجموعة واذهب إلى Reflect < Transform < Object، اختر Vertical ثم Copy. بعدها اسحب النسخة إلى اليسار واضبط موضعها كما يظهر في الصورة الثانية مع الضغط على مفتاح Shift لضمان الاستقامة أثناء السحب. رسم الترس الأمامي 29- باستخدام أداة (Rectangle Tool (M أرسم مستطيلين أحدهما بالأبعاد 4px26.5 والآخر بأبعاد 38.5px، ثم اضبط موضعهما كما هو موضحٌ في الصورة الثانية أدناه. أعد تحديد الشكلين وأزل لون الحدود ثم املأهما بتدرجٍ خطيٍّ كما في الصورة الثالثة. انسخ المستطيلين بالضغط على Ctrl+F ،Ctrl+C واستبدل لون التعبئة بتدرجٍ خطيّ. أضف تأثير Feather 3px للأشكال الناتجة وغيّر نظام الدمج إلى Hard Light. ثم باستخدام الأدوات (Rectangle Tool (M و(Gradient Tool (G ارسم مستطيلًا كما يظهر في آخر صورتين. 30- باستخدام أداة (Pen Tool (P ارسم الشكل الموضح في الصورة باللون الأزرق الغامق المائل للرمادي 40474d#، بعدها أخفِ الشكل الجديد خلف الأشكال الناتجة من الخطوة 29. التقط أداة Rounded Rectangle Tool من صندوق الأدوات وانقر على مسطح العمل، ومن مربع الحوار Rounded Rectangle أدخل البيانات الموضحة في الصورة الثانية واضغط OK. ثم اضبط مكان الشكل الجديد كما توضحه الصورة الثانية. انسخ الشكل واسحب النسخة إلى اليسار واضبط موضعها كما هو موضح في الصورة الثالثة مع الضغط على مفتاح Shift لضبط الاستقامة. أخيرًا أعد تحديد الشكلين وأزل لون الحدود ثم املأهما بتدرجٍ خطيٍّ كما توضحه الصورة الأخيرة. 31- حدد جميع الأشكال المتكونة من خطوة 29 وحتى الآن وضعهم في الخلفية بالضغط على **Ctrl +Shift +Left **Square Bracket. بعدها حدد العناصر الناتجة من بداية الخطوة 2 وحتى هذه المرحلة وضعهم في مجموعةٍ واحدةٍ بالضغط على Ctrl+G. ستظهر الطائرة كالتالي: رسم الخلفية 32- باستخدام أداة (Rectangle Tool (M ارسم مستطيلًا أسود اللون بأبعاد 854*px640 واصنع نسخةً منه بالضغط على Ctrl+F ،Ctrl+C، ثم استبدل لون الحدود للنسخة باللون الأحمر. أبقِ على تحديد المستطيل الأحمر وافتح نافذة Transform وذلك بالذهاب إلى Transform < Window. اضبط نقطة المرجعية على النقطة المتوسطة السفلية، ثم غيّر الارتفاع إلى 210px. أعد تحديد المستطيل الأسود وأزل لون حدوده ثم املأه بتدرجٍ إشعاعيٍّ كما يظهر في الصورة الأخيرة. 33- للبدء بمدرج الطيران انسخ المستطيل الأحمر واستبدل لون الحدود باللون الأزرق، أبقِ على تحديد المستطيل الأزرق الناتج وافتح نافذة Transform بالذهاب إلى Transform < Window. اضبط النقطة المرجعية على النقطة الوسطى العلوية، بعدها غيّر العرض إلى 952px والارتفاع إلى 246px. أبقِ المستطيل الأزرق محددًا وأزل لون التحديد ثم املأه بتدرجٍ إشعاعيٍّ كما يظهر في الصورة الثانية. استمر في تحديد المستطيل الناتج واذهب إلى **Film **Grain < Artistic < Effect. اتبع التعليمات التي تظهر في الصورة الثالثة ثم OK. بعدها أضف تأثير Feather 20px للمستطيل الناتج. 34- باستخدام أداة (Rectangle Tool (M ارسم مستطيلًا باللون الأصفر بأبعاد 44*px210، أبقِ على تحديد الشكل وبالضغط على مفتاح Shift انقر على المستطيل بتأثير Film Grain من خطوة 33. افتح نافذة المحاذاة Align بالذهاب إلى Align < Window، ثم اضغط على (Horizontal Selection Tool (A، حدد نقطة التحكم العلوية اليمنى للمستطيل الأصفر وحركها 19px لليسار. بعدها حدد نقطة التحكم العلوية اليسرى وحركها لليمين 19px. أعد تحديد الشكل الأصفر وأزل لون حدوده قم املأه بتدرجٍ خطيٍّ كما يظهر في الصورة الثالثة. أكمل باستخدام الأدوات (Pen Tool (P و(Gradient Tool (G وارسم الشكل الموضح في الصورة الرابعة والخامسة. انسخ الشكل الجديد الناتج ثم اعكس النسخة بشكلٍ رأسيٍّ وضعها في الجانب الأخر من خلفية العمل. أخيرًا أعد تحديد الأشكال الثلاثة الناتجة من هذه الخطوة وغير نظام الدمج إلى Overlay. 35- حدد جميع الأشكال الناتجة من الخطوة 33 وحتى هذه المرحلة وضعهم في مجموعةٍ واحدةٍ، ثم حدد المستطيل الأحمر الناتج من خطوة 32 وبالضغط على مفتاح Shift وانقر على المجموعة الناتجة من هذه الخطوة. انقر بزر الفأرة الأيمن على مسطح العمل واختر Make Clipping Mask من القائمة المنسدلة. في هذه المرحلة من المفترض أن تظهر خلفية العمل كما هو موضحٌ في الصورة الثانية، بعدها اضبط مكان الطائرة على الخلفية التي قمت برسمها. إضافة الظلال 36- لإضافة مظهرٍ أكثر واقعيةٍ ستحتاج إضافة بعض الظلال، لذلك التقط أداة (Rectangle Tool (M وارسم مستطيلين بأبعاد 9.5px1 والآخر 5px8. بعدها اضبط مكان الشكلين كما يظهر في الصورة الثانية. انسخ المستطيل الأحمر واسحب النسخة جهة اليمين واضبط مكانها كما يظهر في الصورة الثالثة ولا تنسَ الضغط على مفتاح Shift لضمان الاستقامة أثناء سحب الشكل. أعد تحديد المستطيل الأصفر وأزل لون حدوده واملأه باللون الأحمر الداكن 231f20‏#. بعدها حدد الشكلين باللون الأحمر وأزل لون الحدود ثم املأ الشكلين بالتدرج الموضح في الصورة اللاحقة. أخيرًا أضف تأثير Gaussian Blur 1px للأشكالِ الناتجة وضعهم خلف العجلة الأمامية في الرسم. 37- استكمالًأ بعمل الظلال للعجلات واعتمادًا على أداة (Rectangle Tool (M ارسم ثلاثة أشكالٍ مستطيلةٍ كما يظهر في الصور المرفقة. فور انتهائك من رسمهم حددهم وضعهم في مجموعةٍ واحدة، بعدها أضف تأثير Gaussian Blur 1px على المجموعة الجديدة وضعها خلف العجلة اليسرى. انسخ المجموعة الناتجة بالضغط على Ctrl+F ،Ctrl+C واسحب النسخة جهة اليمين كما يظهر في الصورة الأخيرة أدناه ولا تنسَ الضغط على مفتاح Shift أثناء السحب. 38- وإلى هنا ستكون النتيجة كما يلي: 39- باستخدام أداتي (Ellipse Tool (L و(Gradient Tool (G ارسم شكلًا بيضاويًا بأبعاد 14*px610 كما يظهر في الصورة الأولى والثانية، أكمل بأداة رسم الأشكال البيضاوية وارسم ثلاثة أشكالٍ أخرى كما يظهر في الصور اللاحقة. أضف تأثير Gaussian Blur 4px على الأشكال البيضاوية الناتجة من هذه الخطوة. أخيرًا غيّر نظام الدمج إلى Multiply وقلّل الشّفافية حتى 50%. تمّت المهمة! لقد تمت المهمة بنجاح! وهذا ما حصلنا عليه: ترجمة -وبتصرف- للمقال Learn how to create an Airplane in Adobe Illustrator لصاحبه Bao Nguyen
    1 نقطة
  5. مرحباً بك @أحمد رجب رفعت. المصطلحان يعنيان نفس الشيء بصورة واسعة، ولكن المحادثة في الوقت الحقيقي تعني أن المحادثة تتم لحظياً بين المرسل والمستقبل أي أن الرسائل أو لقطات الفيديو التي يتم إرسالها تصل للمستقبل فورياً أثناء الكتابة أو التحدث بدون انتظار (يتم استخدامها غالبا في صناعة الترجمات اللحظية). أما الدردشة المباشرة فالمتلقي لا يتحصل على الرسالة إلا بعد إتمام كتابتها من قبل المرسل ومرورها عبر السيرفر إلى المتلقي. تحياتي لك.
    1 نقطة
  6. اهلا بك @Mohamed Showket هل القالب مصمم لووردبريس ؟ ام انه فقط html and css ؟ تحياتي
    1 نقطة
  7. مقالك حفزني جدا لدراسة البرمجة. بدأت بلغة بايثون و حققت في مدة عشرة أيام نتيجة طيبة لم أكن أتوقعها من قبل غير أن تعلم البرمجة تستهلك وقتا كبيرا قد تصل لسبع أو ثماني أو تسع ساعات ساعات أحيانا مع احتساب الاستراحات القصيرة طبعا والوجبات و الصلوات في وقت التعلم. فالبرمجة يلزمها التفرغ الكامل لاحترافها. ما يلزم المبتدئ هو التفكير المنطقي و التأمل في كل كود تتم كتابته أثناء التعلم و إعادة كتابته مرارا و التلاعب به و إدخال بعض الأكواد الصغيرة لترسيخها كي لا تنسى. كما يجب تكرار ما تعلمته يوم أمس و مراجعته و كتابة أكواد مشابهة له ثم البدأ في الدرس الجديد كما لا ينبغي الاستهانة بأي خطوة فيجب فهمها حتى لا تسبب مشاكل في المستقبل , فالغرض الإتقان و ليس الاطلاع فقط. فنصيحتي لك أيها مقبل على تعلم البرمجة أن تبدأ يومك بقراءة وردك من القرءان الكريم و صلاة ركعتين و دعاء الله الفهم و الصبر و العزيمة فإذا استعصى عليك أمر في التعلم حاول أن تحلها (هو أمر يسبب النرفزة )فإن لم تنجح في ذلك إياك أن تفشل و تترك الأمر . إذهب فتوضأ و ادع الله و تنفس هواء نقيا ثم ارجع فسيفتح عليك فيه فأنا أتكلم عن تجربة يا إخواني
    1 نقطة
  8. هل ستشعر بالإحباط إذا اكتشفت أن الكثير من العملاء المحتملين يغادرون موقعك الإلكتروني وأن معدّلات التَحويل إليه قليلةٌ لأنهم مرّوا بتجربة زيارة سيئة؟ هذا هو الواقع للأسف: لا تقدّم العديد من واجهات المتاجر الإلكترونية تجارب الخروج الأفضل، مما يقوّض بالتّأكيد جهودها المبذولة في زيادة المبيعات. يرجع سبب ذلك في كثير من الأحيان إلى عدم فهم ما يحتاج العميل إلى رؤيته قبل أن يشعر بالرّاحة في اتخاذ قرار الشّراء. وفيما يلي عدة أمور يمكنك القيام بها لتجنّب الأخطاء الشائعة في التّخلي عن سلّة المشتريات. يعرض هذا المقال 12 قاعدة يمكنك اتباعها لخلق تجربة تسوّق من شأنها أن تزيد معدّلات التّحويل إلى موقعك الإلكتروني. القاعدة 1: تجنب النماذج الطويلة لنبدأ بهذا المثال البسيط. قامت وكالة Expedia بتغيير صغير في نموذج الخروج زاد من أرباحها بقيمة 12 مليون دولار. ما هو هذا التغيير؟ لِنلقِ نظرة: لقد حذفَتْ حقلًا واحدًا غير مهمٍ من النّموذج، وبإمكانك أنت أن تستفيد من ذلك أيضًا. على غرار ما فعلته Expedia، اجعل تجربة الخروج سهلةً قدر الإمكان بالنسبة لعملائك. كلما كان النّموذج طويلًا، قلّت رغبة النّاس في ملئه، وهذا بدوره سيقلّل من معدّلات التَحويل. لذا، اطلب المعلومات الضّرورية فقط (بما في ذلك معلومات الفوترة والشّحن). فكّر في الأمر من وجهة نظر العميل. يمثل كل حقل إضافي عقبةً تحولُ دون قيامه بشراء منتجك وفرصةً ضائعةً أخرى تحولُ دون تحسين معدل التَحويل. ركّز على احتمال خسارة صفقة البيع نتيجة المعوقات عوضًا عن التّركيز على ملء قائمتك بالعملاء المحتملين. فإذا كان الحقل غير مهم لعملك، لِمَ تُطالب العميل بإدخاله؟ القاعدة 2: ابدأ نماذج الخروج بحقل "البريد الإلكتروني" إن تكرارَ العمل (أي عودة العميل إلى موقعك الإلكتروني للقيام بعملية شراء) ضروريٌ جدًا لتجّار التجزئة، وليس فقط للعاملين في التّجارة الإلكترونية. من الضّروري الوصول إلى هؤلاء العملاء لحملهم على الشّراء مجددًا، ولهذا السّبب فإن البريد الإلكتروني الخاص بالعميل هو المعلومة الأهم التي يمكنك الحصول عليها عند الخروج. لا يزال بإمكانك استخدام برامج التّخلي عن سلّة المشتريات للتعويض عن عملية البيع التي ستخسرها في حال لم يكمل الزّائر عملية الشّراء (سنتحدث عن ذلك أكثر في النّقطة التّالية.) يبدأ متجر The Fixed Gear Shop الإلكتروني نموذج الخروج بحقل البريد الإلكتروني، ويبين للعملاء أن بإمكانهم إنشاء حساب خاص بهم بعد الخروج إذا ما رغبوا بذلك. ملاحظة من المحرر: من الحكمة دومًا أن تجعل نماذجك متوافقة مع اللائحة العامة لحماية البيانات الصّادرة عن الاتحاد الأوروبي حتى في حال تواجدَ عملاءك خارج مناطق تطبيق هذه اللائحة، فهذا من شأنه – على غرار المزايا الأمنية الأخرى – أن يُشعر الزّوار بمزيد من الأمان ويعفيك من تحمّل المسؤولية. القاعدة 3: استخدم برامج التخلي عن سلة المشتريات ستظلّ تعاني من انسحاب العملاء خلال مرحلة الشّراء حتى عند وضع البريد الإلكتروني في بداية نموذج الخروج، ومع ذلك يمكنك استخدام برامج التّخلي عن سلّة المشتريات للتّفاعل مع هؤلاء العملاء ورعايتهم، على أمل استعادتهم مجددًا. يتوافر الكثير من برامج التّخلي عن سلّة المشتريات. يمكنك مثلًا استخدام برنامج Rejoiner لإنشاء رسائل بريد إلكتروني مخصّصة وإرسالها بعد مضي عددٍ محددٍ من الأيام التي تلي تاريخ التّخلي عن سلّة المشتريات. يُعيد برنامج Rejoiner استهداف المتسوقين تلقائيًا بالمنتجات التي قاموا باستعراضها والعناصر المرتبطة بها، كما يتابعهم في الزمن الحقيقي عبر إرسال رسائل تتعلق بالمنتج الذي يرغبون بشرائه. يساعد البرنامج أيضًا في الحفاظ على سلال العملاء، بحيث يمكنهم الخروج من أي جهاز دون أن يُضّطروا إلى إعادة إدخال بياناتهم أو تكرار الخطوات ثانيةً. يتمثّل هدف هذا النوع من البرامج في حمل النّاس على الشّراء قبل أن يغيّروا رأيهم نهائيًا. من الواضح أن هؤلاء الأشخاص كانوا يبحثون عن منتجك في السّوق وأنهم كانوا على وشك الحصول عليه، لكنّهم تراجعوا عن شرائه، ربما بسبب السّعر أو تكاليف الشّحن. يمكنك استخدام برامج التّخلي عن سلّة المشتريات للوصول إلى هؤلاء الأشخاص عبر تقديم خصومات وعروض أخرى تحملهم على إتمام طلب الشّراء. تستطلع منصّات الدّراسات الاستقصائية مثل Qualaroo آراء الزّوار وتكتشف الأمور التي لا تعجبهم في موقعك أو السّبب الذي يجعلهم عالقين في صفحة منتجٍ معين. يمكنك أيضَا الاستفادة من هذه الأفكار في تحسين تدفق الخروج في موقعك. القاعدة 4: اعرض درجة الأمان في موقعك الأمن السّيبراني مهمٌ للغاية في التّجارة الإلكترونية. يُعرّض البائعون عبر الإنترنت أنفسهم وكذلك عملاءهم إلى مخاطر الاحتيال عند الدّفع في حال عدم استخدامهم البروتوكولات المناسبة. قد تسوء الأمور سريعًا! تمنح شارات وأختام درجة الثّقة وشعارات مقدّمي خدمات السّداد وأيقونة "القفل" الصّغير في شريط العنوان الخاص بالمتصفح العملاء شعورَ الأمان الذي يحتاجونه كي يقوموا بالشّراء. ويبقى الأمر الأكثر أهمية هو وجوب إضافة شهادة الأمان SSL إلى متجرك ( صفحات https://‎). لم يعد هذا الأمر اختياريًا في عالم التّجارة الإلكترونية اليوم. وأخيرًا، احرص على طلب رقم التّحقق من بطاقة الائتمان لمزيد من الأمان. ستثبّط هذه الخطوة الإضافية عمليات الاحتيال دون أن تحبط للعملاء. القاعدة 5: قدم وعودا بالشحن المجاني لنقل أن تكلفة منتجك هي 100 دولار وأن تكلفة الشّحن هي 5 دولارات. من الواضح أن قيمة المنتج أكبر بكثير من تكلفة الشّحن، لكنّ بعض الأشخاص – ولسبب ما – يرفضون دفع تلك الدولارات الخمسة، وأنا - تقول الكاتبة - من بين هؤلاء. يفضل النّاس دفع 10 دولارات إضافية للحصول على شحن مجاني عوضًا عن دفع أجرة الشّحن البالغة 5 دولارات، لماذا؟ عندما تفكر في الأمر من وجهة نظر العميل فإنه يبدو منطقيّا (كالعديد من القواعد التي نتحدث عنها). لِمَ ندفع تكلفة الشّحن في حين يمكننا إنفاق الدولارات العشرة للحصول على غرض نحتاجه ونستلم الغرضين مجانًا؟ الشّحن المجاني جذابٌ للغاية. أصدرت شركة comScore عام 2014 دراسةً مفادها أنّ 83% من المتسوقين عبر الإنترنت في الولايات المتحدة مستعدّون للانتظار يومين إضافيين للحصول على مشترياتهم إذا كان الشّحن مجانيًا، وأنّ 58% منهم أضافوا منتجات أخرى تعادل قيمتها قيمة الشّحن إلى سلال المشتريات الخاصة بهم. أضف إلى ذلك أن السّبب الأول في التّخلي عن سلّة المشتريات هو التّكاليف غير المتوقعة. يضع الشّحن المجاني حدًّا لهذه المفاجآت غير السّارة. تشير هذه البيانات إلى أن النّاس مستعدون لشراء المزيد كي يحصلوا على شحن مجاني، وهذا بدوره يؤدي إلى زيادة في عائدات المبيعات. القاعدة 6: أدرج شريط تقدم لعملية الخروج انظر إلى شريط التقدّم الجميل هذا في متجر Haggar Clothing. إنه مرتب وسهل الفهم. إنّ اطلاع عملائك على موقعهم في تدفق الخروج هو وسيلةٌ أساسيةٌ للمحافظة على زيادة معدّلات التّحويل إلى مواقع التّجارة الإلكترونية. يريد عملاؤك أن يعرفوا المدة التي تستغرقها عملية الخروج والأمور المطلوبة منهم. إذا كانت عملية الخروج في موقعك متّعددة المراحل، احرص على جعلها بسيطة وقدّم لهم التّوجيه خلالها. عندما لا يتمكن العملاء من معرفة مدى اقترابهم من إتمام عملية الشّراء، فقد يشعرون بالإحباط ويتخلون عن سلّة المشتريات في منتصف عملية الخروج. القاعدة 7: بسط نموذج الخروج كما ذكرنا سابقًا، فإن الابتعاد عن النماذج الطويلة هو المبدأ الأول في تحسين معدّلات التّحويل إلى مواقع التّجارة الإلكترونية، كما أنك ستفهم كيفية استخدام الزّوار لنموذج الخروج عبر فحص تسجيلات الجلسة التي تحصل عليها من Hotjar أو CrazyEgg أو غيرها من أدوات البحث النوعي. إذا لم يتمكن العملاء من متابعة النقر أو الإجابة عن الأسئلة التي تطرحها في نموذج الخروج، فربما عليك التفكير في تغييرها. فكّر في حذف الأسئلة غير الضّرورية أو إضافة مزيد من التّوجيه حول ما تريد أن يقوم به العملاء. تفضّل الكاتبة أخذ هذه الأفكار الخلّاقة من Mockupplus.com في الحسبان عند العمل على تحسين النّموذج: لا تُرغم عملاءك على إنشاء حسابات خاصة بهم، وهنا تأتي فائدة نموذج الضّيف (سنتحدّث عنه بمزيد من التّفصيل بعد قليل.) لا تضع أسماء الحقول مكان العناصر النّائبة. عندما يقوم العميل المحتمل بإدخال معلوماته، سيختفي اسم الحقل وقد ينسى العميل ما تريده أن يقوم به. صمّم نماذج تتكون من عمود واحد. قد يُسبّب تعدّد الأعمدة الإرباك. احرص على تبسيط العملية حتى يتمكن عملاؤك المحتملون من التّنقل عبر صفحتك بسلاسة. جمّع المعلومات ذات الصلة في كتل. يرتبط ذلك بعَرض تدفق النّموذج. يمكنك جعل النّموذج أكثر سلاسة عبر تقسيم المعلومات إلى مجموعات (كالعنوان والشّحن والدّفع). فعّل ميزة الإدخال التّلقائي باستخدام خاصية تحديد الموقع الجغرافي من Google لمساعدة العملاء المحتملين في إضافة عناوينهم. **قدّم خيارات دفع مختلفة وصمم نموذجًا مثاليًّا لبطاقة الائتمان. المحافظ الرقمية هي معالجات الدّفع مثل PayPal Express و Amazon Pay و Apple Pay وغيرها. يقدّم متجر Walmart أكبر عدد ممكن من طرق الدّفع، حتى أنه يمكنك الشّراء عبر الإنترنت والدّفع نقدًا. حاول دومًا أن تُظهر محتويات سلّة المشتريات كي يعرف العملاء المنتجات التي يشترونها. سيُسهم نموذج الخروج إما في تحسين معدل تحويل التّجارة الإلكترونية أو سيُشكل عائقًا أمامه، لذا احرص على جعل تجربة الخروج تجربةً سلسلةً تتطلب أدنى جهدٍ ممكن من قِبَل الزّائر. القاعدة 8: اسمح لعملائك بالخروج كضيوف إذا كنت تزور موقعًا ما للمرة الأولى فقد لا ترغب في إنشاء حساب طويل الأمد، وإنما تريد أن تعرف إذا كانت عملية الشّراء الأولى هذه تستحق وقتك. عندما يشتري العميل منتجًا ما، يحصل البائع على اسم هذا العميل وعلى بريده الإلكتروني من نموذج الخروج. ارغام الزّوار على التّسجيل يمنحهم سببًا آخر للمغادرة – لا سيما إذا كانت هذه الزّيارة هي زيارتهم الأولى لمتجرك الإلكتروني. لا تصرف انتباه عملائك عن إتمام عملية الشّراء بحملهم على إنشاء حساب خاص بهم. إذا نال منتجك إعجابهم (وإذا كنت تقدّم لهم العروض عبر حملات إعادة الاستهداف والبريد الإلكتروني)، فسيرغبون في إنشاء حساب في نهاية المطاف، والأهم من ذلك كلّه أنهم سيشعرون بالارتياح عند قيامهم بالشراء من متجرك مجددًا. القاعدة 9: قدم خيارات تسجيل الدخول بواسطة وسائل التواصل الاجتماعي إنني - تقول الكاتبة - أتسوق في عدد من المتاجر الإلكترونية، وقد قمت بإنشاء حساب في المواقع التي أزورها مرارًا، أما المواقع التي لا أزورها كثيرًا فإنني أفضّل عدم إنشاء حساب فيها. إن لم نكن مهتمين بالموقع فعلًا، فإن التّفكير في إنشاء حساب آخر (وتذكّر كلمة مرور أخرى) يبدو مضيعةً للوقت. يُتيح التّسجيل بواسطة وسائل التّواصل الاجتماعي للعملاء استخدام المعلومات ذاتها بسرعةٍ في الحسابات جديدة التي يُنشئونها في جميع المواقع التي يزورونها. وهذه الطريقة هي بديل سريع لإنشاء حساب جديد لأنها لا تتطلّب إدخال اسم مستخدم وكلمة مرور جديدتين. على الرّغم من مخاوف الكثير من النّاس المتعلقة باستخدام الشّركات لبياناتهم، فقد وجدت دراسة استقصائية أجرتها شركة Gigya أن 88% من العملاء الأميركيين يقول بأنهم قاموا بتسجيل الدّخول بواسطة وسائل التّواصل الاجتماعي، وهذا ما يدفعنا إلى الاعتقاد بأن النّاس سيفضّلون الراحة على الخصوصية في أغلب الأحيان. يمكن للعملاء الذين يستخدمون إضافة تسجيل الدّخول بواسطة وسائل التّواصل الاجتماعي من WooCommerce ربط حساباتهم على موقعك مع ملفاتهم الشّخصية على وسائل التّواصل الاجتماعي للمرور بتجربة خروج أسهل. بالإضافة إلى ذلك، قد يجعل حجم الشّبكات الاجتماعية مثل Facebook و Twitter العملاء يشعرون بمزيد من الرّاحة بشأن أمان معلوماتهم الشّخصية عند استخدامك لمثل هذه المنصات. القاعدة 10: قدم لهم سياسة إرجاع مميزة ما هو عدد الأشخاص المتحفظين حيال شراء منتج "لا يمكن إرجاعه"؟ تجعلك فكرة عدم القدرة على إرجاع ذلك المنتج تفكر مليًّا فيما إذا كان هذا المنتج هو المناسب لك أم لا، أليس كذلك؟ إن تقديم سياسة إرجاع جيدة هي نقطةٌ في غاية الأهمية بالنسبة لعملية البيع. بيّنت الدراسات أن 60% من المتسوقين عبر الإنترنت يقومون بعملية إرجاع أو استبدال واحدة في السنة، وأن 95% سيشترون مجددًا إذا كانت تجربة الإرجاع إيجابية. تُشكّل عمليات الإرجاع جزءًا كبيرًا من التّجارة الإلكترونية، لكنّك تستطيع تحقيق النمو إذا قدّمت سياسة إرجاع مميزة وقمت بإدارتها على نحو جيد، فإن تقديم سياسة إرجاع مدتها 30 يومًا من شأنه أن يزيد التّحويلات بمعدل 17% لأنه لا يطالب المشترين بالتزام معين عقب عملية البيع. من المنطقي أنه كلما منحت عملاءك مزيدًا من المرونة فإنهم سيرغبون بمنتجاتك أكثر. القاعدة 11: قدم الدعم عن طريق الهاتف والدردشة الفورية إذا واجه أحدهم مشكلة أثناء عملية الخروج، عليك أن تبادر إلى حلّها على الفور لتفوز بعملية البيع. إن الطّلب من أحدهم الانتظار مدة 48 ساعة للحصول عل ردّ عبر البريد الإلكتروني في الوقت الذي تقدّم فيه الشّركات الأخرى الدعم الآني سيؤدي إلى زيادة في مبيعات المنافسين وليس مبيعاتك بالتأّكيد . احرص على جعل فريق خدمة العملاء لديك جاهزًا قدر الإمكان للإجابة عن الأسئلة التي يطرحها العملاء حول منتجاتك. القاعدة 12: أدرج نوافذ منبثقة عن نية الخروج لنقل أن أحدهم أنهى تصفّح موقعك وكان على وشك مغادرته دون شراء أي شيء. يبدو أنك أخفقت هنا، ولكن مهلًا! تمنحك نوافذ نيّة الخروج فرصة أخيرة لإقناع الزّوار باتخاذ إجراء – سواء كان عملية بيع أو تسجيل بريدهم الإلكتروني. تتيح لك نوافذ نيّة الخروج جذب العملاء الذين لم يقوموا بالشّراء عن طريق القسائم أو العروض المحدودة المدّة أو الاشتراك بالنّشرات الإخبارية. (قد يكون الزّائر معجبًا بعلامتك التّجارية لكنه لا يرغب بشراء منتجاتك في هذه اللحظة بالذات.) يمكنك جذبهم عن طريق الكثير من البرامج المختلفة، لكنّني - تقول الكاتبة - معجبةٌ بالنّوافذ المنبثقة لدى Unbounce. يمكن إنشاء هذه النّوافذ بسهولة عن طريق باني المواقع بطريقة السّحب والإفلات، كما يمكنك تطبيقها مباشرة على صفحات الهبوط التي تم بناؤها بواسطة Unbounce وعلى صفحات موقعك أيضًا. من الصّعب تجاهل هذه النّافذة المنبثقة من متجر Livingshop والتي تقدّم خصمًا بنسبة 50%. ربما لم تكن ترغب بالشّراء سابقًا، لكن إذا عرفت بأنّك ستدفع ثمن نصف ما ستشتريه فقط فقد تُفكّر مليًا في الأمر. عوضًا عن استخدام النّوافذ المنبثقة في محاولة لإتمام عملية البيع، يمكنك استخدامها لتقديم المعلومات إلى عملائك. سيؤدي ذلك إلى ارتفاع معدل التحويل إلى موقعك الإلكتروني وإلى تضخّم البيعات على المدى الطويل، لأنك بهذه الطريقة تضيف القيمة لموقعك بدل أن تمارس الضّغط على الزّوار. تستخدم Zulily هذه النّافذة المنبثقة لتقديم معلوماتٍ مهمةٍ عن آلية عمل التطبيق الخاص بها. يسمح هذا التّطبيق لمستخدميه أن يستعرضوا العلامات التّجارية في الوقت الذي يريدون. الخطوات التالية لتحسين معدلات التحويل إلى مواقع التجارة الإلكترونية تركّز معظم النّصائح السّابقة على تحسين نموذج الخروج الحالي لديك، ولكن لا تنسَ تثبيت برامج التّخلي عن سلّة المشتريات وبرامج مراجعات المستهلك حتى تتمكن من تحديد النّقاط التي تُربك العملاء أو تسبّب لهم الإحباط. سينقذك ذلك من خسارة المزيد من العملاء. إنّ الخروج من متجرك الإلكتروني هو الجزء الأهم من العمل. لا وجود للإيرادات دون وجود المبيعات – لذا يعود الأمر لك في جعل عملية الخروج سلسة قدر الإمكان. قد يتطلّب تحسين هذا التّدفق الوقت، إلا أن هنالك دومًا تكتيكات جديدة يمكنك اختبار وتنفيذها. (يجب أن يكون الاختبار إلزاميًا عندما يتعلق الأمر بأفضل الممارسات، حتى تلك التي تحدّثنا عنها في هذا المقال). حاول أن تواكب تكتيكات الخروج الأكثر فعالية، وستُلاحظ ازدياد مبيعات متجرك. ترجمة -وبتصرف- للمقال ‎12 Simple Rules to Boost Your Ecommerce Conversion Rates لصاحبته Olivia Ross-Taylorً
    1 نقطة
  9. مساء الخير * سعر الليد في مجال العقارات بيختلف علي حسب الدولة اللي بتروج ليها وبيختلف على حسب نوع العقار ومستواه مثال: سعر الليد في مصر ممكن يكون من 2$ وحتي 10$ سعر الليد في الامارات ممكن يكون من 5$ وحتي 100$ الـ range في السعر لنفس البلد بيعتمد على نوع الوحده وسعرها لان ده بيأثر على الجمهور المستهدف بمعني انك لو بتروج لوحده ايجار فسعر الليد مختلف عن شقة استديو مختلف عن شقة دوبلكس مختلف عن فيلا مختلف عن شقة في برج خليفة. بالاضافة الى ان الاهم من سعر الليد هو انه يكون Qualified lead مثال: لو فرضنا انك كتبت في الاعلان ان الشقة للبيع بدون مقدم وبالتقسيط على 5 سنوات ،،، فمن المتوقع الليدز هتكون متوسطي الدخل لان الاعلان مغري ولكن في الواقع ممكن تكون الوحده المباعه بدون مقدم ولكن اول دفعه هتكون بعد شهرين وعبارة عن تلت تمن الوحده مثلا ، فهنا الليدز هتكون عدد كبير ولكن غير مؤهلين للشراء عليك الاهتمام بتكلفة الليد ولكن الاهم هو انه يكون قادر علي الشراء وتوجد طريقة لتقليل سعر الليد وهي الريماركتنج كمبين بمعني استهداف نفس اليوزر اللذين قاموا بزيارة الموقع قبل ذلك وتقديم عرض اخر او ارسال رسالة بطريقة مختلفة لشتجيعهم على التسجيل كما يمكنك تجربة اعلانات جوجل فهي أرخص وتضمن لك ليد هاي كواليتي اتمني اكون اعطيتك اجابة وافية ومفيدة
    1 نقطة
  10. نعم يمكن ذلك عن طريق تعديل الشريحة المستهدفة و توسيع دائرة الاستهداف
    1 نقطة
  11. 1 نقطة
  12. كثُر الحديث في السنوات الأخيرة عن إطار العمل Laravel وانتشر بين مطوّري PHP حتى إنه أصبح إطار العمل الأكثر استخداما بينهم، سواء للمشاريع الشخصية أو المهنية، حسب استبيان أجراه موقع SitePoint الشهير. كما أنه من أكثر المشاريع التي يُساهَم فيها على GitHub. سنتعرّف في سلسلة الدّروس هذه، التي يمثّل هذا المقال مقدّمة لها، على إطار العمل Laravel وأهم المبادئ التي يعمل وفقا لها. لماذا Laravel؟توجد الكثير من الأسباب التي تدعو لاختيار Laravel منها ماهو نفعيّ (انتشار أكبر يعني فرصًا أكثر للحصول على فرص توظيف) ومنها ماهو تقني بحت. قبل الإجابة على السؤال "لماذا Laravel؟" قد يكون من المفيد محاولة الإجابة عن "لماذا إطار عمل؟" بمعنى آخر ألا يمكنك كمطوّر PHP البدء من الصفر وبناء تطبيقك حسب الحاجة؟ يمكننا القول -باختصار- أن أطر العمل تجعلك تتخلص من ضرورة الاعتناء بتفاصيل كثيرة، ترفع كثيرا من إنتاجيتك وتقيك من أخطاء التعامل المباشر مع بيئة لغة البرمجة من قبيل أخطاء التعامل مع استعلامات قواعد البيانات التي قد تنتج عنها هجمات الحقن بتعليمات SQL المعروفة بــSQL injection. تفرِض أطر العمل الجيدة على مستخدميها الفصل بين أجزاء التطبيق وتنفيذ بنية Architecture مجرَّبة تؤدي في النهاية إلى الرفع من تصميم التطبيق وجعل الشفرة المصدرية أيسر في القراءة وأسهل في الصيانة والاختبار. نجمل في ما يلي أهم الأسباب التي تجعل من اختيار Laravel مناسبًا: سهولة الاستخدام.الفصل بين عناصر التطبيق مما يسهل عمل فريق من المطوّرين وتقاسم المهامّ بينهم.دعم التطوير السريع للتطبيقات Rapid Application Developing, RAD: توفر أداة Artisan وسيلة سريعة لإنشاء شفرة مصدرية نمطية للتعديل المباشر عليها. كما أنها تُستخدَم لمهامّ أخرى مثل تشغيل الاختبارات الأحادية Unit tests، تهجير قواعد البيانات، وغيرها.التضمين الافتراضي لوظائف شائعة الاستخدام في تطبيقات الويب، مثل الاستيثاق Authentication، التوجيه Routing، إدارة قواعد البيانات، إرسال البريد الإلكتروني.متحكمات RESTful: يعني هذا أنه يمكن الاستفادة من أفعال HTTP القياسية مثل PUT، POST، GET وDELETE.إدارة الاعتماديات Dependencies باستخدام Composer وهو ما يعني إمكانية استخدام الحزم والمكتبات الموجودة على الموقع www.packagist.com بيُسر ضمن مشاريعك.استخدام إطار العمل Eloquent وهو إطار للربط بين الكائنات في قاعدة البيانات والتصنيفات في شفرة التطبيق Object Relational Mapper.بنية MVCتتبع المشاريع في إطار العمل Laravel بنية Model-View-Controller (تُختصر بـMVC) التي تقسّم التطبيق إلى ثلاثة أجزاء متصلة في ما بينها، وتُفرّق بين التمثيل الداخلي للمعلومة والطرق التي تُقدَّم بها المعلومة إلى المستخدم. يقع جزء النموذج Model في قلب بنية التطبيق؛ تُعالَج في هذا القسم البيانات وتُنفَّذ عليها القواعد (في تطبيق محاسبة تنتمي الفواتير والعمليات عليها إلى هذا الجزء). يتولى الجزء الثاني في البنية وهو العرض View مهمة تقديم البيانات إلى المستخدم. يمكن أن تأخذ نفس البيانات أشكالا عدّة للعرض (مخطّط بياني، جدول، … إلخ). أما الجزء الثالث (المتحكِّم Controller) فيأخذ مُدخلات ويحوّلها إلى أوامر يرسلها للنموذج والعرض. يمكن شرح الأمر على النحو التالي: يرسل المتحكّم أمرا إلى النموذج لتعديل حالته (تحرير فاتورة). كما يمكنه إرسال أمر إلى العرض بتغيير طريقة تقديم البيانات (الانتقال بين أسطر الفاتورة).يخزّن النموذج البيانات المعثور عليها وفقا لأوامر المتحكّم وتلك المعروضة في العرض.يولّد العرض مخرجات للمستخدم حسب البيانات الخزّنة في النموذج.يجمل المخطط البياني التالي آلية العمل. سلسلة دروس Laravel: إنشاء تطبيق ويب للتسوقننطلق في سلسلة الدروس هذه من مبدأ أن أفضل وسيلة للتعلم هي الممارسة، لذا سنبدأ خطوة خطوة بإنشاء تطبيق ويب للتسوق مع ميزة سلة المشتريات. تعطي الصورة التالية فكرة عن شكل الموقع الذي نريد إنشاءه. تشمل السلسلة المواضيع التالية: تثبيت Laravel وإعداده على كلّ من Windows وUbuntu.أساسيات بناء تطبيق باستخدام Laravel.إنشاء روابط محسنة لمحركات البحث (SEO) في إطار عمل Laravel.نظام Blade للقوالب.تهجير قواعد البيانات في Laravel.استخدام Eloquent ORM لإدخال البيانات في قاعدة البيانات، تحديثها أو حذفها.إنشاء سلة مشتريات في Laravel.الاستيثاق في Laravel.إنشاء واجهة لبرمجة التطبيقات API في Laravel.إنشاء مدوّنة باستخدام Laravel.استخدام AngularJS واجهةً أمامية Front end لتطبيق Laravel.الدوّال المساعدة المخصّصة في Laravel.استخدام مكتبة Faker في تطبيق Laravel لتوليد بيانات وهمية قصدَ الاختبار.ترجمة -بتصرّف- لمقال Laravel 5 Tutorial لصاحبه Rodrick Kazembe.
    1 نقطة
  13. أهلًا سارة سعيد بحصولك على الفائدة والمتعة من هذا الدرس وآسف على التأخر في الرد بسبب انشغالي الفترة الماضية التصميمان جميلان مع بعض الأخطاء الطفيفة في التصميم الثاني بالنسبة لسؤالك فإن Rasterize تقوم بتحويل أي نوع من الطبقات (نصوص، عناصر ذكية، أشكال، وغيرها...) إلى طبقة عادية بدون مزايا خاصة كما كانت قبل تنفيذ الأمر ما يسهّل استخدام الكثير من الأدوات عليها. وبالنسبة لحفظ الصورة بصيغة GIF فليس عليك استخدام "حفظ باسم" أو "Save As" للقيام بهذا الأمر بل حفظ من أجل الويب أو Save for web وستجدينها في إصدارات فوتوشوب الحديثة ضمن قائمة Files>Export>Save for Web وبهذه الطريقة يتم حفظ ملف GIF المتحرك.... بالتوفيق
    1 نقطة
  14. لدي سؤال أستاذ زاهر، عند ماذا تعني كلمة rasterize؟ ولماذا عندما أحفظ العمل على صيغة GIF الصورة لا تصبح متحركة؟.. شكرا جزيلا أستاذ زاهر. وهذا ثاني تطبيق لي للدرس.
    1 نقطة
×
×
  • أضف...