it-swarm.asia

جعل الحقول المخصصة قياسية في واجهة المستخدم الإدارية

لقد أضفت custom_post_types مختلفة إلى تثبيت Wordpress 3 الخاص بي. تختلف جميعها قليلاً عن بعضها البعض ، ويجب أن تخزن معلومات فريدة في custom_fields. ولكن في حين أن أحدهم قد يخزن product_id ، فإن الآخر لن يفعل ذلك. سيحصل أحدهم على source_url وآخر لن. بدلاً من الاضطرار إلى توجيه محرري إلى أي الحقول المخصصة يجب استخدامها مع أي المنشورات المخصصة ، كيف يمكنني جعل كل منشور مخصص يتضمن حقوله المخصصة كجزء من واجهة المستخدم نفسها؟

إذا قمت بزيارة "daily_cartoon" ، فسيكون لديك شاشة تسأل فقط عن عنوان ، التسمية التوضيحية و الوسائط .
إذا قمت بزيارة "daily_product" ، فسيكون لديك شاشة تسأل فقط عن عنوان ، السعر ، ملخص ، إلخ.

7
Sampson

مرحبًا @ جوناثان سامبسون :

هناك عدة مكونات إضافية لتسهيل أنواع النشر المخصص والبعض الآخر يسمح لك بتحديد الحقول المخصصة أيضًا ، دون أي ترتيب معين:

كما ذكرت أعلاه ، كنت أعمل على واجهة لا توفر واجهة مستخدم مثل هذه بدلاً من ذلك واجهة برمجة تطبيقات قابلة للتوسعة لأنواع الحقول المعقدة (والأنواع البسيطة أيضًا). ولكن بعد قضاء ساعة في محاولة حزمتها ، أدركت أنها غير جاهزة للتوزيع بعد. ربما في غضون بضعة أسابيع.

يجب أن تفي هذه المكونات الإضافية المذكورة أعلاه باحتياجاتك الأساسية في الوقت الحالي وسأحاول جعلها متوافقة مع البيانات المخزنة من قبل كل هذه المكونات في المستقبل في حال قررت استخدام الألغام في المستقبل.

قد تجد هذا المنشور بعض المساعدة أيضًا:

4
MikeSchinkel

يمكنك إضافة صناديق meta_boxes لتخزين بيانات الحقول المخصصة فيها. نظرًا لأن add_meta_box يمكن تعيينها وفقًا post_type ، فسيمكنك ذلك من إضافة meta_box مختلفة لأنواع النشر المختلفة.

انظر إلى هذا المنشور للحصول على مثال كامل عن تغيير نوع المنشور المخصص/تحرير جديد.

5
hannit cohen

لقد احتجت مؤخرًا إلى معالجة مشكلة مشابهة جدًا أثناء العمل ضمن موضوع. أساس الكود كان من هذا المشاركة وكنت قد عدلت بعض الكود

ما يلي هو الجزء الأول من الكود الذي قمت بتعديله.

    add_action('init', 'limited_post_type');
function my_custom_limited_post_type() 
{
  $labels = array(
    'name' => _x('Limited Post Type', 'post type general name'),
    'singular_name' => _x('Film - DVD', 'post type singular name')
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true, 
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','thumbnail','excerpt', 'page-attributes','custom-fields' ),
    'show_in_nav_menus' => true
  ); 
  register_post_type('limited_post_type', $args);
}

ما يلي هو الجزء الثاني من الكود الذي قمت بتعديله.

foreach ( $scope as $scopeItem ) {
       switch ( $scopeItem ) {
           case "post": {
             // Output on any post screen
             if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
             $output = true;
             break;}              
            case "page": {
                  // Output on any page screen
                  if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
            $output = true;
            break;}
             case "limited_post_type": {
                                // Output on limited post_type onlye
            if ((basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" && $post->post_type=="limited_post_type" ) || (basename( $_SERVER['SCRIPT_FILENAME'] )=="post.php" && $post->post_type=="film_dvd" ))
                   $output = true;
                   break;
                  }

إذا أردت ، من فضلك أرسل لي رسالة وسأرسل لك بكل سرور ملف jobs.php للرجوع اليها. هذه بالتأكيد هي الطريقة لتحقيق ذلك بينما مررت بالعديد من الليالي من تساقط الشعر بنفسك.

0
jnolte