Comment obtenir un identifiant de publication personnalisé à partir de slug?
3 réponses
- votes
-
- 2015-12-03
Vouspouvez utiliser
get_page_by_path()
-ne vous laissezpastromperpar lenom,letroisième argumentest letype depublication: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
Si vous attendez quelquesjourset passez à Wordpress 4.4 qui sortira le8 décembre ( AFAIK ),vouspouvez utiliser lenouveauparamètre
post_name__in
dansWP_Query
quiprend untableau de slugsEXEMPLE
Si vous avezbesoin de l'objet depublication complet
$args = [ 'post_type' => 'my_custom_post_type', 'posts_per_page' => 1, 'post_name__in' => ['post-slug'] ]; $q = get_posts( $args ); var_dump( $q );
Si vousn'avezbesoin que de l'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 );
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 );
-
Bien,maisprobablement unpeuintensifpour obtenir unmessagepar slug?Pourquoi ont-ils ajouté cettefonctionnalité !?Nice, but probably a bit intensive to get one post by slug? Why did they add that feature!?
- 0
- 2015-12-03
- TheDeadMedic
-
@TheDeadMedic Peut être unpeuintensif oui,je n'aipas vraimenttesté lesperformances à ce sujet,juste ajouté commemoyen d'alternative ;-).Quant à savoirpourquoi,je ne sais vraimentpas,cela ressemble à l'une de ces choses agréables à avoiret inutilespour lesquelles WordPressest si célèbre.La convention de dénomination,àmon humble avis,est égalementerronée,tout comme lapropriété `post_name`et leparamètre` category_name`,qui auraient dû être `slug`et non`name`@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
-
Bien :) wowen faitpourmoi sabellemise àjour :)Nice :) wow actually for me its nice update :)
- 0
- 2015-12-03
- stlawrance
-
@TheDeadMedic Iln'y apas de décalage horaireentremaméthodeet votreméthode.Je reçois constammententre 0,002et 0,005 secondespourexécuter chacune denos requêtes.En outre,les deuxméthodesexécutent une seule requête.;-)@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
-
Quandj'ai suggéré que `get_page_by_path`estplusperformant,je voulais simplement dire que PHP amoins detravail àfaire (unpeu d'analyse des argumentset une requête SQL)par rapport à` WP_Query` (quiimplique l'instanciation deplusieurs objetset s'exécute sur denombreuxfiltres/actions/arguments).Les horaires réels ont rarementtendance àillustrer àmoins quenousne simulions desmilliers d'opérations.Mais cela vaut lapeine d'être connu dans lemonde réel,celane faitfinalement aucune différence;)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 * Je voulais simplement dire que PHP amoins detravail àfaire * - oui,bien sûr,tout àfait d'accord.Ilestjustetoujours agréable de connaître des alternatives (*même si celapeutparfoisne pas être lemeilleur *)et d'avoir une sorte debenchmarks.Prendreplaisir ;-)@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
-
-
Le `url_to_postid`est unefonctiontrèsflexible: vouspouvezpassern'importe queltype de lienpermanent/URL complèteet obtenir lepost-ID leplusprécispour cette URL.Cependant,en raison de l'utilisationflexible,ilest assez lent (surtout avecbeaucoup depoints determinaison/post-types). Si vousne passez un slug quepour untype depublication spécifique,ilestbeaucoupplus rapide d'utiliser `get_page_by_path ()`The `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
-
Est-ilpossible de récupérer l'ID depublication dutype demessagepersonnalisé uniquement àpartir de slug?
Autant queje sache,nouspouvons obtenir deiden utilisanttitle.Maisilpeut y avoir lemêmetitre dans untype demessagepersonnalisé,donc comme les slugs sont uniques,est-cepossible???