So erstellen Sie einen benutzerdefinierten Beitragstyp, ohne dass Wordpress eine URL zuweist

7

Lassen Sie mich Ihnen ein Szenario geben, was ich versuche zu tun. Ich habe einen benutzerdefinierten Beitragstyp "Kunde" und kann "Neuen Kunden hinzufügen" eingeben. Hier sehe ich meine benutzerdefinierten Felder wie Name, Logo, Bewertung usw. Das Problem ist, dass Wordpress eine URL dafür generiert. Dies ist keine Seite, daher leite ich alle meine http://website.com/customers/ * an eine andere Stelle weiter, damit (vorerst) niemand auf diese Seiten gelangt.

Gibt es eine Möglichkeit, beim Registrieren meiner benutzerdefinierten Beitragstypen in der Datei functions.php (oder auf andere Weise) Wordpress anzuweisen, keine URL / tatsächliche Seite dafür zu generieren? Es ist wirklich nur ein Steckplatz für meine Daten.

Meine Gedanken waren vielleicht, dass es damit zu tun hat: 'Capability_Type' => 'Post' oder etwas Ähnliches, das ich überblicke.

VIELEN DANK!

danielle
quelle

Antworten:

4

OK, es gibt also einige Argumente register_post_type, die Sie verwenden sollten.

Die entscheidenden Argumente für Sie sind:

  • public- Steuert, wie der Typ für Autoren ( show_in_nav_menus, show_ui) und Leser ( exclude_from_search, publicly_queryable) sichtbar ist . Wenn es falsch ist, dann exclude_from_searchist es wahr, publicly_queryable- falsch, show_in_nav_menus- falsch und show_ui- falsch. Das CPT wird also vollständig ausgeblendet.

  • exclude_from_search- Gibt an, ob Beiträge mit diesem Beitragstyp aus den Front-End-Suchergebnissen ausgeschlossen werden sollen. Standard: Wert des Gegenteils des publicArguments.

  • publicly_queryable- Ob Abfragen im Frontend als Teil von parse_request () ausgeführt werden können. Standard: Wert des publicArguments. Also müssen wir es wahr machen.

  • show_ui - Gibt an, ob eine Standard-Benutzeroberfläche zum Verwalten dieses Beitragstyps im Administrator generiert werden soll. Standard: Wert des publicArguments.

  • rewrite- Löst die Behandlung von Umschreibungen für diesen Beitragstyp aus. Um ein erneutes Schreiben zu verhindern, setzen Sie den Wert auf false. Standard: true und verwende $ post_type als Slug. Also müssen wir es falsch setzen.

Unten finden Sie den Code:

$labels = array( /*removed for example*/ );

$args = array(
    'labels'             => $labels,
    'description'        => __( 'Description.', 'your-plugin-textdomain' ),
    'public'             => false,
    'show_ui'            => true,
    'rewrite'            => false,
    'capability_type'    => 'post',
    'hierarchical'       => false,
    /* ... Any other arguments like menu_icon, and so on */
    'supports'           => array( /* list of supported fields */ )
);

register_post_type( 'customer', $args );

Dieser Generator kann hilfreich sein, wenn Sie nicht alle Argumente lernen möchten: https://generatewp.com/post-type/

Die Liste aller Argumente finden Sie wie immer im Codex: https://codex.wordpress.org/Function_Reference/register_post_type

Krzysiek Dróżdż
quelle
Vielen Dank für Ihre Antwort!! Dies kommt dem sehr nahe, was ich zuvor in einem anderen Thread gelesen habe. Ich habe die gleichen Schritte befolgt, ich hätte meine Frage abgelehnt, da ich die Antwort technisch bereits gefunden habe, aber ich höre gerne andere Ansätze.
Danielle
1
Sie hatten alle Recht und waren sehr nützlich, aber ich wähle Ihre als die richtige Antwort, nur weil Sie gesagt haben, was alle anderen gesagt haben, und noch mehr.
Nochmals vielen
6

Einer der Parameter für register_post_type()ist publicly_queryable. Setzen Sie dies einfach auf false, um die Erstellung einzelner Seiten zu verhindern. Möglicherweise möchten Sie auch von der Suche usw. ausschließen.

https://codex.wordpress.org/Function_Reference/register_post_type

In dem im WP-Codex angegebenen Beispiel sehen Sie, dass dieser Parameter auf eingestellt ist true. Abhängig von Ihren genauen Anforderungen können Sie den publicBeitragstyp mit den Parametern ausblenden oder die Sichtbarkeitsstufen mit den expliziten Parametern, z publicly_queryable. B. pas, steuern .

https://codex.wordpress.org/Function_Reference/register_post_type#Example

Beispielcode aus WP Codex

add_action( 'init', 'codex_book_init' );
/**
 * Register a book post type.
 *
 * @link http://codex.wordpress.org/Function_Reference/register_post_type
 */
function codex_book_init() {
    $labels = array( /*removed for example*/ );

    $args = array(
        'labels'             => $labels,
        'description'        => __( 'Description.', 'your-plugin-textdomain' ),
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'book' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
    );

    register_post_type( 'book', $args );
}

Post Type Archive Es ist wichtig zu beachten, dass durch das Setzen von public_queryable auf false auch die Archivseite dieses Post-Typs ausgeblendet wird. Im obigen Beispielcode für den Beitragstyp bookwird auch die Archivseite unter https://yourdomain.com/book entfernt.

jdm2112
quelle
Ich bin mir ziemlich sicher, dass der Code, den Sie oben gepostet haben, nicht ausreicht. CPT wird mit "Buch" als Schnecke registriert.
Krzysiek Dróżdż
Das ist richtig. Dies ist ein Beispielcode aus der Dokumentation. Es wird lediglich ein Beispiel für die Verwendung des Arguments vorgestellt.
jdm2112
1

wird wiederholen, was @ jdm2112 in (hoffentlich) klarerem Englisch und überhaupt keinem Code gesagt hat;)

Grundsätzlich suchen Sie ein privates CPT. Diese Art von CPT ist nützlich, um Daten in der Datenbank auf ähnliche Weise wie Posts zu speichern. Dies bietet Ihnen den Vorteil, dass Sie (optional) immer noch dieselbe Art von Administrationsoberfläche erhalten und dieselben Abfrage-, Meta- und Term-APIs verwenden können.

"Privat" ist eigentlich ein irreführendes Wort, es ist nicht so, dass der Inhalt privat ist, aber dass WordPress nicht versucht, ihn selbst im Frontend zu veröffentlichen. Sie können den Inhalt auf dem Frontend anzeigen, wenn Sie möchten, aber Sie müssen den Code dafür selbst schreiben. In Ihrem speziellen Fall besteht eine vereinfachte Möglichkeit darin, eine Seitenvorlage zu erstellen, in der alle Beiträge in diesem CPT angezeigt werden. Auf diese Weise haben Sie eine flexible Kontrolle über die Adresse der Seite und über die SEO, die Sie möglicherweise darin ausführen möchten.

Denken Sie daran, dass es viele Standardfunktionen gibt, die Sie möglicherweise neu erfinden müssen, und dass es möglicherweise einfacher ist, nur das CPT öffentlich zu machen und auf den einzelnen CPT-Seiten eine Art Handlungsaufforderung "Weitere Clients anzeigen" zu erhalten.

Mark Kaplun
quelle
Vielen Dank!!! Ich mochte den Code wirklich, weil er meinen benutzerdefinierten Beitragstyp minimierte und mir ähnliche Werte zeigte. Einfach schön eine visuelle Darstellung zu haben. Und ja, ich denke, Sie meinen, die Öffentlichkeit auf falsch anstatt auf wahr zu setzen. Meine Post-Typen sind alle erstellt, es ist nur die Tatsache, dass wir die URL nicht verwenden, also möchte ich sie einfach fallen lassen, damit ich keine Weiterleitungen mehr schreiben kann (die URL geht zu einer Mist-Seite, da keine Vorlage festgelegt ist)
danielle