it-swarm.asia

فرز المشاركات وورد عبر قيم حقل مخصص؟

حسنًا ، لذلك أنا أستخدم فئة WPAlchemy لإنشاء لوحات كتابة حقل مخصصة في منشور الكتابة الصفحة ، وحتى الآن كل شيء سار على ما يرام ... ومع ذلك ، هناك مشكلة واحدة لا أستطيع أن أبدو على ما يبدو. أحاول استخدام قيم الحقول المخصصة لـ "تواريخ الأحداث" لفرز الأحداث في قالب صفحة مخصص.

لقد اتبعت الإرشادات "استعلام يستند إلى حقل مخصص وفرز حسب القيمة" الموجود في المخطوطة لمحاولة و قم بإعداد الاستعلام المخصص ، لكن لا يبدو أنه يعمل؟

إليك الرمز من قالب الصفحة المخصص لصفحة " الأحداث ":

<?php
/* 
  Template Name: Events
*/
get_header();
?>
<div id="depthead" class="grid_12">
  <h2>Upcoming Events</h2>
</div><!--/depthead-->
<?php

$querystr = "
  SELECT wposts.* 
  FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
  WHERE wposts.ID = wpostmeta.post_id 
  AND wpostmeta.meta_key = '_events_meta[event_date]' 
  AND wposts.post_type = 'post'

  ORDER BY wpostmeta.meta_value DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);

?>
<?php if ($pageposts): global $post; $cnt=0; foreach ($pageposts as $post): $cnt++; setup_postdata($post); ?>
<div id="article-<?php echo get_the_ID(); ?>" class="listingbox grid_3">
  <div class="deptpostimg">
    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><img src="<?php echo $events_metabox->get_the_value('event_thumbnail'); ?>" style="outline:1px solid #000" alt="<?php the_title_attribute(); ?>" /><span class="event-date"><?php $events_metabox->the_value('event_date'); ?></span></a>
  </div><!--/deptpostimg-->
  <h4 class="listing-titles"><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4>
  <div class="excerpt">
    <?php the_excerpt(); ?>
  </div><!--/excerpt-->
</div><!--/article-<?php echo get_the_ID(); ?>-->
<?php if($cnt % 4 == 0) { ?>
<div class="grid_12 rowseparator">
  <hr />
</div><!--/rowseparator-->
<?php } ?>
<?php endforeach; endif; ?>
</div><!--/wrapper-->
<?php get_footer(); ?>

إنه مثل عدم التقاط مفاتيح الحقول المخصصة ... يقوم الفصل الذي أستخدمه لإنشاء لوحات الكتابة المخصصة هذه بتخزينها جميعًا كصفيف ، ولهذا السبب حاولت الوصول إليها باستخدام: _events_meta[event_date]

ربما هذه هي المشكلة ، لكنني لا أعرف كيفية إصلاحها إذا كانت ...

أيه أفكار؟


EDIT: إليك صورة حتى تتمكن من رؤية كيفية تخزين الحقول المخصصة في قاعدة البيانات. نأمل أن يساعدك ذلك على معرفة السبب في أن _events_meta[event_date] على وجه الأرض لن يعمل في الاستعلام؟

لقطة شاشة لـ PHPMyAdmin مع استعلام إدراج لقاعدة بيانات WordPress http://staticloader.com/phpmyadmin.png

1
Josh

جوش ، ألقِ نظرة على: http://farinspace.com/wpalchemy-metabox-data-storage-modes/ ...

أظن أنني سأقوم بتغيير كيفية تخزين WPAlchemy للقيم افتراضيًا ... جعل وضع EXTRACT افتراضيًا ...

0
farinspace

لقد حصلت أيضًا على مدونة تحتوي على حقول مخصصة بخصوص الحدث. فيما يلي الاستعلام الذي استخدمته بالاشتراك مع دالة query_posts ():

query_posts($query_string . "&meta_key=event_date_end&meta_compare=>=&meta_value=".date('Y-m-d')."&meta_key=event_date_start&orderby=meta_value&order=ASC");

ستحدد جميع المشاركات التي تحتوي على حقل مخصص باسم event_date ، ومقارنتها مع التاريخ الحالي (لتصفية الأحداث القديمة) وترتيبها حسب حقل مخصص آخر يسمى event_start_date. آمل أن يوضح لك exmaple المعقد ، كيف يجب استخدام دالة query_posts () بشكل صحيح.

يبدو الاختيار البسيط الذي يختبر فقط لوجود حقل مخصص كما يلي:

query_posts('meta_key=event_date'); 

ترتيب بسيط حسب حقل مخصص يشبه هذا:

query_posts('meta_key=event_date&orderby=meta_value&order=ASC');

يمكنك مشاهدة العديد من الأمثلة في وصف API للدالة query_posts () .

2
2ndkauboy

مرحبًا @ Josh :

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

global $events_metabox

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

تصحيح باستخدام إزالة تزايدي و print_r()

عندما تواجه مشكلة كهذه ، ابدأ في أخذ القطع إلى أن تحل المشكلة. إذا كنت تحاول معرفة ما إذا كان استعلامك يعمل أم لا ، فاستخدم print_r() لإفراغ القيم التي تم تغليفها في علامات <pre> حتى تتمكن من رؤية ما يحدث ، أي:

<?php
$pageposts = $wpdb->get_results($querystr, OBJECT);
echo '<pre>';
print_r($pageposts);
echo '<pre>';

استخدم أيضًا get_posts() بدلاً من Direct SQL

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

إليك المكالمة get_posts() التي ستحتاج إليها لاستبدال استعلام SQL الثابت (مع بعض المحاذير ):

$pageposts = get_posts('meta_key=_events_meta[event_date]&orderby=meta_value&order=ASC');

أو هذا المعادل يفعل الشيء نفسه بالضبط:

$pageposts = get_posts(array(
  'meta_key' => '_events_meta[event_date]',
  'orderby'  => 'meta_value',
  'order'    => 'ASC',
));

التحذيرات التي ذكرتها هي أن طلب البحث الخاص بك لا يقوم بتصفية المسودات غير المنشورة وغير ذلك ؛ تخميني هو ما يفعله get_posts() في الواقع أكثر مما تريد على أي حال.

مستندات الدستور الغذائي لـ get_posts()

وثائق get_posts() هنا:

ولكن من المثير للاهتمام أن الوثائق الأفضل لوسائط get_posts() موجودة في صفحة query_posts() والتي ربما يمكنك استخدامها أيضًا لاحتياجاتك. أنا أفضل التحكم في get_posts() لكن YMMV .

على أي حال ، query_posts() فعليًا فقط تستدعي get_posts() بحيث تكون الوسيطات متطابقة حقًا:

0
MikeSchinkel