Wie füge ich dem Optionsbaum neue Optionstypen hinzu?


7

Ich verwende den Optionsbaum im Themenmodus und im untergeordneten Themenmodus und versuche, neue Optionstypen hinzuzufügen. Die neuen Optionstypen basieren auf dem Optionstyp "Nachauswahl", listen jedoch nur Beiträge aus einer bestimmten Kategorie auf.

Ich habe eine neue Datei erstellt und sie dem Array der einzuschließenden Dateien hinzugefügt, das in Zeile 178 von ot-loader.php beginnt. In der neuen Datei habe ich den Optionstyp nach der Auswahl ausgeschnitten und eingefügt, der in Zeile 905 von /includes/ot-functions-options-type.php beginnt. Sie können diese neue Datei hier sehen .

In meinem Optionstyp für die Postauswahl habe ich dem Funktionsnamen einen eindeutigen Slug angehängt. Ich habe diesen Slug auch in die CSS-Klasse .type-post-select für den Wrapper für die äußere Einstellung des Formats eingefügt. Im Post-Query-Post-Array habe ich einen Kategorie-Parameter hinzugefügt.

Dann habe ich meinen neuen Optionsoptionstyp zu meinen Themenoptionen hinzugefügt, in der Hoffnung, dass nur Beiträge in der von mir festgelegten Kategorie angezeigt werden. Es wurden die Beiträge aus allen Kategorien angezeigt. Interessanterweise wurde die Option in .type-post-select eingeschlossen. Ich habe auch eine reguläre Nachauswahl erstellt, die das geänderte CSS nicht hatte.

Als Experiment habe ich es satt, den Kategorieparameter auf die gleiche Weise zur ursprünglichen Option für die Nachauswahl hinzuzufügen, und es hat genau so funktioniert, wie ich es erwartet hatte - nur Beiträge aus dieser Kategorie wurden angezeigt. Leider muss ich 6 neue Post-Selects erstellen, die jeweils Posts aus einer anderen Kategorie anzeigen.

Klar, ich vermisse einen Schritt, aber für mein Leben kann ich ihn nicht finden. Ich habe nach einem anderen Ort gesucht, an dem Optionstypen registriert werden müssen oder so, konnte ihn aber nicht finden ...

Antworten:


4

Was Sie versuchen, können Sie erreichen, ohne jemals die Kerndateien in OptionTree zu bearbeiten. Fügen Sie Ihren Themen functions.phpund dem folgenden Code auch Funktionen für benutzerdefinierte Optionstypen hinzu .

/**
 * Filter to add custom option types.
 *
 * @param     array     An array of option types.
 * @return    array
 */
function add_custom_option_types( $types ) {

  $types['post_select_a_1'] = 'Post Select option type. (_a_1)';
  $types['post_select_a_2'] = 'Post Select option type. (_a_2)';
  $types['post_select_a_3'] = 'Post Select option type. (_a_3)';
  $types['post_select_a_4'] = 'Post Select option type. (_a_4)';
  $types['post_select_a_5'] = 'Post Select option type. (_a_5)';
  $types['post_select_a_6'] = 'Post Select option type. (_a_6)';

  return $types;

}
add_filter( 'ot_option_types_array', 'add_custom_option_types' );

Dadurch werden Ihre Funktionen automatisch in OptionTree geladen und Sie müssen keine der Kerndateien bearbeiten. Wenn Sie neue Optionen hinzufügen, gibt es zwei Anforderungen. Erstens müssen alle Funktionen vorangestellt werden ot_type_. Zweitens: Wenn Sie dem Array von Optionen hinzufügen, dass Ihre neuen Array-Schlüssel mit dem Funktionsnamen minus übereinstimmen müssen ot_type_, können Sie entweder -oder _beim Erstellen des Schlüssels verwenden. Wenn Sie also eine benutzerdefinierte Funktion mit dem Namen haben, können ot_type_super_awesomeSie sie dem gefilterten Array mit folgenden Elementen hinzufügen:

$types['super_awesome'] = 'Super Awesome';

oder

$types['super-awesome'] = 'Super Awesome';

Ich hoffe, das klärt Verwirrung. Nebenbei bemerkt, es gibt zwei ot_type_post_select_a_5in der Datei, die Sie erstellt haben, und ich gehe davon aus, dass die letzte sein sollte ot_type_post_select_a_6. Prost!


Derek, vielen Dank für die Antwort. Ich habe den von Ihnen vorgeschlagenen Code zusammen mit einem Include für die Funktionsdatei my ot_type (die mit Ausnahme des einen korrigierten Fehlers identisch ist) zu functions.php hinzugefügt. Leider hat sich nichts geändert :(
JPollock
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.