Как тестировать, если пост является пользовательским типом поста?
-
16-10-2019 - |
Вопрос
Я ищу способ проверить, является ли пост пользовательским типом поста. Например, в, скажем, на боковой панели, которую я могу поместить в код, как это:
if ( is_single() ) {
// Code here
}
Я хочу тестирование кода только для пользовательского типа поста.
Решение
Вот, пожалуйста: get_post_type()
а потом if ( 'book' == get_post_type() ) ...
согласно Условные теги> Тип поста в кодексе.
Другие советы
if ( is_singular( 'book' ) ) {
// conditional content/code
}
Вышеупомянутое true
При просмотре поста пользовательского типа поста: book
.
if ( is_singular( array( 'newspaper', 'book' ) ) ) {
// conditional content/code
}
Вышеупомянутое true
При просмотре поста пользовательских типов сообщений: newspaper
или же book
.
Эти и больше условных тегов можно посмотреть здесь.
Добавьте это в свой functions.php
, и вы можете иметь функциональность, внутри или за пределами петли:
function is_post_type($type){
global $wp_query;
if($type == get_post_type($wp_query->post->ID))
return true;
return false;
}
Итак, теперь вы можете использовать следующее:
if (is_single() && is_post_type('post_type')){
// Work magic
}
Проверить, если пост Любые Пользовательский тип публикации, составьте список всех не встроенных типов публикаций и проверяйте, если тип сообщения находится в этом списке.
Как функция:
/**
* Check if a post is a custom post type.
* @param mixed $post Post object or ID
* @return boolean
*/
function is_custom_post_type( $post = NULL )
{
$all_custom_post_types = get_post_types( array ( '_builtin' => FALSE ) );
// there are no custom post types
if ( empty ( $all_custom_post_types ) )
return FALSE;
$custom_types = array_keys( $all_custom_post_types );
$current_post_type = get_post_type( $post );
// could not detect current type
if ( ! $current_post_type )
return FALSE;
return in_array( $current_post_type, $custom_types );
}
Применение:
if ( is_custom_post_type() )
print 'This is a custom post type!';
Если по какой -либо причине у вас уже есть доступ к глобальной переменной $ post, вы можете просто использовать
if ($post->post_type == "your desired post type") {
}
Если вы хотите проверить дикую карту для всех ваших пользовательских типов сообщений:
if( ! is_singular( array('page', 'attachment', 'post') ) ){
// echo 'Imma custom post type!';
}
Таким образом, вам не нужно знать название вашего пользовательского поста. Также код все еще работает, даже если вы измените имя своего пользовательского поста позже.