الآن مع أنواع المنشورات المخصصة وبتات المحتوى الأخرى التي لا تحتاج بالضرورة إلى تنظيم زمني حسب التاريخ ، على سبيل المثال: لدى العميل 100 تي شيرت كنوع نشر مخصص "SHIRT" ويريد ضبط ترتيب مظهره .
ما هي الطريقة التي تقترح اتباعها للسماح للمحرر/المشرف على الموقع بترتيبها؟
يمكنك تصفية حول التصنيف
// to filter by category
function restrict_manage_posts() {
global $typenow;
if ( FB_CPT_POST_TYPE_1 == $typenow ) {
$args = array('orderby' => 'count', 'hide_empty' => true);
echo $this->get_taxonomy_html_select(FB_CPT_TAXONOMY_TYPE_1, $args);
}
}
function get_taxonomy_html_select($taxonomy_name, $args) {
$taxonomy = get_taxonomy($taxonomy_name);
$terms = get_terms($taxonomy_name, $args);
$label = __( 'Show all ' . $taxonomy->label, FB_CPT_TEXTDOMAIN );
$html = array();
$html[] = '<select style="min-width:155px;" id="' . $taxonomy_name . '" name="' . $taxonomy_name . '" class="postform">';
$html[] = '<option value="0">' . $label . '</option>';
if ( isset($_GET[$taxonomy_name]) )
$this_term = $_GET[$taxonomy_name];
else
$this_term = '';
foreach($terms as $term) {
$default = ( $this_term == $term->term_id ? ' selected="selected"' : '' );
$value = esc_attr($term->name);
$value = $value . ' (' . (int)$term->count . ')';
$html[] = "\t" . '<option value="' . $term->term_id . '"' . $default . '>' . $value . '</option>';
}
$html[] = '</select>' . "\n";
return implode( "\n", $html );
}
function request($request) {
global $pagenow;
if ( is_admin() && 'edit.php' == $pagenow && isset( $request[FB_CPT_TAXONOMY_TYPE_1] ) && FB_CPT_POST_TYPE_1 == $request[FB_CPT_TAXONOMY_TYPE_1] ) {
$request['taxonomy'] = FB_CPT_TAXONOMY_TYPE_1;
$request['term'] = get_term($request[FB_CPT_TAXONOMY_TYPE_1], FB_CPT_TAXONOMY_TYPE_1)->name;
unset($request['name']);
}
return $request;
}
استخدام هذه السنانير
// to filter custom post type per custom taxonomy
add_action( 'restrict_manage_posts', array( &$this, 'restrict_manage_posts') );
add_action( 'request', array( &$this, 'request' ) );
أود أن ننظر إلى شاشات المسؤول مولد القائمة. نظرًا لأن القائمة ليست سوى نوع منشور مخصص ، فأنا متأكد من إمكانية استخدام بعض هذه الأشياء كمصدر إلهام ..
إذا كان كل ما تريد القيام به هو تعيين موضع لكل "قميص" ، فلماذا لا يقوم المستخدم فقط بترتيب القائمة ، فيمكنك الترتيب حسب القائمة_الترتيب في WP_Query الخاص بك. من المحتمل أن تضطر إلى إنشاء مربع تعريف يحدد خاصية menu_order
للنشر. ثم في WP_Query
الخاص بك:
$shirts = new WP_Query( 'post_type=shirt&orderby=menu_order&order=ASC' );
قد يتشابه هذا مع الطريقة التي تطلب بها الصور في علامة التبويب Media Upload
Gallery ، لتعيين ترتيب قائمة الصفحة.
أم أنا سوء فهم شيء؟
ما أفضل القيام به إذا كنت أقوم بإنشاء نوع المنشور في مكون إضافي أو في الكود هو إضافة هذا الرمز أيضًا ، والذي يسمح لك بتعيين ترتيب افتراضي للواجهة الأمامية والخلفية وكذلك تعيين متغير GET في المشرف حتى أن مشرف WordPress يتعرف على التغيير ويضع السهم لأعلى إذا كنت تقوم بالفرز حسب العنوان أو التاريخ أو أي شيء آخر تعرضه في جدول المسؤول.
add_filter( 'pre_get_posts' , 'my_cpt_order' ); // Runs before the posts are fetched
function my_cpt_order( $query ) {
// Check query and alter only the query needed
//echo '<PRE>'; print_r($query); echo '</PRE>';
if ($query->query['post_type'] == 'cpt' && !isset($query->query['orderby'])) {
$query->set( 'orderby' , 'title' );
$query->set( 'order' , 'asc' );
//get the arrow to show up over title in admin
if (is_admin()) {
$_GET['orderby'] = 'title';
$_GET['order'] = 'asc';
}
} //if
} //my_cpt_order
نظرًا لأن menu_order هو الإعداد الافتراضي ، فلن تكون هناك حاجة إلى ذلك إذا كنت تقوم بتصنيف نوع منشور مخصص حسب menu_order ، ولكن إذا كان نوعًا من النشرات لا تريد أن يقلق المستخدم بشأن فرز نفسه وتريد استخدام شيء مثل العنوان إنه مفيد للغاية.
من أجل الحصول على ترتيب فرز اعتباطي حقيقي (لا علاقة له بأي حقل نشر) ، ستحتاج إلى إنشاء حقل "قيمة الفرز" (أو "الوزن") وإدخال قيمة رقمية لكل عنصر في هذا الحقل. يمكنك بعد ذلك الفرز في هذا المجال.