it-swarm.asia

هل تريد إضافة فئات منشورات للتصنيفات المخصصة إلى نوع المنشور المخصص؟

لقد فوجئت عندما علمت أنه لا يتم إضافة تصنيفات مخصصة كصفقات أساسية أو منشورات مثل الفئات والعلامات.

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

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

function wpprogrammer_post_name_in_body_class( $classes ){
 if( is_singular() )
 {
  global $post;
  array_Push( $classes, "{$post->post_type}-{$post->post_name}" );
 }
 return $classes;
}

add_filter( 'body_class', 'wpprogrammer_post_name_in_body_class' );

أكثر فظاظة ، فكرت في استخدام دالة the_terms لإنشاء فصولي الخاصة بالمشاركات المخصصة ، شيء مثل هذا:

<div class="<?php the_terms( $post->ID, 'taxonomy', '', ' ', '' ); ?>"></div>

ولكن بعد ذلك ، يجب علي تصفية HTML الذي ينشئه the_term.

هل أفتقد أي شيء واضح هنا ، هل هناك طريقة أبسط لحل هذه المشكلة؟

4
JLeuze

لقد وجدت مقتطفًا من الكود بإذن من mfields الذي حل هذه المشكلة بالنسبة لي ، وإليك ما انتهيت إليه باستخدام:

<?php   // Add custom taxonomies to the post class

    add_filter( 'post_class', 'custom_taxonomy_post_class', 10, 3 );

    if( !function_exists( 'custom_taxonomy_post_class' ) ) {

        function custom_taxonomy_post_class( $classes, $class, $ID ) {

            $taxonomy = 'listing-category';

            $terms = get_the_terms( (int) $ID, $taxonomy );

            if( !empty( $terms ) ) {

                foreach( (array) $terms as $order => $term ) {

                    if( !in_array( $term->slug, $classes ) ) {

                        $classes[] = $term->slug;

                    }

                }

            }

            return $classes;

        }

    }  ?>
7
JLeuze

تحديث: اعتبارا من WordPress 4.2-alpha-31271 (23 يناير 2015) ، تتم الآن إضافة فئات CSS لشروط التصنيف المخصصة تلقائيًا بواسطة WordPress core عند استخدام get_post_class().

لم يعد مقتطف الشفرة التالي ضروريًا.


فيما يلي وظيفة أداة جيدة من شأنها إضافة جميع مصطلحات التصنيف العامة المسجلةإلى post_class() للاستخدام كأدوات ربط CSS في السمات:

/**
* Add Custom Taxonomy Terms To The Post Class
*/

add_filter( 'post_class', 'wpse_2266_custom_taxonomy_post_class', 10, 3 );

if ( ! function_exists('wpse_2266_custom_taxonomy_post_class') ) {
    function wpse_2266_custom_taxonomy_post_class($classes, $class, $ID) {

        $taxonomies_args = array(
            'public' => true,
            '_builtin' => false,
        );

        $taxonomies = get_taxonomies( $taxonomies_args, 'names', 'and' );

        $terms = get_the_terms( (int) $ID, (array) $taxonomies );

        if ( ! empty( $terms ) ) {
            foreach ( (array) $terms as $order => $term ) {
                if ( ! in_array( $term->slug, $classes ) ) {
                    $classes[] = $term->slug;
                }
            }
        }

        $classes[] = 'clearfix';

        return $classes;
    }
}

(الإلهام والائتمان من إجابة جان فابري السابقة.

ضع الكود أعلاه في ملف functions.php الخاص بالموضوع. ثم ، كلما تم استخدام post_class() في قالب:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

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

<article id="post-247" class="post-247 post-type ... status-publish hentry clearfix">

يعمل بسهولة مع أنواع الوظائف المخصصة والتصنيفات.

3
rjb

لدي تحسن في إجابة @ rjb (ليس لدي سمعة كافية للتعليق ، آسف). كنت أحصل على خطأ "تحويل الصفيف إلى سلاسل" مع تشغيل وضع التصحيح ، لذلك قمت بإجراء حلقة بحث عن التصنيفات التي تم إرجاعها والآن لا يوجد أي خطأ.

أمل أن هذا يساعد شخصاما!

add_filter( 'post_class', 'custom_taxonomy_post_class', 10, 3 );

function custom_taxonomy_post_class($classes, $class, $ID) {

    $taxonomies_args = array(
        'public' => true,
        '_builtin' => false,
    );

    $taxonomies = get_taxonomies( $taxonomies_args, 'names', 'and' );

    foreach ($taxonomies as $taxonomy) {

    $terms = get_the_terms( (int) $ID, $taxonomy );

    if ( ! empty( $terms ) ) {
        foreach ( (array) $terms as $order => $term ) {
            if ( ! in_array( $term->slug, $classes ) ) {
                $classes[] = $term->slug;
            }
        }
    }


}

    $classes[] = 'clearfix';

    return $classes;
}
1
bhammie85

بدلاً من the_terms ، يمكنك استخدام get_the_terms ، والتي ستُرجع مصطلح التصنيف الكائنات . يحتوي الدستور على وثائق لإصدار العلامة فقط ، get_the_tags .

من شأنها أن تعطيك شيئا مثل هذا:

function wpprogrammer_custom_taxonomy_in_body_class( $classes ){
  if( is_singular() )
  {
    $custom_terms = get_the_terms(0, 'my_custom_taxonomy');
    if ($custom_terms) {
      foreach ($custom_terms as $custom_term) {
        $classes[] = 'custom_tag_' . $custom_term->slug;
      }
    }
  }
  return $classes;
}

add_filter( 'body_class', 'wpprogrammer_custom_taxonomy_in_body_class' );
1
Jan Fabry

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

في شكل تصنيف جديد هو خيار يسمى الطبقة بوست. مما يسمح بإضافة فئة | علامة- {slug} و {slug} - {tax_value_slug} إلى فئة النشر.

قم بتنزيل هنا https://github.com/Pravdomil/wp-custom-post-types-man/archive/master.Zip

0
pravdomil