mögliches Taxonomie-Problem mit der Gruppe durch Übermittlung über Slack von jimtrue
Rufen Sie alle Veranstaltungen ab, die nach Festivaltyp und dann nach Titel geordnet sind
festival pod ist eine benutzerdefinierte Taxonomie.
Ereignis-Pod ist ein benutzerdefinierter Beitragstyp.
// assume we´ve got 6 events and 2 festivals
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1, 'groupby' => 'festival.name');
$events = pods('event', $params)
// output should be
Event 1 (Festival 1)
Event 3 (Festival 1)
Event 5 (Festival 1)
Event 2 (Festival 2)
Event 4 (Festival 2)
Event 6 (Festival 2)
// ... but is
Event 1 (Festival 1)
Event 2 (Festival 2)
Nach einer Weile des Testens scheint es zu funktionieren, wenn event ein Pod-Beziehungsfeld erhält, das auf die Festival-Taxonomie abzielt. Aber nur ohne groupby.
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
Der Nachteil dabei ist, dass die Festivalbeziehung als Taxonomie nicht mehr über das Quickedit-Formular von WordPress gepflegt werden konnte (ok, extra Plugin könnte es tun)
Ausgabe ist
sollte sein
Wenn Sie nach festival.name gruppieren, wird nur ein Datensatz pro Festival angezeigt.
Klingt so, als ob Sie wirklich nach Jahr ordnen möchten, dann Festivalname, dann Posttitel, oder?
Ich habe dieses aus der Diskussion im Slack #support mitgebracht, wir hatten es mit Taxonomy getestet und es schien die Reihenfolge nach taxonomy.name zu ignorieren. Das ist in erster Linie das, was wir als Problem testen. Ich mache einen lokalen Test, um zu sehen, ob es ein Problem mit orderby
, das sich auf die zugehörige Taxonomie oder die Beziehung zur Taxonomie bezieht, da dies ein Problem wäre.
Ich denke auch, dass group by
wirklich nur für Summenberechnungen und ähnliches verwendet werden sollte, schätze ich, wenn nur eine Zeile pro Gruppe zurückgegeben wird. @sc0ttkclark ist dies eine der Situationen, in denen groupby am besten auch mit den Parametern 'fields' oder 'sql' gepaart wird, um ordnungsgemäße zusammenfassende Berechnungen durchzuführen?
@sc0ttkclark das stimmt. Am Anfang habe ich das Konzept von groupby falsch verstanden, aber es gibt immer noch das Verhalten, das
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
endet wie die in den Bildern gezeigte Ausgabe. Ich habe versucht, dieses Problem mit einer frisch installierten WordPress + Pods-Version zu reproduzieren. Leider hat es funktioniert wie es soll :grins:
@kristonovo Es wurde
@jimtrue im frisch installierten Test-Setup: ja. Bei meinem aktuellen Projekt: nein. Hier muss ich noch ein echtes Pod-Beziehungsfeld zuweisen, um die gewünschte Ausgabe zu erzielen ... gibt es irgendwelche Debug-Schritte, denen ich folgen könnte, um weitere Informationen zu geben?
@kristonovo Das ist ziemlich seltsam. Das bedeutet, dass etwas anderes auf die Art „tritt“. @sc0ttkclark irgendwelche Vorschläge? Sie könnten versuchen, die fehlerhafte Sortierung mit folgendem an die URL angehängt zu betrachten: ?pods_debug_sql_all=1
damit wir die aufgerufenen SQL-Abfragen im Auge behalten und vergleichen können.
Haben Sie andere Plugins auf Ihrer fehlerhaften Version, die die Taxonomie berühren könnten?
@kristonovo was ist in deinem Screenshot der "festival.name"?
@sc0ttkclark das wäre der 2014, 2015
Könnte 'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title'
Betracht ziehen (wenn Sie es 2015 wollen, dann 2014).
Ich werde es bald mit Debug-URL und CAST-Abfrage ausprobieren.
@sc0ttkclark
array('orderby' => 'CAST(festivaljahr.name AS INT(4)) DESC, post_title', 'limit' => -1);
produziert
[You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`' at line 20]
SELECT DISTINCT `t`.* FROM `wp_table_posts` AS `t` LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON `rel_festival`.`object_id` = `t`.`ID` LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON `rel_tt_festival`.`taxonomy` = 'festival' AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id` LEFT JOIN `wp_table_terms` AS `festival` ON `festival`.`term_id` = `rel_tt_festival`.`term_id` WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) ) ORDER BY CAST(`festival`.`name` AS INT(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
Vielleicht ohne INT(4)
und stattdessen DECIMAL(4,0)
@jimtrue
array('orderby' => 'festivaljahr.name, post_title', 'limit' => -1);
mit pods_debug_sql_all=1
1
SELECT
DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`
LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`
LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`
LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`
WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )
ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
2
SELECT
DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`
LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`
LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`
LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`
WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )
ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
3
`SELECT `ID`, `post_name`, `post_parent` FROM `wp_table_posts` WHERE `post_type` = '_pods_field' AND ( `post_name` IN ( 'festival', 'name' ) )`
4
SELECT
DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )
ORDER BY `t`.`name`, `t`.`term_id`
5
SELECT
DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )
ORDER BY `t`.`name`, `t`.`term_id`
6
SELECT
DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`
WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )
ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3
7
SELECT
DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`
WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )
ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3
@sc0ttkclark
kein SQL-Fehler mehr mit DECIMAL(4,0), sondern wieder nach Ereignis geordnet, nicht nach Festival
Inzwischen sind alle Plugins außer Pods deaktiviert. Habe das Problem immer noch :(
Test nur mit festival.name:
$params = array('orderby' => 'festival.name DESC');
Ausgänge
während
$params = array('orderby' => 'festival.name ASC');
Ausgänge
Sind Sie sicher, dass Sie die richtigen Informationen zur Ausgabe angegeben haben? Können Sie das PHP angeben, mit dem Sie den Inhalt auflisten?
Je länger es dauert, eine Lösung zu finden, desto mehr mache ich mir Sorgen, dass es meine eigene Schuld sein könnte :dancer:
<?php
/**
* Template Name: Events
*/
get_header();
?>
<div class="column-1-3">
<h1><a href="/events" target="_self">Events</a><br><br></h1>
<div class="event">
<?php
$params = array('orderby' => 'festival.name');
$events = pods('event')->find($params);
if ($events->data()) {
while ($events->fetch()) {
echo $events->display('festival.name') . ' - ' . $events->display('post_title') . '<br>';
}
}
?>
</div>
</div>
<?php get_sidebar( 'right' ); ?>
<?php get_footer(); ?>
... und das ist die Einstellung im Event-Pod:
Besteht die Möglichkeit, dass Sie uns ein Login zur Verfügung stellen, um in Ihren Pods-Admin-Bereich zu gelangen, um dies für Sie zu überprüfen? Du kannst es privat auf unserem Slack (http://pods.io/chat/) oder über dieses Formular senden: https://pods.io/help/
Ja, ich könnte eine Entwicklungsumgebung vorbereiten. Würde allerdings etwas Zeit brauchen. In der Zwischenzeit habe ich noch etwas getestet:
Parameter immer gleich:
$params = array('orderby' => 'festival.name DESC');
Könnte es möglich sein, dass mehrere Taxonomiebeziehungen die Ordnung stören? Sie werden meines Wissens in der Datenbank gespeichert. Auch wenn ich die Relation entferne.
Im Anschluss daran war es kein Problem mit Pods, sondern ein Problem mit MySQL.
Wenn Sie ORDER BY ein verbundenes Feld ausführten, wurden die Ergebnisse aus irgendeinem Grund nicht richtig sortiert. Wenn Sie 'where' => 'festival.name IS NOT NULL'
hinzugefügt haben, wurde die Bestellung korrekt gestartet.
Ein MySQL-Experte muss weiter graben, um herauszufinden, warum dies passiert und wie wir es in Zukunft abschwächen können.