لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 11/09/18 في كل الموقع
-
شريط أدوات الإدارة في ووردبريس هو ذاك الشريط الرفيع الأسود التي يظهر في أعلى الصفحة في موقعك، ويحتوي على قوائم وروابط تُشير عادةً إلى صفحاتٍ معيّنة في لوحة التحكم مثل تعديل المنشورات، وصفحة حساب المستخدم، وتخصيص القوالب والمزيد. بغض النظر عن الميزات المفيدة لشريط الأدوات، لكن قد يصبح مزعجًا وخصيصًا عندما لا تريد منح جميع المستخدمين وصولًا إلى لوحة التحكم، أو لأنك لا تحب وجود مستطيل أسود أثناء تصفحك لموقعك. لكن شريط الأدوات هو جزءٌ مهم لمدير ووردبريس ويمكن أن يكون مفيدًا جدًا بعد تخصيصه بشكلٍ ملائم لكي يوفر وصولًا سريعًا إلى أقسام الموقع وإلى معلومات محددة. سأريك كيف تُدير شريط أدوات ووردبريس، عبر إزالته لمستخدمين معينين، أو إضافة روابط وقوائم جديدة، أو تخصيص مظهره. إزالة شريط أدوات الإدارة قد تود في بعض الأحيان أن تُزيل شريط الأدوات من واجهة موقعك، إذ تستطيع إخفاءه لجميع المستخدمين أو لمستخدمين أولي دورٍ (role) محدد. السطر الآتي عندما تُضيفه إلى ملف functions.php (ولا تنسَ أن تستعمل قالبًا فرعيا child theme) سيحذف شريط الأدوات لجميع مستخدمي الموقع: <?php show_admin_bar( false ); ?> يجب على الدالة show_admin_bar أن تستدعى مباشرةً عند تحميل الإضافة ولا حاجة إلى استدعائها من دالة مرتبطة (hooked) بالحدث (action) المسمى init. الحالة الأكثر شيوعًا هي إخفاء شريط الأدوات بناءً على امتيازات أو دور المستخدم. ستخفي الشيفرة الآتية شريط الأدوات لكل المستخدمين ما عدا المدراء والمحررين: <?php /** * Remove WordPress Toolbar for subscribers */ function myplugin_remove_admin_bar() { if ( ! current_user_can( 'publish_posts' ) ) { show_admin_bar( false ); } } add_action( 'plugins_loaded', 'myplugin_remove_admin_bar' ); ذكرتُ قبل قليل أنَّه لا يُشترَط أن تستدعى الدالة show_admin_bar عبر دالة مرتبطة بحدثٍ ما. ولهذا قد تتساءل لماذا أضفناها إلى الحدث plugins_loaded؟ إن لم نفعل ذلك في هذه الحالة، فستُظهِر ووردبريس رسالة الخطأ الآتية: Fatal error: Call to undefined function wp_get_current_user() أما لو كنتَ تستدعي الدالة current_user_can() من داخل ملف functions.php في قالبٍ ما، فعليك أن تربط (hook) تلك الدالة بحدث after_setup_theme. هذا المثال مشابه كثيرًا للمثال السابق إلا أنَّه يعمل في القوالب: <?php /** * Remove WordPress Toolbar for all users except admins and editors * */ function mytheme_remove_admin_bar() { if ( ! current_user_can( 'publish_posts' ) ) { show_admin_bar( false ); } } add_action( 'after_setup_theme', 'mytheme_remove_admin_bar' ); إذا أردت أن تكون الشيفرة السابقة قابلة لإعادة الاستخدام، فمن المفضل ربط الدالة إلى الحدث after_setup_theme دائمًا. منذ الإصدار 3.1، وفَّرَت ووردبريس المُرشِّح (show_admin_bar (filter، لذلك أصبحت لدينا طريقة أخرى لأداء نفس المهمة. فلو أردنا مثلًا إخفاء شريط الأدوات من جميع المستخدمين بسطرٍ وحيد: <?php add_filter( 'show_admin_bar', '__return_false' ); ?> وهو مماثل تمامًا للأسطر الآتية: <?php /** * Remove WordPress Toolbar for all users * */ function myplugin_remove_admin_bar(){ return false; } add_filter( 'show_admin_bar' , 'myplugin_remove_admin_bar' ); يمكنك أيضًا إظهار أو إخفاء شريط الأدوات بناءً على امتيازات المستخدم: <?php /** * Remove WordPress Toolbar for users not allowed to publish posts * * @param bool $show_admin_bar Whether the admin bar should be shown */ function myplugin_remove_admin_bar( $show_admin_bar ) { if( current_user_can( 'publish_posts' ) ){ return $show_admin_bar; } else{ return false; } } add_filter( 'show_admin_bar' , 'myplugin_remove_admin_bar' ); سيَظهَر شريط الأدوات -في المثال السابق- إلى المدراء والمحررين فقط (الذين يستطيعون النشر publish_posts). هذا كل ما عليك معرفته إن أحببت إزالة الشريط، لكن ماذا لو أردت أن تستخدم شريط الأدوات لإضافة ميزاتٍ جديدةٍ إليه؟ تخصيص شريط الأدوات الصنف WP_Admin_Bar يتحكم في شريط الأدوات، وعبره نستطيع إضافة أو حذف عناصر القائمة أو مجموعات من العناصر. سنستخدم الدوال الثلاث الآتية في أمثلتنا القادمة: ()add_node ()add_group get_node() تُعرَّف القوائم الافتراضية في ملف /wp-includes/admin-bar.php، وبعض تلك القوائم متوفرة لجميع المستخدمين الذين سجلوا دخولهم، مثل قائمة "شعار ووردبريس" (التي فيها بعض الروابط التعليمية)، وقائمة "حسابي (التي تُظهِر بعض الروابط المتعلقة بالمستخدم الحالي)، وقائمةٌ باسم الموقع (التي توفر روابط سريعة للوحة التحكم). لكن ووردبريس تعطينا القدرة على إضافة قوائم مخصصة وروابط إضافية ومعلومات نصية وحقول للنماذج (forms). لن أشرح هنا طريقة إضافة العناصر إلى شريط الأدوات، لكنني سأريك مثالين عمليين لكيفية تخصيص الشريط، وسأبدأ بتحديثٍ بسيطٍ لقائمة "حسابي". كيفية إضافة عناصر جديدة إلى قائمة موجودة مسبقا عندما يكون هدفنا هو إضافة عناصر جديدة إلى شريط الأدوات بناءً على امتيازات المستخدم، فعلينا تمرير مُعامل (argument) إلى الدالة التي ستُستدعى ألا وهو نسخةٌ من كائن WP_Admin_Bar. يمكن أن ترتبط الدالة بالحدث admin_bar_menu كما هو موضَّح في المثال الآتي: <?php function myplugin_customize_toolbar( $wp_admin_bar ){ // your code here } add_action( 'admin_bar_menu', 'myplugin_customize_toolbar', 999 ); ذكرتُ سابقًا في هذه المقالة أننا نستطيع بناء قوائم جديدة بالإضافة إلى إضافة روابط إلى قوائم موجودة مسبقًا. سنتيح للمستخدم -في المثال الآتي- رابطًا سريعًا إلى موقعه الإلكتروني وذلك بإضافة عقدة (node) جديدة إلى قائمة "حسابي". عندما يتم تحميل الملف admin-bar.php، فستُنشَأ مجموعةٌ جديدةٌ من العقد (nodes) باسم user-actions التي ستُضاف إلى قائمة my-account، هذه المجموعة هي المجموع الرئيسية التي ستُضاف إليها أيّة روابط لتظهر في تلك القائمة الفرعية. وظيفة الشيفرة الآتية هي إضافة رابط إلى المجموعة: <?php /** * Customize WordPress Toolbar * * @param obj $wp_admin_bar An instance of the global object WP_Admin_Bar */ function myplugin_customize_toolbar( $wp_admin_bar ){ $user = wp_get_current_user(); if ( ! ( $user instanceof WP_User ) ){ return; } $my_account = $wp_admin_bar->get_node( 'my-account' ); if( ! empty( $user->user_url ) && $my_account ){ $wp_admin_bar->add_node( array( 'parent' => 'user-actions', 'id' => 'user-url', 'title' => '<span class="user-url">' . __( 'My Website' ) . '</span>', 'href' => esc_url( $user->user_url ) ) ); } } add_action( 'admin_bar_menu', 'myplugin_customize_toolbar', 999 ); في البداية، حصلنا على كائن $current_user ثم تحققنا أنَّه نسخةٌ من صنف WP_User، ثم حصلنا على كائن العقدة my-account، الذي يُشير إلى قائمة "حسابي" الموجودة على الجانب الأيسر من شريط الأدوات (أو الجانب الأيمن إن لم تكن تستخدم النسخة العربية من ووردبريس). في النهاية نتحقق من وجود الحقل user_url وتوفر كائن العقدة، ثم سنضيف user-url إلى القائمة. الدالة السابقة ستولد شيفرة HTML الآتية: <li id="wp-admin-bar-user-url"> <a class="ab-item" href="http://example.com"> <span class="user-url">My Website</span> </a> </li> القائمة الناتجة موضحة في الصورة الآتية: مثال متقدم: قوائم شرطية، وأنواع مقالات مخصصة والمزيد تتوفر بعض قوائم شريط الأدوات في صفحاتٍ معيّنة فقط، على سبيل المثال، قائمة "تحرير المقالة" (Edit post) التي توفر رابطًا سريعًا لتعديل صفحة المنشور (post) أو الفئة (taxonomy) الحالية تظهر فقط في صفحات المنشورات وأرشيفات الفئات. وقد يوحي ما سبق لنا بفكرةً ألا وهي إظهار عناصر القائمة في شروطٍ معينة، الشرط في المثال الآتي يعتمد على امتيازات المستخدم. قد نود إظهار قائمة لمحرري الموقع تحتوي على مجموعة من الروابط التي تُشير إلى صفحات في لوحة التحكم التي تحتوي على المنشورات التي تنتظر النشر (رابط لكل نوع من أنواع المنشورات). ستستفيد المواقع التي فيها أكثر من محرر كثيرًا من مثل هكذا قائمة، وذلك عندما يكتب المستخدمون مقالاتٍ (أو منشورات مخصصة) متوقعين أن تتم مراجعتها للنشر. لنعد الآن إلى دالتنا ولنضف الشيفرة الآتية: <?php /** * Customize WordPress Toolbar * * @param obj $wp_admin_bar An instance of the global object WP_Admin_Bar */ function myplugin_customize_toolbar( $wp_admin_bar ){ $user = wp_get_current_user(); if ( ! ( $user instanceof WP_User ) ){ return; } $my_account = $wp_admin_bar->get_node( 'my-account' ); // Add a custom link to My Account menu if( ! empty( $user->user_url ) && $my_account ){ $wp_admin_bar->add_node( array( 'parent' => 'user-actions', 'id' => 'user-url', 'title' => '<span class="user-url">' . __( 'My Website' ) . '</span>', 'href' => esc_url( $user->user_url ) ) ); } if( current_user_can( 'editor' ) ){ // Add a new node to the Toolbar // The link points to the pending posts admin page $wp_admin_bar->add_node( array( 'id' => 'editor-menu', 'title' => '<span class="ab-icon"></span><span class="ab-label">' . __( 'Pending posts' ) . '</span>', 'href' => admin_url( 'edit.php?post_status=pending' ) ) ); // Add group of links $wp_admin_bar->add_group( array( 'parent' => 'editor-menu', 'id' => 'editor-actions' ) ); // Get post types $cpts = (array) get_post_types( array( 'show_in_admin_bar' => true ), 'objects' ); foreach ( $cpts as $cpt ) { if ( ! current_user_can( $cpt->cap->publish_posts ) ) continue; // Get pending posts and post types $posts = get_posts( array( 'post_type' => $cpt->name, 'post_status' => 'pending' ) ); $num = count( $posts ); $title = $num . ' ' . $cpt->label; // Add a new link for each post type $wp_admin_bar->add_node( array( 'parent' => 'editor-actions', 'id' => 'edit-' . $cpt->name, 'title' => $title, 'href' => admin_url( 'edit.php?post_status=pending&post_type=' . $cpt->name ) ) ); } } add_action( 'admin_bar_menu', 'myplugin_customize_toolbar', 999 ); أولًا تحققنا إن كان المستخدم الحالي محررًا، فإن كان الأمر كذلك، فستُضاف القائمة الرئيسية editor-menu، ثم سنضيف المجموعة editor-actions مع ضبط أنها ستكون قائمة فرعية للقائمة الرئيسية editor-menu. هنا يأتي الجانب المسلي: الدالة get_post_types تولد مصفوفة بكائنات أنواع المنشورات المخصصة ثم سنتحقق إن كان المستخدم الذي سجل دخوله له امتيازات التحرير على كل نوع منشورات مخصص (أي أنَّ المستخدم قادر على نشر المنشورات publish_posts) ثم سنحصل على مصفوفة لكل المنشورات التي تنتظر النشر في نوع المنشورات المخصص ونحصي عددهم. في النهاية، سنضيف عقدة (أو عنصر) إلى مجموعة editor-actions. وسيُشير كل رابط في تلك المجموعة إلى صفحة تحرير المنشورات التي تنتظر النشر. وإذا أردت أن تخصص طريقة عرض القائمة بإضافة أيقونة من مجموعة، فأضف الشيفرة الآتية إلى إضافتك (plugin) أو إلى ملف functions.php: <?php /** * Prints style element */ function myplugin_custom_css() { $output = '<style> wpadminbar wp-admin-bar-editor-menu .ab-icon:before { content: "\f322"; top: 2px; } </style>'; echo $output; } add_action( 'wp_head', 'myplugin_custom_css' ); ربطنا الدالة السابقة إلى الحدث المسمى wp_head التي -أي الدالة- ستطبع عنصر <style> في ترويسة (head) الصفحة. أعلم أنَّ هذه ليست أفضل طريقة عند تضمين ملفات الأنماط في مستند، لكننا نضيف هنا سطرًا وحيدًا، ولن يكون تحميل ملف CSS كامل خيارًا عمليًا. لكن إن كنت تريد أن يبدو شريط الأدوات كباقي موقعك، فعليك أن تعيد تعريف الأنماط الموجودة في /wp-includes/css/admin-bar.css ثم تُضمِّن الأنماط الخاصة بك. الخلاصة إذا تركت شريط الأدوات كما هو، فقد يبدو لك غير ضروري وأنَّه شيءٌ قبيحٌ قابعٌ في أعلى صفحات موقعك، لكن إن فكرت في إمكانية الاستفادة منه بعد تخصيصه، فسيصبح أداةً مهمةً ومفيدةً ومرنةً، سواءً لمالكي الموقع أو للمستخدمين الذين يشاركون به. هل تستخدم شريط الأدوات في مواقعك؟ هل أضفت قوائم جديدة أو وظائف متقدمة له من قبل؟ هل لديك أيّة أفكار أحببت تطبيقها عليه لكن لم تفعل ذلك بعد؟ شاركنا بذلك في التعليقات. ترجمة -وبتصرّف- للمقال Customizing (or Removing) the WordPress Admin Toolbar لصاحبه Carlo Daniele.1 نقطة
-
عندما يتعلق الأمر ببناء نوع معيّنٍ من تطبيقات الويب، فأوّل ما يخطر ببالي هو استخدام ووردبريس! ومن بين المشاريع البرمجية التي عملتُ عليها في السنتين الماضيتين، تطلّب نصفها - على الأقل - إمكانية إدارة حسابات المستخدمين، وهو ما يعني عادةً السماح للمستخدمين بإنشاء حساباتهم، بإدخال بعض البيانات في حقلَي الاسم وعنوان البريد الإلكتروني، ومن ثم ستُرسَل إليهم رسالةٌ بريديةٌ لتفعيل حسابهم بعد إرسال النموذج. توفِّر ووردبريس طريقةً سهلةً لإدارة المستخدمين عبر لوحة التحكم، وإذا كان موقعك تعليميًا أو كنتَ تستعمله مدونةً لك، فلا حاجة إلى إنشاء آليةٍ أخرى لإدارة المستخدمين، لكن إذا كنتَ تبني تطبيقًا متكاملًا، فهنالك طرائق أخرى للتعامل مع حسابات المستخدمين. لنقل مثلًا أنَّ المُصمِّم قد وضع طريقةً معينةً لإدارة الحسابات في الموقع، وإذا أجبرتَ المستخدمين على استخدام لوحة التحكم فستتسبَّب بتخريب تجربة المستخدم، أليس كذلك؟ هنالك طرائقٌ أفضل لتسجيل حسابات المستخدمين وإدارتها بدلًا من استخدام لوحة التحكم التابعة لووردبريس، وسنناقش في هذا الدرس كيفية إنشاء حسابات المستخدمين برمجيًا، وسنلقي نظرةً على النقاط الآتية: الحصول على معلومات المستخدم بصيغةٍ معيّنة، التعرّف على المعلومات اللازمة لإنشاء حساب مستخدم، إنشاء الحساب، التأكد أنَّ شيفرتنا تخضع لمعايير كتابة الشفرات القياسية، وأنها سهلة القراءة والصيانة. لا تقلق، لن يكون هذا الدرس طويلا ومملًّا، أعدك بذلك! إنشاء حسابات مستخدمي ووردبريس يحتاج أحدنا إلى المعلومات الآتية –على الأقل– لإنشاء حساب مستخدم جديد: اسم المستخدم كلمة المرور عنوان البريد الإلكتروني عندما يتعلق الأمر بإنشاء اسم المستخدم، فأنا أفضِّل استخدام البريد الإلكتروني اسمًا للمستخدم لأنني أضمن أنَّه فريد ولن يتكرر مرةً أخرى؛ ولهذا سنستخدمه في هذا الدرس؛ وسنتحدث عن توليد كلمة المرور لاحقًا. أضف إلى ذلك ضرورة افتراض أنَّ البيانات ستأتيك بأيّ صيغة: فربما تكون بصيغة JSON، أو تكون حقولًا مفصولةً بفواصل كما في CSV، وقد تأتي بصيغة XML. بغض النظر عن الصيغة المستعملة، فيجدر بك كتابة الشفرات اللازمة لتفسير تلك المعلومات باستخدام PHP لكي تستطيع التعامل معها لاحقًا. ولتبسيط الشيفرات المعروضة في هذا الدرس، سنفترض وجود تسجيلة Record لمستخدمٍ وحيدٍ مخزنةٌ معلوماته في مصفوفة. هذا لا يعني أنَّ المعلومات ستأتيك مباشرةً على شكل مصفوفة جاهزة، وإنما عليك تحويلها برمجيًا إلى واحدة. أولًا: معلومات المستخدم لنفترض أنَّنا سنضيف شخصًا باسم Meghan إلى نظامنا، ولدينا عنوان بريده الإلكتروني. لكن لا بأس بذلك، فلدينا المعلومات الأساسية التي نريدها: <?php $user_info = array( 'email' => 'meghan@emaildomain.com', 'first_name' => 'Meghan', 'last_name' => 'McFarlin', ); ولنحوِّلها إلى شيءٍ نستطيع من خلاله إنشاء حسابٍ له. ثانيًا: إنشاء الحساب أوّل ما علينا فعله هو التحقق من عدم وجود مستخدم مرتبط بعنوان البريد الإلكتروني نفسه، وإذا حدث ذلك فسنستعمل التعليمة return فقط، لكنك قد ترغب بإظهار رسالة خطأ أو أي نوع من التنبيهات لتخبر المستخدم أنَّك لا تستطيع إنشاء هذا الحساب لوجوده من قبل؛ لكن ذلك خارجٌ عن نطاق هذا الدرس: <?php // التحقق من صحة البريد الإلكتروني الذي أدخله المستخدم وعدم وجوده مسبقًا في قاعدة البيانات $email = $user_info['email']; if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) || username_exists( $email ) ) { return; } لنفترض في هذا الدرس أنَّ المستخدم غير موجود، وعلينا إنشاء حساب له؛ ولفعل ذلك سنحتاج إلى عنوان البريد الإلكتروني إضافةً إلى كلمة مرور؛ ولحسن الحظ، توليد كلمات المرور سهلٌ جدًا: <?php $password = wp_generate_password( 16, false ); لنأخذ البريد الإلكتروني الذي أدخله المستخدم وكلمة المرور التي ولّدناها ولنُنشِئ الحساب: <?php // الحصول على البريد الإلكتروني وتوليد كلمة المرور $email = $user_info['email']; $password = wp_generate_password( 12, false ); // إنشاء حساب المستخدم $user_id = wp_create_user( $email, $password, $email ); // ضبط امتيازات أو دور المستخدم $user = new \WP_User( $user_id ); $user->set_role( 'author' ); لاحظ في الشيفرة السابقة أننا ضبطنا دور المستخدم (role)، وذلك عبر الحصول على نسخةٍ من الصنف Wp_User ثم استخدام مُعرِّف المستخدم المُخزَّن في المتغير $user_id لضبط الدور الخاص به. استخدمتُ دور الكاتب Author في المثال السابق، لكن هنالك أدوار ووردبريس أخرى يمكنك اختيار أحدها. ثالثًا: ألا توجد خطواتٌ أخرى؟! أصبح حساب المستخدم جاهزًا عند هذه المرحلة؛ دعني أذكِّرُكَ أنَّ جزءًا كبيرًا من عملية إنشاء المستخدم متعلقٌ بكيفية استقبال البيانات، ومن ثم معالجتها، والطريقة التي تسمح بها لمدير الموقع بإنشاء الحسابات. هذه الأمور مهمة، لكنني وعدتُكَ أن أبقي هذا الدرس قصيرًا ومركَّزًا، وتلك الأمور ترتبط ارتباطًا وثيقًا بشكل موقعك وتجربة المستخدم فيه، أي أنها تختلف من موقعٍ لآخر. الخلاصة لقد تعلمنا في هذا الدرس طريقة إنشاء مستخدمي ووردبريس برمجيًا، عبر تجربتنا لذلك على حساب مستخدمٍ واحد. إذا أردتَ إنشاء مستخدمين عدّة، فعليك إنشاء مصفوفات فيها معلومات المستخدمين، والتي تستطيع الدوران عليها عبر حلقة تكرار وتُنشِئ الحسابات كما فعلنا في هذا الدرس. ترجمة –وبتصرّف– للمقال Programmatically Creating WordPress Users لصاحبه Tom McFrlin. حقوق الصورة البارزة محفوظة لـ Freepik1 نقطة
-
لم تعمل معي /*global console, alert, prompt*/ var oldQuantity_input = document.getElementById("oldQuantity").value, oldCost_input = document.getElementById("oldCost").value, newQuantity_input = document.getElementById("newQuantity").value, newCost_input = document.getElementById("newCost").value, TotalQuantity_output = oldQuantity_input + newQuantity_input, // إجمالي الكمية TotalCost_output = oldCost_input + newCost_input, // إجمالي التكلفة newPrice_output = TotalCost_output / TotalQuantity_output, // السعر الجديد المعدل textToNum = parseInt(oldQuantity_input, oldCost_input, newQuantity_input, newCost_input, TotalCost_output, TotalQuantity_output, newPrice_output); function cacl() { "use strict"; document.getElementById("Caclulate").innerHTML = newPrice_output; } أصبحت النتيجة undefined1 نقطة
-
ما هو الدرس الأصعب الذي يتعلّمه المستقلّون الطموحون؟ معظم العملاء لا يريدونك. لكي تكون ناجحًا، من المهم أن تتقبل وجود بعض العملاء الذين لا يريدون أعمالك ولن يطلبوها في يوم من الأيام. وبالمثل، فإنّه من المهم بنفس القدر أن تبقى واثقًا من نفسك ومن مقدراتك الكتابيّة على الرغم من كلّ حالات الرفض هذه. طالما أنّك لا تزال تعمل على تحسين كتاباتك، وطالما أنّك لم تفقد الأمل في تطوير مهاراتك، فإنّك ستلقى طريقك لتصبح ناشرًا ناجحًا. إن كنت قد بدأت للتو، وكنت تعاني إمّا من رفض العملاء لك، أو من الحفاظ على ثقتك في أعمالك بعد هذا الرفض، فإنّني أشجعك وبشدّةٍ لمراجعة هذه الخطط البديلة الخمس المطلوبة للنجاح في مجال التدوين المستقلّ: 1. الحصول على عميلٍ حسن السمعة أصعب بكثيرٍ مما قد تتوقّعه في البداية لقد شرعت بالعمل في مجال التدوين المستقلّ، متفائلًا وحريصًا في تقديم مشروعك المدفوع الأول في مجال الكتابة، وتدرك بعد وقت قصير أنّ هناك الكثير من المحتالين. خلال هذه الفترة الأولية، فترة "البحث والعثور"، ستتعلم أيضًا أن عدد مشاريع الكتابة المتاحة التي يمكن أن تجدها قليل جدًا. لضمان عدم ضياع وقتك أو أنْ تكون فريسةً لأحد المخادعين، يجب أن تكون على يقين من دراستك لجميع العملاء المحتملين قبل أنْ تتقدم للعمل معهم. قم بزيارة واستكشاف موقع العميل. خذ انطباعًا عن طبيعة عملهم، وقم بقراءة مجموعةٍ متنوّعةٍ من التدوينات والمنشورات الموجودة على موقعهم. اعرف ما إذا كان أسلوبك ومجالات اختصاصك متوافقةٌ مع احتياجاتهم، وأنّ احتياجاتهم تتماشى مع رغباتك أيضًا. كن حذرًا من أيّة فرصةٍ قد تكون جيدة حتى تتأكد من صحتها، وكما يقول المثل؛ إنّها نموذجيّة، إذًا هي كاذبة. عند دراسة أيّ عميل، يجب عليك أنْ تذهب إلى غوغل وتبحث عنه مباشرةً. قم بفتح بضع صفحات متعلّقة بنتائج البحث عن عميلك على غوغل، وابحث بالتحديد عن مراجعات وتقييمات شرعيّة للعميل، وعن آلية العمل معه. خطة بديلة: إذا وقعت ضحيّة لأحد المخادعين، أو تمّ اللعب عليك من قبل عميل مزيّف، بدلًا من أنْ تصاب بالإحباط وتلقي اللوم على نفسك، يجب عليك أنْ تستغلّ هذه الظروف المرحلية كناحية مهمّة تستوجب التركيز عليها عند البحث عن العملاء المحتملين. استخدم هذه الحادثة كدرسٍ مفيد، وامْضِ قدمًا مزوّدًا بتلك المعارف الجديدة. وتأكد من أخذ هذه المعارف الجديدة بالحسبان قبل التقدّم بطلب للعمل مع أيّ عميلٍ في المستقبل. لن يقوم أحدٌ بالبحث عن الأشياء التي تفيدك كما ستفعل أنت، لذلك تأكد من الاستفادة من جميع إمكانياتك، للتحقّق من صدق كلّ عميلٍ ممكن؛ فإن ذلك سيضمن أنْ تعمل لصالح شخصٍ يتمتع بالسمعة الطيبة: سواء أكانت في العمل الذي ينتجه أو الذي يقدمه، وبالطريقة التي يتفق بها مع المشاركين معه (أنت). يبدو وكأنّ الجهد المبذول لإجراء هذا البحث عن العملاء المحتملين قبل البدء في أيّ عمل فعليّ معهم كبيرٌ جدًا، ولكنه ضروري للغاية إنْ كنت تريد أنْ توفّر على نفسك قدرًا كبيرًا من الصراع والإحباط في المستقبل. 2. عادة ما يكون النقد الذي ستتلقاه قاسيًا جدًا قد يكون هذا الأمر محبطٌ جدًا للكتّاب الجدد. يتلقى المحررون عددًا لا يحصى من الاشتراكات والتطبيقات كلّ يوم. ومن المعروف أنّهم يصلون إلى معرفة دقيقة لماهية الأشياء التي يجب [والتي لا يجب] البحث عنها في الكاتب. ولهذا السبب، يمكن لانتقاداتهم أنْ تكون قاسية وحادّة في كثير من الأحيان وقد تصل إلى حدّ الإهانة. حتى في محافل الكتّاب، وعلى المدوّنات الشخصية للناس، هناك قرّاءٌ لديهم تلك الانتقادات السلبية التي تجعلك تستغرب أنّ بعض الناس ما زالوا يكتبون. والحقيقة هي أنّ هناك دائما نقاد، وإذا ما تمكّنوا من انتقادك –فلا يجب عليك السماح لهم بالاستمرار في ذلك. خطة بديلة: عند تلقي الانتقادات أو ردود الفعل القاسية، بدلًا من تتوقف عن العمل وتعلن أن "عملك رديءٌ جدًا ومن المستحيل أن يتم اختياره"، استخدم هذه الانتقادات وردود الفعل بشكل بنّاءٍ لبناء لتستفيد منها في تحسين جودة كتاباتك. والآن، أنا لا أقول لك أن تصغي للانتقادات عديمة الحسّ التي تطلب منك أنْ تلقي جميع كتاباتك في سلّة المهملات. لأنّ هذا النوع من الانتقادات هو عبارة عن سخافات. بدلًا من ذلك، أقترح عليك أنْ تنظر في مساهمات النقّاد الذين قد يكون لديهم نقطةٌ مفيدةٌ لمناقشتها [حتى لو كنّا نميل في البداية إلى رفضها كحقيقة ممكنة]. أصغِ بدقّةٍ وانفتاحٍ لنصيحة النقاد الذين لا ينوون الأذى، أولئك الذين يأملون أن يساعدوك في النموّ والتطور. وحاول التغاضي عن العبارات البغيضة، وادرس بطريقةٍ أخرى ردود الفعل الأقلّ تفضيلًا التي ساهم بها جمهورك. حتى الانتقادات القاسية يمكن أنْ تساعد كتاباتنا في الازدهار إذا تقبلناها وعالجناها بشكلٍ مناسب. 3. استمر بعملك مجال عمل الكتابة المستقلّة مجال ذو وتيرةٍ سريعة، ومليء بالانتقادات القاسية والفرص المحدودة للنشر. ويعتمد في كثيرٍ من الأحيان على مبدأ من يأتي أولًا يخدم أولًا، أو على مبدأ اقتصار الفرص على الكتّاب ذوي المكانة المرموقة. ويمكن أنْ تكون هذه المبادئ محبِطةً بعض الأحيان. كن حذرًا من هذا الشعور بالإحباط، وابذل جهدًا واعيًا في عدم تمكينه من التغلّب عليك. يجب عليك أيضًا التركيز على أنْ تكون واقعيًّا بما يتعلّق بأهدافك، بأنْ تعرف أنّها تحتاج وقتًا طويلًا لتحقيقها؛ فالعثور على عميلٍ ذو سمعةٍ طيبةٍ للعمل معه والحصول على الدخل الذي يطمح به المدوّنون المستقلّون الطموحون لن يحدث بين عشية وضحاها. خطة بديلة: في الوقت نفسه، اسمح لنفسك بالاستفادة من جميع الأدوات المجانيّة على الإنترنت، والتي تهدف إلى تعزيز مهاراتك الكتابيّة. ابحث عن المنتديات الخاصّة بالمستقلين، واقرأ عددًا كبيرًا من المحادثات التي عادةً ما تكون غنيّةً بالمعلومات. تشكّل المكتبات المحليّة مصدرًا رائعًا للكتّاب أيضًا: فهي مليئةٌ بالأفكار والدروس والخيارات. استخدام أي معلومةٍ أو نصيحةٍ صغيرةٍ قد تواجهك، والتي من شأنها أنْ تساعدك على توسيع مهاراتك الحالية ككاتب، حتى تتمكّن من تأمين العمل الذي يساعدك في تأمين مستقبلٍ واعد. لا تفقد الأمل في تحسين نفسك أو عملك، بغض النظر كمية النفور التي قد تسبّبها عمليّة "النشر". تذكر: الاستمرار هو الحل. 4. لا تضع كل تركيزك في مكان واحد لا يجب عليك تقديم طلب واحد فقط، إلى عميل واحد فقط، وتظن أن النجاح في ميدان التدوين المستقلّ أمر سهل؛ إنه ليس كذلك. إذا كنت تريد فرصة لتطوير مقدراتك الكتابية، ستضطر جدًا إلى نشر عملك [وجهدك] على نطاقٍ واسع. خطة بديلة: بدلا من ذلك، يجب عليك تقديم عيّنات وطلبات لأكبر عددٍ ممكنٍ من العملاء حسنيّ السمعة. سيؤدّي ذلك إلى زيادة فرصك في الاختيار. حتى لو لم يتم اختيارك، فإن بعض هؤلاء العملاء سيقومون بتزويدك بردود فعل توضّح سبب عدم اختيارهم لك، وهذه الانتقادات أو ردود الفعل يمكن استخدامها لتطوير مهاراتك ككاتب، والمضيّ قدما. 5. كن صبورًا استخدام التدوين المستقلّ لكسب لقمة العيش لن يكون سهل المنال، حتّى بالنسبة للكتّاب الموهوبين بفطرتهم. كن على علم بأنّ النجاح في هذا المجال غير مضمون؛ ويتحقّق ذلك من خلال العمل الشاقّ، والتفاني في العمل، والسعي الحثيث. ستحتاج إلى مواصلة إجراء البحوث، وتفادي المحتالين، وتجاهل الانتقادات السخيفة، والسعي وراء الفرص المشروعة. سيتوجب عليك الاستمرار بفعل هذه الأشياء حتى لو سئمت منها؛ وبعد ذلك، ستحتاج إلى تكرارها مرة أخرى للقيام بالاستعدادات المناسبة. خطة بديلة: في الوقت الحاضر، لا تكن قلقًا وغير صبورٍ فيما يخصّ رغباتك في النجاح ككاتب. ركز طاقتك وجهدك نحو القيام بأفضل ما في وسعك، لكي تبقى هادئًا وواثقًا عندما يحين وقت النشر. ذكّر نفسك بأن الأشياء القيّمة لا تأتي بسهولة. كن صبورًا ولا تتسرّع في إنهاء أيّ عمل. كما هو الحال في أيّ مهنة، ينبغي على الكّتاب المستقلين الهواة والمدونين جميعًا أن يبدأوا العمل من مكان ما، والبداية هي دائمًا أصعب جزء في أي عمل. إنني أحثك على البدء اليوم. أينما كنت، بغض النظر أن أيّة قيود تضعها لنفسك، اتخذ قرارًا وابدأ بالعمل عليه. بعد ذلك، آمل أن تكون قد وجدت هذه الخطط البديلة الخمس قيمةً ومفيدةً، والتي تقدم مجموعة من المتطلّبات التي ستحتاجها لتصبح كاتبًا أو مدوّنًا مستقلًّا ناجحًا. وبمجرّد أنْ تقوم بها ستمنحك قفزة نوعية على خطّ البداية، وستساعدك في المضيّ قدمًا بجدٍّ في السعي لتحقيق هدفك، وبعدها سيتوجب عليك حشد الجهود والمثابرة، مهما كان مقدار التعب الذي تواجهه على طول الطريق. وبغض النظر عن عدد الخطط البديلة التي سينتهي بك المطاف بالعودة إليها على طول الطريق. اجمع بين هذه الخطط البديلة وقدرتك على البقاء متماسكًا وثقتك في نفسك وفي عملك، وسوف ترى بالتأكيد ثمرة الجهد المبذول عندما يتحوّل إلى إنجازات في الوقت المناسب. واصل التعلّم حتى ذلك الحين، وحافظ على تطورك، وحاول باستمرار، ولا تسمح لأيّ شخصٍ بأن يكبح رغباتك! ترجمة -وبتصرّف- للمقال 5 Backup Plans for New Freelance Bloggers لصاحبه Jessica Denne1 نقطة
-
أحيانًا قد يحتاج قالب أو إضافة إلى إظهار إشعارات/تنبيهات للمُستخدمين عبر لوحة تحكُّم ووردبريس. تنفيذ هذا الأمر بسيط جدًّا حيثُ أنَّهُ يتمّ باستخدام خُطَّاف admin_notices والذي يقوم باظهار صُندوق رسائل في أعلى الشَّاشة. عرض إشعار قياسيfunction my_admin_notice(){ echo '<div class="updated"> <p>I am a little yellow notice.</p> </div>'; } add_action('admin_notices', 'my_admin_notice');حيثُ أنَّه قد تمَّ إضافة الصّنف"updated" إلى الوسم div فسيظهر الإشعار باللَّون الأصفر. أمَّا في حالة تغيير الصّنف إلى "error" فإنَّ الإشعار يظهر أحمرًا. كيفيَّة عمل إشعار قابل للإغلاقمن المُمكن -مع القليل من العمل الإضافي- عرض الإشعار وإبقائه حتَّى يقوم المُستخدم بالضغط على زرٍّ لإغلاقه. تُعتبر تلك الطَّريقة مُفيدة للتأكُّد من أنَّ المُستخدم قد قام برؤية الإشعار وكذلك لن يُضايقه وجود الإشعار طوال الوقت. المثال التَّالي تمَّ استخراجه من إضافة AddThis. يُستخدم أيضًا شيء مُشابه في Options Framework.. إذا قام المُستخدم بالضَّغط لإخفاء الإشعار فسيتمّ حفظ تفضيله في بيانات user meta. /* Display a notice that can be dismissed */ add_action('admin_notices', 'example_admin_notice'); function example_admin_notice() { global $current_user ; $user_id = $current_user->ID; /* Check that the user hasn't already clicked to ignore the message */ if ( ! get_user_meta($user_id, 'example_ignore_notice') ) { echo '<div class="updated"><p>'; printf(__('This is an annoying nag message. Why do people make these? | <a href="%1$s">Hide Notice</a>'), '?example_nag_ignore=0'); echo "</p></div>"; } } add_action('admin_init', 'example_nag_ignore'); function example_nag_ignore() { global $current_user; $user_id = $current_user->ID; /* If user clicks to ignore the notice, add that to their user meta */ if ( isset($_GET['example_nag_ignore']) && '0' == $_GET['example_nag_ignore'] ) { add_user_meta($user_id, 'example_ignore_notice', 'true', true); } }عرض الإشعارات في صفحات تحكُّم مُعيَّنةأحيانًا قد نحتاج إلى تحديد ظهور الإشعار ليكون في صفحاتٍ مُعيَّنة قد يحتاج المُستخدم لرؤية الإشعار بها. يُمكنكَ تنفيذ هذا باستخدام المُتغيِّر العام $pagenow. على سبيل المثال، سيظهر الإشعار التالي في صفحة الإضافات فقط: function my_admin_notice(){ global $pagenow; if ( $pagenow == 'plugins.php' ) { echo '<div class="updated"> <p>This notice only appears on the plugins page.</p> </div>'; } } add_action('admin_notices', 'my_admin_notice');التحقُّق من دور المُستخدم قبل عرض الإشعاريجب عرض الإشعارات للمُستخدمين المعنيين بالأمر فقط. على سبيل المثال، لا فائدة من عرض إشعار عن تعديل خيارات القالب لمُستخدم لا يملك صلاحية التَّعديل على خيارات القالب. إليكَ طريقة للتّحقق من الأدوار الشائعة: if ( current_user_can( 'install_plugins' ) ) if ( current_user_can( 'manage_options' ) ) if ( current_user_can( 'edit_theme_options' ) )آداب الإشعارأحيانًا تُصبح الإشعارات مُزعجة، لهذا عليكَ الحذر عند استخدامها. أبقِ النَّصَّ قصيرًا وحاول ألَّا تعرض أكثر من إشعار. عليك استخدام هذه الميزة باعتدال. مصادر أخرىhttp://theme.it/how-to-display-an-admin-notice-for-required-theme-pluginshttp://codex.wordpress.org/Plugin_API/Action_Reference/admin_noticesترجمة -وبتصرّف- للمقال: Admin Notices in WordPress.1 نقطة