Wie bekomme ich eine benutzerdefinierte Post-Typ-Post-ID von slug?
3 Antworten
- Stimmen
-
- 2015-12-03
Sie können
get_page_by_path()
verwenden - lassen Sie sichnicht vom Namentäuschen,Das dritte Argumentist der Beitragstyp:if ( $post = get_page_by_path( 'the_slug', OBJECT, 'post_type' ) ) $id = $post->ID; else $id = 0;
You can use
get_page_by_path()
- don't let the name fool you, third argument is the post type:if ( $post = get_page_by_path( 'the_slug', OBJECT, 'post_type' ) ) $id = $post->ID; else $id = 0;
-
- 2015-12-03
Wenn Sieein paar Tage warten und auf Wordpress 4.4 aktualisieren,wird das veröffentlichtAm 8. Dezember ( AFAIK ) können Sie denneuen Parameter
verwendetpost_name__in
inWP_Query
verwenden,dereine Reihe von SlugsBEISPIEL
Wenn Sie das vollständige Post-Objektbenötigen
$args = [ 'post_type' => 'my_custom_post_type', 'posts_per_page' => 1, 'post_name__in' => ['post-slug'] ]; $q = get_posts( $args ); var_dump( $q );
Wenn Sienur die IDbenötigen
$args = [ 'post_type' => 'my_custom_post_type', 'posts_per_page' => 1, 'post_name__in' => ['post-slug'], 'fields' => 'ids' ]; $q = get_posts( $args ); var_dump( $q );
If you wait a couple of days, and upgrade to Wordpress 4.4 which will be released the 8th of December (AFAIK), you can use the new
post_name__in
parameter inWP_Query
which takes an array of slugsEXAMPLE
If you need the complete post object
$args = [ 'post_type' => 'my_custom_post_type', 'posts_per_page' => 1, 'post_name__in' => ['post-slug'] ]; $q = get_posts( $args ); var_dump( $q );
If you only need the ID
$args = [ 'post_type' => 'my_custom_post_type', 'posts_per_page' => 1, 'post_name__in' => ['post-slug'], 'fields' => 'ids' ]; $q = get_posts( $args ); var_dump( $q );
-
Schön,aber wahrscheinlichein bisschenintensiv,umeinen Beitragper Schnecke zubekommen?Warum haben sie diese Funktion hinzugefügt?Nice, but probably a bit intensive to get one post by slug? Why did they add that feature!?
- 0
- 2015-12-03
- TheDeadMedic
-
@TheDeadMedic Könnteein bisschenintensiv sein,ja,habe die Leistungnicht wirklichgetestet,nur als Alternative hinzugefügt ;-).Ich weiß wirklichnicht,warum das so aussieht,als wäreeseines diesernetten Dinge,für die WordPress soberühmtist.Die Namenskonvention IMHOistebensofalsch wie die Eigenschaft "post_name" und der Parameter "category_name",die "slug" undnicht "name" sein sollten@TheDeadMedic Mighty be a bit intensive yes, haven't really tested performance on this, just added as means of an alternative ;-). As to why, I really do not know, looks like one of those nice-to-have-unnecessary things that WordPress is so famous for. The naming convention, IMHO, is also wrong, just like the `post_name` property and `category_name` parameter, which should have been `slug` and not `name`
- 1
- 2015-12-03
- Pieter Goosen
-
Schön :) woweigentlichfürmich sein schönes Update :)Nice :) wow actually for me its nice update :)
- 0
- 2015-12-03
- stlawrance
-
@TheDeadMedic Esgibt keinen Zeitunterschied zwischenmeiner Methode und Ihrer Methode.Ich habe ständig zwischen 0,002 und 0,005 Sekunden Zeit,umjede unserer Abfragen auszuführen.Außerdemführenbeide Methodennureine Abfrage aus.;-);@TheDeadMedic There is no time difference between my method and your method. I constantly get between 0.002 and 0.005 seconds to run each of our queries. Also, both methods run 1 query only. ;-)
- 1
- 2015-12-03
- Pieter Goosen
-
Alsich vorschlug,dass "get_page_by_path" leistungsfähigerist,meinte ichnur,dass PHP weniger Arbeit zuerledigen hat (einbisschen Argumentanalyse undeine SQL-Abfrage) als "WP_Query" (bei demmehrere Objekteinstanziiert werden und viele Filter/Aktionen/Argumente ausgeführt werden)..Tatsächliche Timings werden selten veranschaulicht,es sei denn,wir simulieren 1000 Operationen.Aber wissenswertin der realen Weltmachtes letztendlich keinen Unterschied;)When I suggested `get_page_by_path` is more performant I just meant PHP has less work to do (a bit of argument parsing and an SQL query) compared to `WP_Query` (which involves multiple object instantiation and running over many filters/actions/arguments). Actual timings rarely tend to illustrate unless we simulate 1000's of ops. But worth knowing in the real-world it ultimately makes no difference ;)
- 0
- 2015-12-03
- TheDeadMedic
-
@TheDeadMedic * Ichmeinte nur,PHP hat weniger Arbeit zuerledigen * -ja,sicher,stimme vollkommen zu.Esisteinfachimmer schön,Alternativen zu kennen (* obwohlesmanchmalnicht diebesten sind *) undeine Art Benchmark zu haben.Genießen ;-)@TheDeadMedic *I just meant PHP has less work to do* - yes, for sure, totally agree. It is just always nice to know alternatives (*although it might sometime not be the best*) and having some kind of benchmarks. Enjoy ;-)
- 1
- 2015-12-03
- Pieter Goosen
-
-
Die "url_to_postid"isteine sehrflexible Funktion: Sie könnenjede Art von Permalink/vollständiger URL übergeben und diegenaueste Post-IDfür diese URLerhalten.Aufgrund derflexiblen Nutzungistesjedoch ziemlich langsam (insbesonderebei vielen Endpunkten/Post-Typen). Wenn Sienureinen Slugfüreinen bestimmten Beitragstyp übergeben,ist die Verwendung von "get_page_by_path ()" viel schnellerThe `url_to_postid` is a very flexible function: you can pass in any kind of permalink/full URL and get the most accurate post-ID for that URL. However, because of the flexible usage it's quite slow (esp. with lot of endpoints/post-types). If you only pass in a slug for a specific post type, it's a lot faster to use `get_page_by_path()`
- 1
- 2018-03-02
- Philipp
-
Istesmöglich,diebenutzerdefinierte Post-IDnur vom Slug abzurufen?
Soweitich weiß,können wirmithilfe des Titels von der ID abrufen.Es kannjedoch denselben Titelin einembenutzerdefinierten Beitragstypgeben,sodassesmöglichist,dass Slugseindeutig sind???