it-swarm.asia

عرف نوع بيانات المشاركة في الحاجيات الشريط الجانبي؟

(ملاحظة: كان هذا السؤال في الأصل حول Custom Fields ، لكنMikeSchinkel كان لديه حل أفضل يتضمن أنواع Post Custom)

لدي على موقعي عدة صفحات أريد أن أريها نفس البيانات في الشريط الجانبي. على سبيل المثال ، في بنية مثل هذا:

-Home
-Cars 
 -Volvo 850 overview 
 -Volvo 850 tech spec 
 -Volvo 850 pictures
 -Porsche 911 overview
 -Porsche 911 tech spec
 -Porsche 911 pictures
-Roads 
 -Route 66 overview 
 -Route 66 history 
 -Route 66 pictures
 -Pan-American Highway overview
 -Pan-American Highway history
 -Pan-American Highway pictures

أرغب في أن تعرض جميع صفحات Volvo 850 نفس البيانات في الشريط الجانبي ، وأن تعرض جميع صفحات Porsche مجموعة مختلفة من البيانات (على سبيل المثال ، السرعة ، الشركة المصنعة ، إلخ).

سيكون لصفحات الطريق مجموعة خاصة بها من البيانات لكل طريق. سيكون لدى السيارات والطرق أيضًا قالب الصفحة الخاص ، والطريقة التي أحسبها ستحصل على الشريط الجانبي الأيمن هي شيء من هذا القبيل داخل sidebar.php:

if ( is_page_template('car-profile-template.php') ) :
// show car widgets

إليك مثال على ذلك ، صفحة صور 850 من فولفو. يجب أن يظهر الشريط الجانبي (يسار) نفسه في صفحات Volvo 850 الأخرى ، في حين أن العناصر الموجودة على اليمين هي مجرد محتوى الصفحة.

|  Home   •Cars   Roads                                |
--------------------------------------------------------
|   Overview     |     Volvo 840 Pictures              |
|   Tech Spec    |    (some pics)                      |
|  •Pictures     |                                     |
------------------                                     |
| -Specs-        |                                     |
| Volvo 850      |                                     |
| Speed:150mph   |                                     |
| Maker:Volvo    |                                     |  
| Download PDF   |                                     |
------------------                                     |
| -Rating-       |                                     |
| Style:3        |                                     |
| Safety:5       |                                     |
| Reliablity:4   |                                     |
------------------                                     |

في هذا المثال ، يجب أن تحصل أداة الواجهة الشريطية وهما المواصفات والتصنيف على معلوماتهم من نوع منشورات مخصص. هل هناك طريقة يسهل على المستخدم النهائي تحريرها ، مما يعني أنه سيتعين عليهم إدخال هذه البيانات المخصصة مرة واحدة فقط؟ قد لا يكون من الضروري أن يكون كل حقل من الحقول منفصلًا (أي يمكن إدخال كل المواصفات في حقل محرر ، ويمكن وضع كل التصنيف في حقل المقتطفات .. ربما)

10
cannyboy

تحديث:

استنادًا إلى تحديث السؤال ، أعتقد أنني بحاجة إلى الإشارة صراحة إلى أن ما يتم طرحه في السؤال يمكن أن يتم بالإجابة أدناه ، فقط استخدم الحقول المخصصة في "Car"نوع النشر المخصص لكل عنصر من العناصر تريد عرضها على جميع الصفحات لسيارة معينة.

إذا كنت ترغب في القيام بذلك ، فما عليك سوى أن أقوم بتثبيته في الشريط الجانبي في ملف القالب single-car.php الذي قمت بتضمينه أدناه ، ثم استخدم عبارة if لتحديد المحتوى المراد عرضه لعناوين URL المختلفة. يمكنك بذل جهد لتوسيع نطاق الشريط الجانبي الخاص بك وتطوير عنصر واجهة مستخدم مخصص حيث ستسحب الأداة الذكية معلومات معرّف المنشور الحالي ، لكن لماذا الاثنين معا إذا كنت تبني هذا كموضوع ليستخدمه الآخرون؟

هناك في الواقع مجموعة من الطرق المختلفة لتحقيق ذلك ، لكن الطريقة التي أقترحها يجب أن تتساءل عن احتياجاتك.


مرحبًاcannyboy:

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

نهج بديل؟

... هل يمكن أن shonsider هندسة ذلك بشكل مختلف ؟ أعتقد أنك ستكون أفضل حالًا في إنشاء نوع نشر مخصص من "سيارة"وبعد ذلك يمكنك تخزين كل شيء لكل "صفحة"في نوع منشور سيارة واحد. فيما يلي بعض نماذج عناوين URL:

http://example.com/cars/volvo850/  <-- overview
http://example.com/cars/volvo850/tech-specs/
http://example.com/cars/volvo850/pictures/

التعرف على أنواع المنشورات المخصصة

يمكنك معرفة المزيد حول أنواع المنشورات المخصصة في الإجابات على هذه الأسئلة:

نوع منشور مخصص وقاعدة إعادة كتابة

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

<?php
add_action('init','car_init');
function car_init() {
  register_post_type('car',
    array(
      'label'           => 'Cars',
      'public'          => true,
      'show_ui'         => true,
      'query_var'       => 'car',
      'rewrite'         => array('slug' => 'cars'),
      'hierarchical'    => true,
      //'supports'        => array('title','editor','custom-fields'),
    )
  );
  global $wp,$wp_rewrite;
  $wp->add_query_var('car-page');
  $wp_rewrite->add_rule('cars/([^/]+)/(tech-specs|pictures)','index.php?car=$matches[1]&car-page=$matches[2]', 'top');
  $wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation
}

A سيارة- ملف قالب موضوع محدد

بعد ذلك ، ستحتاج إلى Car- ملف قالب محدد في نسقك ؛ الاسم الافتراضي لهذا سيكون single-car.php. لقد قمت بتشفير قالب بداية بالنسبة لك يعرض كل عناوين URL الثلاثة (the (overview)، 'tech-specs'و 'images') في قالب واحد باستخدام ifstatement لتحديد المحتوى الذي سيتم تقديمه:

<?php get_header(); ?>
<div id="container">
  <div id="content">
  <?php if ( have_posts() ): the_post(); ?>
    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <h1 class="entry-title"><?php the_title(); ?></h1>
    <div class="entry-content">
<?php if(is_car_techspecs()): ?>
  <a href="..">Back</a>
  <h1>Tech Specs</h1>
  The tech specs go here!
  <?php get_post_meta($post->ID,'_car_tech_specs'); ?>
<?php elseif (is_car_pictures()): ?>
  <a href="..">Back</a>
  <h1>Pictures</h1>
  Car Pictures go here!
  <?php get_post_meta($post->ID,'_car_pictures'); ?>
<?php else: ?>
  <ul>
    <h1>Overview</h1>
    <li><a href="tech-specs/">Tech Specs</a></li>
    <li><a href="pictures/">Pictures</a></li>
  </ul>
  <?php the_content(); ?>
<?php endif; ?>
      <?php the_content(); ?>
    </div>
  <?php endif; ?>
  </div>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

لاحظ في المثال أعلاه أنني أبسط من ذلك بكثير مع استخدام get_post_meta()؛ الموقع الحقيقي سوف تحتاج إلى الكثير من التعقيد هناك.

علامات قالب a.k.a. وظائف المساعد

بالطبع ، استخدمت بعض علامات القالب مثل دالات المساعد لتقليل التعقيد في ملف القالب إلى الحد الأدنى في إذا كانتشروط العبارة. وهنا ، يمكنك وضعها في ملف functions.php الخاص بمظهرك أيضًا:

function is_car_techspecs() {
  global $wp_query;
  return is_car_page('tech-specs');
}
function is_car_pictures() {
  global $wp_query;
  return is_car_page('pictures');
}

function is_car_page($page) {
  global $wp_query;
  return (isset($wp_query->query['car-page']) && $wp_query->query['car-page']==$page);
}

لقطات مليئة مخصص الحب نوع آخر

بمجرد أن يكون لديك كل هذا الرمز في مكانك وقمت بإضافة Carpost like Volvo 850يمكنك الحصول عليه للعمل مثل لقطات الشاشة التالية:

نظرة عامة الصفحة

 http://example.com/cars/volvo850/ 
(المصدر: mikeschinkel.com )

المواصفات الفنية الصفحة

http://example.com/cars/volvo850/tech-specs/

صفحة الصور

http://example.com/cars/volvo850/pictures/

14
MikeSchinkel

أعتقد أن شخصًا ما قد أجاب بالفعل على هذا السؤال على السؤال الآخر الذي نشرته (حول الصفحات الرئيسية/الصفحات الوسيطة) ، ولكن إليك ما أعتقد أن أفضل طريقة لهيكلة بياناتك ، بناءً على ما وصفته:

 - Home
 - Volvo 850 (overview)
   - Volvo 850 tech spec
   - Volvo 850 pictures
 - Porsche 911 (overview)
   - Porsche 911 tech spec
   - Porsche 911 pictures

بهذه الطريقة ، يتعين عليك فقط إدخال حقول التعريف مرة واحدة - على الصفحة الرئيسية - وفي الصفحات الفرعية ، يمكنك سحب بيانات التعريف هذه من الأصل:

<?php echo 'Top speed: '.get_post_meta($post->post_parent,'Top Speed',true); ?>

بالطبع ، هناك طريقة أفضل لتنظيم ذلك تتمثل في الحصول على نوع واحد مخصص للنشر لكل طراز من السيارات يخزن جميع معلومات السيارة ، ويعرض الصفحات الفرعية المختلفة بناءً على طلب GET الذي تم تمريره إلى الصفحة ويستخدم في قالب الصفحة كمحول لتحديد أي قالب لعرضه. وبهذه الطريقة ، يمكنك تجنب تكرار البيانات تمامًا ، وتسهيل إضافة المزيد من المعلومات إلى النموذج لاحقًا ...

مزيد من التفاصيل ...

لقد فعلت ذلك عدة طرق مختلفة. في أحد المواقع التي كان لدي فيها وكلاء (ممثلون عن الشركة) كنوع نشر مخصص ، استخدمت منشوراتهم لتخزين جميع البيانات المتعلقة بهذا الشخص ، لكنني لم أعرض هذه الصفحة مطلقًا. بدلاً من ذلك ، كان لدي صفحة "قائمة الوكلاء" وصفحة "سجل أداء الوكلاء" وصفحة "اتصل بهذا الوكيل" ، والتي تم استدعاؤها دائمًا باستخدام متغير GET وعرضت المعلومات من المنشور المناسب. لذا فإن الرابط الثابت سيبدو على شكل site.com/agent-listing/؟agent=john-smith .

في موقع آخر ، قمت بإعداد جميع المعلومات في صفحة واحدة وقمت بإنشاء طرق العرض الثلاثة لتلك الصفحة في قالب الصفحة. في حالتك ، قد يبدو هذا مثل site.com/cars/volvo-850/؟pictures .

وفي قالب الصفحة ، يمكنك تضمين فحص لهذا المتغير بالقرب من أعلى المحتوى:

if ($_GET['pictures']) {

 // template for pictures page

} else if ($_GET['tech-spec']) {

 // template for tech specs page 

} else {

 // overview template

}
1
goldenapples

إذا كنت لا ترغب في إنشاء أنواع منشورات مخصصة ، وترغب ببساطة في تضمين شريط جانبي مخصص لكل صفحة أو منشور ، فيمكنك استخدام المكون الإضافي Graceful Sidebar. يتيح ذلك إنشاء محتوى شريط جانبي مخصص مباشرةً من داخل شاشة تعديل النشر أو الصفحة باستخدام حقول إضافية تسمى العنوان الرشيق والمحتوى الرشيق. ثم يتم عرض هذه في منطقة الشريط الجانبي باعتبارها القطعة عندما يتم عرض هذه المشاركة أو الصفحة على بلوق الخاص بك. يتوفر مزيد من المعلومات حول هذا البرنامج المساعد في http://www.mlynn.org/graceful-sidebar-plugin

0
Michael Lynn