• Hallo,

    ich arbeite daran, ein Plugin für WordPress zu erstellen. Dabei bin ich immer wieder auf das Problem gestoßen, dass einige meiner Post-Typen eigene Metaboxen für die Kategorisierung erhalten haben. Allerdings werden die Standard-Metaboxen weiterhin angezeigt. Nun habe ich das Problem, dass die Auswahl der Kategorie zweimal vorhanden ist, was unnötig ist.

    Daher habe ich begonnen, nach einer Lösung zu suchen, um die Standard-Metabox zu entfernen, komme aber einfach nicht weiter.

       public function register_taxonomy(){
    $args = array(
    'labels' => $this->taxLabel,
    'public' => true,
    'hierarchical' => true,
    'show_ui' => false,
    'show_in_rest' => true,
    );
    register_taxonomy($this->typeTax, $this->slug, $args); $location_args = array(
    'labels' => $this->locationLabel,
    'public' => true,
    'hierarchical' => true,
    'show_ui' => false,
    'show_in_rest' => true,
    );
    register_taxonomy($this->locationTax, $this->slug, $location_args);
    }


    Wenn ich im Script 'show_ui' => false anwende, erreiche ich zwar mein Ziel, in der Post-Erstellung nur noch meine eigene Metabox zu haben, allerdings bin ich dann nicht mehr berechtigt, in WordPress die Kategorien zu bearbeiten.

     add_action('add_meta_boxes', array($this, 'remove_default_category_metabox'), 11);




    public function remove_default_category_metabox(){
    // Die Standard-Metabox für die Kategorie-Taxonomie entfernen
    remove_meta_box('categorydiv', $this->slug, 'side'); // Für Standard-Kategorien
    remove_meta_box('tagsdiv-news_category', $this->slug, 'side'); // Für nicht-hierarchische benutzerdefinierte Taxonomien
    remove_meta_box('news_categorydiv', $this->slug, 'side'); // Für hierarchische benutzerdefinierte Taxonomien
    }

    Das add_action habe ich aufgerufen, nachdem meine Taxonomie registriert wurde. Das remove_default_category_metabox habe ich schon ein paar Mal im Netz gefunden, macht aber einfach gar nichts.

    Vielleicht kann mir jemand von euch helfen. Ich hoffe, ihr versteht mein Problem und was ich erreichen möchte.

    Ich bedanke mich im Voraus.

Ansicht von 10 Antworten – 1 bis 10 (von insgesamt 10)
  • Ist das ein Übertragungsfehler oder gewollt, dass du zweimal register_taxonomy() verwendest? Das könnte erklären, wieso du zwei Eingabefelder für die Taxonomy hast.

    Da wir hier vor allem Anwendungssupport anbieten, wäre deine Frage zur Programmierung in WordPress Stackexchange besser aufgehoben.

    Thread-Starter mikonoru

    (@mikonoru)

    Es sind Tatsächlich Zwei Kategorie-Bereiche die ich Hinzufüge. Einmal ein Typ und einmal eine Location.


    zum wo es besser aufgehoben wäre:

    kann ich das hier verschieben? oder ist das eine Komplett eigene Seite? 😀

    • Diese Antwort wurde geändert vor 1 Monat, 3 Wochen von mikonoru.

    Hallo @mikonoru
    schau da mal bitte rein: Das kann nicht verschoben werden und hat hier mit dem wordpress.org-Bereich nichts zu tun.
    Das musst du dann da noch mal neu reinschreiben.

    Viele Grüße
    Hans-Gerd

    Nun habe ich das Problem, dass die Auswahl der Kategorie zweimal vorhanden ist, was unnötig ist.

    Zwei Taxonomie-Arten, zwei Eingabefelder – oder verstehe ich da etwas falsch?

    Thread-Starter mikonoru

    (@mikonoru)

    „Öffnungszeiten Typen“ sowie „Standorte“ ist der automatisch erstelle von WordPress wenn man Kategorien Registriert

    das „Standort und Typ auswählen“ ist meine eigene Metabox wo beides als Dropdown ausgewählt werden kann.

    die ersten beiden die Standard mäßig erzeugt werden sind überflüssig und nicht notwendig.

    • Diese Antwort wurde geändert vor 1 Monat, 3 Wochen von mikonoru.
    Thread-Starter mikonoru

    (@mikonoru)

    Also ich würde ja n Bild Hochladen, aber es funktioniert leider nicht. 🙂

    Wie lautet denn der Code zum Registrieren des Custom Post Type?

    Mit unvollständigem Einblick in den Code ist es immer schwierig, eine Aussage zu treffen.

    Thread-Starter mikonoru

    (@mikonoru)

    Thread-Starter mikonoru

    (@mikonoru)

    @pixolin

    <?php
    // Beenden, wenn direkt aufgerufen
    if (!defined('ABSPATH')) {
    die(-1); // Exit if accessed directly.
    }

    class OpeningHoursPostType
    {
    /**
    * @var string $slug Der Slug für den benutzerdefinierten Post-Typ
    */
    private $slug = 'opening_hours';

    /**
    * @var string $typeTax Der Slug für die Taxonomie "Typ"
    */
    private $typeTax = OPENING_TYPE;

    /**
    * @var string $locationTax Der Slug für die Taxonomie "Standort"
    */
    private $locationTax = 'location';

    /**
    * @var array $postTypeLabel Die Labels für den benutzerdefinierten Post-Typ
    */
    private $postTypeLabel;

    /**
    * @var array $taxLabel Die Labels für die Taxonomie "Typ"
    */
    private $taxLabel;

    /**
    * @var array $locationLabel Die Labels für die Taxonomie "Standort"
    */
    private $locationLabel;

    /**
    * Singleton-Instanz
    * @var self
    */
    protected static $instance;

    /**
    * Stellt sicher, dass nur eine Instanz der Klasse existiert (Singleton-Pattern)
    *
    * @return self
    */
    public static function instance()
    {
    if (!self::$instance) {
    self::$instance = new self;
    }
    return self::$instance;
    }

    /**
    * Konstruktor
    * Initialisiert die Slugs und Labels für den Post-Typ und die Taxonomien
    */
    public function __construct()
    {
    $this->postTypeLabel = array(
    'name' => __('Öffnungszeiten', 'plugin'),
    'singular_name' => __('Öffnungszeit', 'plugin'),
    'edit_item' => __('Öffnungszeit bearbeiten', 'plugin')
    );
    $this->taxLabel = array(
    'name' => __('Öffnungszeiten Typen', 'plugin'),
    'singular_name' => __('Öffnungszeiten Typ', 'plugin')
    );
    $this->locationLabel = array(
    'name' => __('Standorte', 'plugin'),
    'singular_name' => __('Standort', 'plugin')
    );
    }

    /**
    * Registriert den benutzerdefinierten Post-Typ
    */
    public function register_posttype()
    {
    $args = array(
    'labels' => $this->postTypeLabel,
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => false,
    'show_in_rest' => true, // Sichtbar in der REST API
    'publicly_queryable' => true,
    'menu_icon' => 'dashicons-clock',
    'supports' => array('title', 'editor', 'author', 'excerpt'),
    );
    register_post_type($this->slug, $args);
    }



    /**
    * Registriert die benutzerdefinierten Taxonomien
    */
    public function register_taxonomy()
    {
    $args = array(
    'labels' => $this->taxLabel,
    'public' => true,
    'hierarchical' => true,
    // 'show_ui' => false,
    'show_in_rest' => true,
    );
    register_taxonomy($this->typeTax, $this->slug, $args);

    $location_args = array(
    'labels' => $this->locationLabel,
    'public' => true,
    'hierarchical' => true,
    // 'show_ui' => false,
    'show_in_rest' => true,
    );
    register_taxonomy($this->locationTax, $this->slug, $location_args);
    }

    /**
    * Fügt die Aktionen zum Registrieren des Post-Typs und der Taxonomien hinzu
    */
    public function register()
    {
    add_action('init', array($this, 'register_posttype'));
    add_action('init', array($this, 'register_taxonomy'));
    add_action('admin_menu', array($this, 'add_main_menu'));
    }

    /**
    * Fügt das Hauptmenü und die Untermenüs im Admin-Bereich hinzu
    */
    public function add_main_menu()
    {
    // Fügt das Submenü für Öffnungszeiten hinzu
    add_submenu_page(
    'wp_menu',
    __('Öffnungszeiten', 'plugin'),
    __('Öffnungszeiten', 'plugin'),
    'manage_options',
    'edit.php?post_type=' . $this->slug
    );

    // Fügt das Submenü für Öffnungszeiten Typen hinzu
    add_submenu_page(
    'wp_menu',
    __('Öffnungszeiten Typen', 'plugin'),
    __('Öffnungszeiten Typen', 'plugin'),
    'manage_options',
    'edit-tags.php?taxonomy=' . $this->typeTax . '&post_type=' . $this->slug
    );

    // Fügt das Submenü für Standorte hinzu
    add_submenu_page(
    'wp_menu',
    __('Standorte', 'plugin'),
    __('Standorte', 'plugin'),
    'manage_options',
    'edit-tags.php?taxonomy=' . $this->locationTax . '&post_type=' . $this->slug
    );
    }
    }

    // Erstelle eine Instanz der OpeningHoursPostType-Klasse und registriere den Post-Typ und die Taxonomien
    $openingHoursPostType = OpeningHoursPostType::instance();
    $openingHoursPostType->register();

    ?>

    Was ändert sich, wenn du bei der Registrierung des CPT die Taxonomy mit angibst?

    public function register_posttype()
    {
    $args = array(
    'labels' => $this->postTypeLabel,
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => false,
    'show_in_rest' => true, // Sichtbar in der REST API
    'publicly_queryable' => true,
    'menu_icon' => 'dashicons-clock',
    'taxonomies' => array( 'opening_hours', 'location' ),
    'supports' => array('title', 'editor', 'author', 'excerpt'),
    );
    register_post_type($this->slug, $args);
    }
Ansicht von 10 Antworten – 1 bis 10 (von insgesamt 10)