it-swarm.com.de

Wie füge ich neue Optionstypen zum Optionsbaum hinzu?

Ich verwende den Optionsbaum im Themenmodus und im untergeordneten Themenmodus und versuche, neue Optionstypen hinzuzufügen. Die neuen Optionstypen basieren auf dem Post-Select-Optionstyp, listen jedoch nur Posts einer bestimmten Kategorie auf.

Ich habe eine neue Datei erstellt und sie dem Array der einzubeziehenden Dateien hinzugefügt, das in Zeile 178 der Datei ot-loader.php beginnt. In der neuen Datei habe ich den Post-Select-Optionstyp 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 Post-Select-Optionstyp habe ich dem Funktionsnamen einen eindeutigen Slug angehängt. Ich habe diesen Slug auch in die CSS-Klasse .type-post-select für das Format des äußeren Einstellungswrappers eingefügt. Im Post-Abfrage-Post-Array habe ich einen Kategorie-Parameter hinzugefügt.

Dann fügte ich meinen Themenoptionen meinen neuen Post-Select-Optionstyp hinzu, in der Hoffnung, dass nur Posts 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 eingebunden. Ich habe auch eine reguläre Nachauswahl erstellt, bei der das CSS nicht geändert wurde.

Als Experiment habe ich es satt, den Kategorie-Parameter auf die gleiche Weise zur ursprünglichen Post-Select-Option hinzuzufügen, und es hat genau so funktioniert, wie ich es erwartet hatte - nur Posts 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 das Leben von mir kann ich es nicht finden. Ich habe nach einem anderen Ort gesucht, an dem Optionstypen registriert werden müssen, aber ich konnte ihn nicht finden ...

7
JPollock

Das, was Sie versuchen, kann erreicht werden, ohne jemals die Kerndateien in OptionTree zu bearbeiten. Fügen Sie Ihren Themen functions.php und dem folgenden Code Ihre benutzerdefinierten Optionstypfunktionen 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, gelten zwei Anforderungen. Erstens müssen allen Funktionen ot_type_ vorangestellt werden. Zweitens: Wenn Sie dem Array von Optionen hinzufügen, dass Ihre neuen Array-Schlüssel mit dem Funktionsnamen minus ot_type_ übereinstimmen müssen, können Sie beim Erstellen des Schlüssels entweder - oder _ verwenden. Wenn Sie also eine benutzerdefinierte Funktion mit dem Namen ot_type_super_awesome haben, können Sie diese dem gefilterten Array hinzufügen:

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

oder

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

Ich hoffe, das klärt Verwirrung. Nebenbei bemerkt, in der von Ihnen erstellten Datei befinden sich zwei ot_type_post_select_a_5 und ich gehe davon aus, dass der letzte ot_type_post_select_a_6 sein sollte. Prost!

4
Derek Herman