كنت أحاول إعداد طريقة لكتابة المشاركات في سلسلة على موقعي. والفكرة هي أن كل منشور يمكن أن ينتمي إلى سلسلة مختلفة في تصنيف مخصص. لقد حصلت على كل شيء تم إعداده بالطريقة التي أريدها ... مع استثناء واحد.
هذا الجزء يعمل. لقد أسقطت الكود التالي في مكون إضافي:
function jdm_build_series_taxonomy() {
$labels = array(
'name' => _x('Series Labels', 'taxonomy general name'),
'singular_name' => _x('Series Label', 'taxonomy singular name'),
'search_items' => __('Search Series Labels'),
'popular_items' => __('Popular Series Labels'),
'all_items' => __('All Series Labels'),
'parent_item' => __('Parent Series Label'),
'parent_item_colon' => __('Parent Series Label:'),
'edit_item' => __('Edit Series Label'),
'update_item' => __('Update Series Label'),
'add_new_item' => __('Add New Series Label'),
'new_item_name' => __('New Series Label Name')
);
register_taxonomy(
'series',
'post',
array(
'hierarchical' => true,
'label' => __('Series'),
'labels' => $labels,
'query_var' => true,
'rewrite' => true
)
);
}
add_action( 'init', 'jdm_build_series_taxonomy', 0 );
هذا يضيف "تسميات السلسلة" إلى القائمة المنسدلة "النشرات" ويعطيني مربع "تسميات السلسلة" على شاشة تعديل النشر. كل شيء يعمل ، وأستطيع وضع علامة على المشاركات كجزء من سلسلة بشكل مثالي. تكمن المشكلة في القسم التالي ...
هدفي هو السماح للقراء بالتجول في سلسلة منشورات واحدة في كل مرة ، بدءًا من أقدم مشاركة والتقدم للأمام زمنياً. هذا يختلف عن صفحة الأرشيف النموذجية ، لأن لدي 10 مشاركات لكل صفحة لأرشيفاتي ، لكن من الواضح أنني أريد منشور واحد فقط لكل صفحة لأرشيف السلسلة الخاص بي.
لقد قمت بإنشاء ملف taxonomy-series.php
داخل القالب الخاص بي. و نصف الأشغال. ستعمل الصفحة الأولى بشكل جيد - http://localhost/wp/series/my-test-series/
تعرض المقالة الأولى في السلسلة مع رابط "الإدخال التالي" في أسفل الصفحة. حتى الان جيدة جدا ...
ولكن عندما تنقر على "الإدخال التالي" "وانتقل إلى الصفحة التالية (http://localhost/wp/series/my-test-series/page/2/
) فهي أ) المقالة الخطأ و ب) القالب الخطأ!
ومع ذلك ، إذا قمت بتعيين "تظهر صفحات المدونة على الأكثر:" إلى "1" في صفحة القراءة (عادةً ما تكون إلى 10) فإن الأشياء تعمل بشكل جيد. تعرض الصفحة 2 المقالة الثانية ، بينما تعرض الصفحة 3 المقالة الثالثة ، إلخ.
لذلك ... ما الذي أحتاجه للتحقق من ضعف لإجبار صفحة أرشيف التصنيف لعرض منشور واحد فقط في كل صفحة؟ لقد جربت ما يلي:
$new_query = wp_parse_args(
$query_string,
array(
'posts_per_page' => 1,
'paged' => $paged
)
);
query_posts($new_query);
و
query_posts($query_string.'&posts_per_page=1&paged='.$paged);
ولكن دون جدوى ... الأفكار؟ نصائح؟ اقتراحات؟
مرحبًا @ إيمان :
أنا في أي وقت أحتاج إلى القيام بشيء مبدع باستخدام عناوين URL في WordPress لأن نظام URL في رأيي هو الجانب الأكثر استحسانًا من WordPress. أشعر دائمًا بأنني مضطر إلى محاربة WordPress للحصول عليه لأفعل ما أريد ، وأن WordPress يناضل بشدة فيما يتعلق بعناوين URL. لذلك مع هذا الافتتاحية ...
بالتفكير في مشكلتك ، سأقدم اقتراحًا ليس بالضبط ما طلبته. إذا لم تجد أن ما تبحث عنه على ما يرام ، فقط يرجى عدم التصويت لأي شخص لأنني فقط أحاول المساعدة.
واحدة من المشاكل مع ما تحاول القيام به هي نظام التصنيف لا يوجد طلب زيادة واحد و لا يحتوي على ملف تعريف . على سبيل المثال ، في سلسلة منشورات 3 ، قد تجد مصطلحات مع ID
s لـ 373
و 411
و 492
؛ يمكنك معرفة ذلك 373 = #1
و 411 = #2
و 492 = #3
ولكن هذا كله حدث بالنسبة إلى بعضهما البعض. إنه مثل محاولة تحديد موقع جذر موقع WordPress الخاص بك في رمز البرنامج المساعد ولكنك لا تعرف عدد المستويات التي سيتم تخزين الشفرة فيها. بالطبع يمكنك كتابة التعليمات البرمجية لتحديد كل شيء وتعيينها ولكن هذا أمر صعب ولست متأكدًا من أنك ستحصل على قيمة كبيرة من محاولة اكتشافها بدلاً من استخدام طريقة مختلفة.
لذا فإن أول ما أود أن أقترحه هو you تعيين صراحة your أرقام الصفحات لكل مشاركة في سلسلتك باستخدام حقول النشر التعريفية/المخصصة (اخترت المصطلح installment
بدلاً من ذلك) لـ page
لأنه كان أكثر منطقية بالنسبة لي ولكن من الواضح أنه يمكنك استخدام أي مصطلح يناسب حالة الاستخدام الخاصة بك.)
إن تعيين أرقام الصفحة/الدفعة له فائدة لك في التحكم الكامل ، وبهذه الطريقة ستعرف ما الذي يجب إصلاحه عندما يخرج شيء ما ، وإذا كنت تريد إعادة الترتيب ، فيمكنك القيام بذلك فقط عن طريق تغيير الأرقام. أفترض أنك ستحصل على تحرير metabox لاسم حقل مخصص _installment
لاختيار أرقام القسط (ويمكنه أيضًا إدارة/دمج أرقام الأقساط عبر AJAX _ إذا كنت تريد أن تصبح مبدعًا حتى لا تكون أبدًا لديك صفحات خارج المزامنة.)
$wp_rewrite->add_rule()
لتعيين عنوان URL الخاص بك بشكل صريحلن أذهب إلى العمق لأنني أعلم أنك غاضب من WordPress skilz عمومًا ، لذلك سأشير فقط إلى أن $wp_rewrite->add_rule()
_ هي مهمة الحصول على كل هذا للعمل. كل شيء آخر هو مجرد توفير الدعم حول نتيجة هذه الوظيفة. استخدم الخطاف init
لتعيين قاعدة عنوان URL الخاص بك:
<?php
add_action('init', 'add_series_installment_url');
function add_series_installment_url() {
global $wp,$wp_rewrite;
$wp->add_query_var('series');
$wp->add_query_var('installment');
$wp_rewrite->add_rule('series/([^/]+)/(installment-\d+)','index.php?series=$matches[1]&installment=$matches[2]','top');
$wp_rewrite->flush_rules(false); // This should really be done in a plugin activation
}
parse_query
لترجمة عنوان URL إلى Vars Varsيستخدم النصف الثاني من هذا الحل ربط parse_query
الذي أعرفه جيدًا. بشكل عام ، نلتقط الرمز query_vars
المعرَّف في init
ويتم التقاطه عبر قاعدة عنوان URL ونحولها إلى ما نحتاج إليه للاستعلام عن منشورات WordPress بواسطة taxonomy
+ term
معالجة series
و meta_key
معالجة meta_value
_ والتعامل مع الدفعة/التعيينات المحددة بوضوح:
<?php
add_action('parse_query', 'apply_series_installment_to_query');
function apply_series_installment_to_query(&$query) {
if (isset($query->query['series']) && isset($query->query['installment']) &&
preg_match('#^installment-(\d+)$#',$query->query['installment'],$match)) {
$query->query_vars['post_type'] = 'post';
$query->query_vars['taxonomy'] = 'series';
$query->query_vars['term'] = $query->query['series'];
$query->query_vars['meta_key'] = '_installment';
$query->query_vars['meta_value'] = $match[1];
unset($query->query_vars['series']); // You don't need this
unset($query->query_vars['installment']); // or this
unset($query->query_vars['name']); // or this
}
}
عادةً ما كنت أعمق في شرح الإجابة ، ولكن بعد فوات الأوان ، لم أستطع النوم كثيراً خلال الـ 48 ساعة الماضية ، والأهم من ذلك أنني أعلم أنه يمكنك معرفة ذلك ، ربما كنت بحاجة فقط إلى شيء واحد ذكرته هنا .
لذلك آمل أن تكونوا مثل هذا الحل. حتى إذا لم تقم بجزئين "init
" و "parse_query
" و "$wp_rewrite->add_rule()
" و "$query->query_vars[]
" على التوالي ، فهي ما تحتاجه حتى إذا كنت ترغب في التمسك بالبنية الأصلية. حظا سعيدا ونتطلع إلى رؤيته عندما تفعل ذلك وعلى الإنترنت!
على أي حال ، آمل أن يساعد هذا.
إليك الرمز الذي أستخدمه لتعديل عدد المنشورات في صفحات الأرشيف للفئات والعلامات:
query_posts( array_merge( array(
'posts_per_page' => 1
), $wp_query->query ) );
إذا لم تتمكن من التعامل مع التصنيف المخصص ، فحاول استخدام أصلي (فئات ، علامات) للتحقق مما إذا كانت المشكلة تتعلق بالكود نفسه ، أو مع التصنيف أو أي شيء آخر بالكامل.
كما أنني لست متأكدًا مما إذا كنت قد فاتتك هذا أم لم تستبعد ، لكن $ paged ليس متغيرًا عموميًا. يجب جلبه كـ get_query_var ('paged')
بمجرد أن واجهت مشكلة في هذا الأمر ، مررت بأوقات عصيبة على مدار الساعة بسحب الشعر. أنا googled ولم أجد أي حل محدد حول الموضوعات. لقد وجدت مقالا للعديد من المواهب لكنها لم تكن ترضي مشاكلي. في الواقع يعتمد ترقيم الصفحات بصفحة أرشيف التصنيف المخصص على بعض إعدادات وسيطات الدالات ذات الصلة. لذلك أنا هنا في الواقع أشارك أفكاري في حل مشكلة ترقيم الصفحات في أرشيف التصنيف.
خمسة أشياء تحتاجها لترتيب صفحات الصفحات في تصنيف مخصص يعمل تمامًا:
(1) لا تضع مفتاح المعلمة exclude_from_search
كمعلمة وسيطة register_post_type
أو قم بتعيينها 'exclude_from_search' => false
. بشكل افتراضي ، يتم تعيين false
.
(2) التصنيف الذي سيتم استخدامه مع تعيين نوع المنشور المخصص 'taxonomies' => 'custom_taxonomy_name'
كمعلمة وسيطة register_post_type
أو استخدام register_taxonomy_for_object_type()
مباشرة. لا تزال هناك حاجة إلى تسجيل التصنيفات المخصصة مع register_taxonomy()
.
(3) أثناء الاستعلام داخل new WP_Query ($args)
i) إذا لم يتم تعيينه في المشرف static front page
، استخدم قبل new WP_Query($args)
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
واستخدم $query = new WP_Query( array( 'paged' => $paged ) );
ii) إذا تم تعيينه في الصفحة الأولى من صفحة static static الثابتة قبل "WP_Query الجديدة ($ args)":
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
واستخدم $query = new WP_Query( array( 'page' => $paged ) );
تذكر استخدام المعلمة posts_per_page
و paged
في صفيف الوسيطة new WP_Query($arg)
.
إذا لم يتم تعيين الصفحة الأمامية الثابتة ، فعليك استخدام المعلمة page
في صفيف وسيطة new WP_Query ($arg)
.
(4) استخدم وظيفة Wordpress paginate_links( $args )
مثل المثال أدناه لتقديم ترقيم الصفحات في ملف قالب الأرشيف.
<?php $big = 999999999; // need an unlikely integer
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%', or '/paged=%#%', // if using pretty permalink
'current' => max( 1, get_query_var('paged') ),
'total' => $query->max_num_pages ) ); // Here $max_num_pages is the properties of new WP_Query() object . It is total number of pages. Is the result of $found_posts / $posts_per_page
?>
(5) تقوم دالة paginate_links()
بإخراج قائمة ul li
مع فئة page-numbers
. إذا كنت تستخدم bootstrap inject pagination
class إلى ul
بمساعدة javascript أو jquery وسوف يتم إخراج ترقيم الصفحات الجميل.
آمل أن تتمكن الآن من الاستمتاع بصفحة ترقيم الصفحات في قالب أرشيف التصنيف دون أي مشكلة 404 :-)