Salut.
Je viens de me faire un conditional tag qui pourrait être utile.
J’avais besoin d’une sorte de is_single()
qui fonctionne pour n’importe quel type de post, c’est ce que fait ma fonction.
On a is_singular()
mais la vérification ne se fait qu’au niveau du type de post, or je souhaite faire la vérification au niveau de l’ID du post, c’est ce que que fait is_single()
. Mais is_single()
fonctionne pour tous les types de post sauf les pages et les médias. Il suffirait donc de faire is_single($ID) || is_page($ID) || is_attachment($ID)
, sauf que is_attachment()
ne prend pas d’argument, c’est balo.
J’ai donc repris le code de ces trois fonctions, ai délicatement mélangé le tout, et tadaaa !
0102030405060708091011121314151617181920212223242526272829303132333435
if ( !function_exists('is_single_page') ):
function is_single_page( $post = '' ) {
global $wp_query;
if ( ! isset( $wp_query ) ) {
_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1' );
return false;
}
if ( !$wp_query->is_single && !$wp_query->is_page && !$wp_query->is_attachment )
return false;
if ( empty($post) )
return true;
$post_obj = $wp_query->get_queried_object();
if ( is_a($post, 'WP_Post') ) {
if ( empty($post->ID) )
return false;
$post = $post->ID;
}
$post = (array) $post;
if ( in_array( $post_obj->ID, $post ) )
return true;
elseif ( in_array( $post_obj->post_title, $post ) )
return true;
elseif ( in_array( $post_obj->post_name, $post ) )
return true;
return false;
}
endif;
Et voilà un is_single()
qui marchera avec n’importe quel type de post.
Ici, l’argument $post
fonctionnera de la même manière que pour is_single()
, c’est à dire que ça peut être un ID, un slug (post_name), un titre, ou un tableau de plusieurs IDs/slugs/titres. Petit bonus, $post
peut également être un objet WP_Post
(le test se fera alors sur l’ID).
See ya!