it-swarm.asia

توفير شروط التصنيف

لدي مشكلة مثيرة للاهتمام ، آمل أن يتمكن أحد من الإجابة عليها بسرعة.

لقد قمت بإنشاء قاعدة التعريف الخاصة بي والتي ، بناءً على "MY METABOX CODE" (القائمة أدناه) ، تعرض بشكلٍ صحيح قائمة منسدلة بكل مصطلحاتي ضمن التصنيف "event_types" الذي قمت بإنشائه.

عندما أواجه مشكلة ، أتمكن من حفظ/تحديث المصطلح المرتبط بالنشرة عندما يتم تحديد مصطلح مختلف من القائمة المنسدلة ويتم تحديث المنشور.

بعد العبث بالعديد من وحدات البت البرمجية ، تمكنت من معرفة أنه من خلال إدخال رقم (أرقام) term_ID [مفصولة بفواصل] في منطقة الصفيف ، أتلقى النتائج التي أبحث عنها يدويًا.

على سبيل المثال ، عند حفظ المنشور ، كانت هناك وظيفة للاتصال بهذا الرمز

wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);

بعد ذلك ، سيتم تحديث منشوري وربطه term_ID 5 & 7 به ، وهو ما ترون أنني أتصفحه. المشكلة هي أنه تم ترميز هذا بشكل ثابت في ملف function.php الخاص بي وليس بناءً على قيمة المنسدلة التي حددها المستخدم (ملاحظة: أنا في الحقيقة أحاول فقط تمرير معرف واحد لكنني فعلت اثنين للاختبار كما هو موضح أدناه).

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

<?php $event_types = wp_get_object_terms($post->ID, 'event_types'); 
foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?>

لذلك ... يبدو أن لدي 85 ٪ من مشكلتي حلها. تبقى 15 ٪ من مشكلتي على النحو التالي:

  1. ما الذي أحتاج إلى إضافته إلى رمز ملف function.php الخاص بي (المدرج أدناه) بحيث أنه عندما أقوم بإنشاء/تحديث منشور ، يتم تمرير VALUE الجديدة المحددة من قائمة تصنيفي المنسدلة إلى الصفيف؟

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

شكرًا جزيلاً يا رفاق مقدمًا - أدناه هو الرمز الذي أستخدمه حاليًا في كل ملف.

الكود في وظيفتي. ملف PHP

function save_event_taxonomy_terms($meta, $post_id) {
        $event_types = wp_get_object_terms($post->ID, 'event_types'); 
        wp_set_post_terms( $post_id, array($names), 'event_types', FALSE);
    }

كود METABOX الخاص بي

<select name='post_event_types' id='post_event-types'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
    <?php 
    $names = wp_get_object_terms($post->ID, 'event_types'); 
    $event_types = get_terms('event_types', 'hide_empty=0'); 
    ?>
    <option class='event_type-option' value='' <?php if (!count($names)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($event_types as $event_type) {
        if (!is_wp_error($names) && !empty($names) && !strcmp($event_type->slug, $names[0]->slug)) 
        echo "<option class='event_type-option' value='" . $event_type->slug . "' selected>" . $event_type->name . "</option>\n"; 
        else
        echo "<option class='event_type-option' value='" . $event_type->slug . "'>" . $event_type->name . "</option>\n"; 
    }
    ?>
</select>
15
NetConstructor.com

كنت أحسب أنني سأنشر الإجابة على هذا بعد أن كان ديماس قادرًا على مساعدتي.

باستخدام فئة WPAlchemey ، أضفت var save_action وهو يشبه هذا (لاحظ أنني أستخدم التصنيف لـ "الفئة" والتي بالطبع يمكنك تغييرها إلى أي تصنيف مخصص قد يكون):

'save_action'   => 'save_taxonomy_terms',

ثم أضف الوظيفة التالية لهذا كالتالي:

function save_taxonomy_terms($meta, $post_id) {
wp_set_post_terms($post_id, array($meta['my_terms']), 'category', FALSE);
}

يشبه رمز metabox الذي يعرض قائمة منسدلة من التصنيفات:

<label>Event Category:</label>
    <?php $terms = get_terms('category', 'hide_empty=0'); ?>
    <?php $mb->the_field('my_terms'); ?>
    <select name="<?php $mb->the_name(); ?>">
    <option value='' <?php if (!count($terms)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($terms as $term): ?>
    <option value="<?php echo $term->term_id; ?>"<?php $mb->the_select_state($term->term_id); ?><?php echo '>' . $term->name; ?></option>
    <?php endforeach; ?>
    </select>
6
NetConstructor.com