Wie überprüfe ich, ob eine Schnecke vorhanden ist?

8

Ich habe eine beliebige Zeichenfolge und möchte überprüfen, ob auf der Site ein Beitrag mit dieser Zeichenfolge vorhanden ist. Ich habe versucht, alle Schnecken aufzulisten, kann aber so etwas nicht finden. Vielen Dank

lulalala
quelle
Die Frage ist geschützt, daher kann ich nicht antworten. Sie können verwenden if(is_page('slug-here')) { echo 'exists'; }.
Iago

Antworten:

7

Dies ist, was Sie suchen, getestet und ich verwende es auf meinen eigenen Websites:

function the_slug_exists($post_name) {
    global $wpdb;
    if($wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = '" . $post_name . "'", 'ARRAY_A')) {
        return true;
    } else {
        return false;
    }
}

Sie können es dann folgendermaßen verwenden:

if (the_slug_exists('contact')) {
    // do something
}

Ersetzen contactSie ihn durch die Schnecke, auf die Sie testen möchten.

Nathan
quelle
1
sollten wir $ wpdb_prepare verwenden, um das Escape der SQL-Anweisung vorzubereiten?
Insidepower
Gibt es eine Möglichkeit, den Code so zu ändern, dass er nur auf einen bestimmten benutzerdefinierten Beitragstyp abzielt?
Bruno Monteiro
Vielleicht if(the_slug_exists('contact') && post_type_exists('contact'))aber warum nicht nur verwendenif(post_type_exists('contact')) ...
Jonas Lundman
Die Verwendung von WP_Query () ist eine wartbarere Lösung als eine direkte DB-Abfrage. Zum Beispiel$query = new WP_Query(array('name' => 'my-new-slug')); if ($query->post_count == 0) {// I am unique!}
Alex Steinberg
5

Meinst du Post Slug? Sie können versuchen, diese von wp_unique_post_slug()WP verwendeten zu verwenden, um diese zu generieren. Wenn ich mich recht erinnere, wenn der Slug, den Sie verwenden möchten, nicht eindeutig ist, wird er mit angehängtem numerischen Index zurückgegeben.

Selten
quelle
1
Es tut mir leid, so spät zu antworten. Ja, Post Slug ist die Schnecke, die ich will. Leider habe ich nicht die post_id, die benötigt wird, um zu verwendenwp_unique_post_slug()
lulalala
Ich konnte sowieso nicht herausfinden, wie ich wp_unique_post_slug verwenden sollte, um dies zu tun. Es wird wirklich geprüft, ob eine Schnecke vorhanden ist, und es wird auch eine erstellt. Ich könnte mich irren oder etwas falsch interpretieren, aber bei meinen Tests würde nicht überprüft, ob bereits etwas vorhanden ist.
Nathan
4
$args = array('name' => $slugName, 'post_type' => $postType); 

$slug_query = new WP_Query($args);
echo "<pre>";
var_dump($slug_query);
exit;

Sie haben dann mehr als genug Informationen, um zu testen, ob ein Beitrag zurückgegeben wurde oder nicht. Ich hoffe, dies hilft.

Kayo
quelle
1
Wie wird dies die Einzigartigkeit der Schnecke extrahieren?
Rahil Wazir
1

Wie wäre es mit diesem einfacheren Ansatz?

$post_exists = get_page_by_path( $slug, OBJECT, $post_type );
if ( ! $post_exists )
    echo 'No post exists with this slug.';

Wenn für den angegebenen Slug und Post-Typ kein Beitrag vorhanden ist, wird get_page_by_path()null zurückgegeben.

Kevin Leary
quelle
0
$your_slug = 'my-pageeeeeee';
$wpdb = $GLOBALS['wpdb'];



//==================FIRST method======================
    $id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE post_name = '%s' AND ( post_type = 'page' OR post_type = 'post') ", $slug) );
    if (!empty($id)) {
        //............
    }





//====================SECOND method======================
    $counts = $wpdb->get_var($wpdb->prepare("SELECT count(post_name) FROM ".$wpdb->posts ." WHERE post_name like '%s'", $slug) );
    if ($counts >=1 ) {
        //.............
    }
T.Todua
quelle
1
Bitte fügen Sie Ihren Antworten eine angemessene Erklärung hinzu, z. B. was der Code tut und wie er verwendet werden sollte
Pieter Goosen