Запрос на произвольный тип сообщения?
3 ответ
- голосов
-
- 2011-01-06
query_posts( array( 'post_type' => array('post', 'portfolio') ) );
который показывает как обычные сообщения,так и сообщения внутри типа
portfolio
или
query_posts('post_type=portfolio');
только для
portfolio
.Используйте как обычный запрос WP - прочтите Кодекс: http://codex.wordpress.org/Function_Reference/query_posts # Usage и http://codex.wordpress.org/Function_Reference/query_posts#Post_.26_Page_Parameters
<?php query_posts(array( 'post_type' => 'portfolio', 'showposts' => 10 ) ); ?> <?php while (have_posts()) : the_post(); ?> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <p><?php echo get_the_excerpt(); ?></p> <?php endwhile;?>
query_posts( array( 'post_type' => array('post', 'portfolio') ) );
which shows both normal posts and posts inside
portfolio
typeor
query_posts('post_type=portfolio');
for only
portfolio
.Use as normal WP Query - read the Codex: http://codex.wordpress.org/Function_Reference/query_posts#Usage and http://codex.wordpress.org/Function_Reference/query_posts#Post_.26_Page_Parameters
<?php query_posts(array( 'post_type' => 'portfolio', 'showposts' => 10 ) ); ?> <?php while (have_posts()) : the_post(); ?> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <p><?php echo get_the_excerpt(); ?></p> <?php endwhile;?>
-
Это довольно старый ответ,но,чтобы быть ясным,вы не должны это делать.Это почти неизбежно приведет к ошибкам 404 и множеству других проблем.См. Ответы @ kaiser или [этот пост о том,почему не следует использовать query_posts () «] (http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts/50762 # 50762)This is a fairly old answer - but to be clear, there is not the way you should being doing this. It will almost inevitably lead to 404s and a host of other problems. Please see @kaiser's answers or [this post on why you shouldn't use `query_posts()`](http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts/50762#50762)
- 7
- 2013-05-28
- Stephen Harris
-
- 2013-05-27
Поздний ответ в качестве основного ответа использует
query_posts()
,чего никогда не следует делать.Используйте фильтр
Используйте фильтр
pre_get_posts
и просто установите тип сообщенияportfolio
для основного запроса. Используйте условные теги ,чтобы определить,где вы хотите разместить этот фильтр.Быстрый пример
<?php defined( 'ABSPATH' ) OR exit; /* Plugin Name: (#6417) "Portfolio" post type in query */ add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' ); function wpse_6417_portfolio_posts( $query ) { if ( ! $query->is_main_query() // Here we can check for all Conditional Tags OR ! $query->is_archive() // For e.g.: Every archive will feature both post types ) return $query; $query->set( 'post_type', array( 'post', 'portfolio' ) ); return $query; }
Заявление об ограничении ответственности
Приведенный выше код является плагином,но его можно просто вставить в файл
functions.php
вашей темы (что не рекомендуется).Late answer as the main answer uses
query_posts()
, which should never be done.Use a filter
Use the
pre_get_posts
filter and just set theportfolio
post type for the main query. Use Conditional Tags to determine where you want to have this filter.Quick Example
<?php defined( 'ABSPATH' ) OR exit; /* Plugin Name: (#6417) "Portfolio" post type in query */ add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' ); function wpse_6417_portfolio_posts( $query ) { if ( ! $query->is_main_query() // Here we can check for all Conditional Tags OR ! $query->is_archive() // For e.g.: Every archive will feature both post types ) return $query; $query->set( 'post_type', array( 'post', 'portfolio' ) ); return $query; }
Disclaimer
The above code is a plugin, but can simply get stuffed in the
functions.php
file of your theme (which is not recommended).-
почему не рекомендуется добавлять его в функции?Конечно,если администратор сайта изменит тему,ему все равно придется решать,как отображать портфолио на домашней странице с этой новой темой.Итак,я бы сказал,что так же правильно добавлять это в функции,а не в плагин.Или я что-то упускаю?why is it not recommended to add it to functions? Surely, if the site admin changes the theme they would need to address how to display the portfolio on the home page with this new theme anyway. So, I would say it is just as valid to add this in functions rather than a plugin. Or am I missing something?
- 0
- 2016-11-29
- Phill Healey
-
@PhillHealey Как вы сказали,данные будут невидимы,и вам придется копировать и вставлять код.Тяжелые,логические модификации запросов лучше всего выполнять через плагины,а отображение и стили следует хранить в темах.@PhillHealey As you said, the data would be invisible and you would have to copy and paste the code around. Heavy, logic modifications to queries are best served via plugins, while displaying and styling should be kept in themes.
- 0
- 2016-11-29
- kaiser
-
Нет,если этот код относится к теме.Not if that code is specific to the theme.
- 0
- 2016-12-03
- Phill Healey
-
@PhillHealey Тип сообщения ** никогда ** не должен быть привязан к теме.@PhillHealey A post type should **never** be specific to a theme.
- 0
- 2016-12-04
- kaiser
-
Хорошо,если вы хотите получить удовольствие от абсолюта,тогда хорошо.Однако было бы неверно утверждать,что никакой конкретный код дизайна не следует переносить в плагин.Часто это неуместно.Ok, if you want to get in some tit-for-tat over absolutes then fine. However, It's just not correct to say that none design specific code should be pushed out to a plugin. There are lots of times when that's not appropriate.
- 0
- 2016-12-05
- Phill Healey
-
- 2013-12-11
Добавьте этот код в свой файл функций дочерних тем (рекомендуется),чтобы добавить отдельные страницы CPT в основной цикл
add_action( 'pre_get_posts', 'add_custom_post_types_to_loop' ); function add_custom_post_types_to_loop( $query ) { if ( is_home() && $query->is_main_query() ) $query->set( 'post_type', array( 'post', 'portfolio' ) ); return $query; }
Источник http://codex.wordpress.org/Post_Types
Или создайте собственный шаблон страницы archive -folio.php ,который будет отображать только ваши страницы CPT. Это нужно сделать только в том случае,если вы не добавили страницу архива с помощью настроек плагина.
Пример: 'has_archive'=>true,
Вы также можете контролировать количество отображаемых страниц и порядок их отображения на странице архива с помощью этого кода:
add_action( 'pre_get_posts', 'cpt_items' ); function cpt_items( $query ) { if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'portfolio' ) ) { $query->set( 'posts_per_page', '8' ); $query->set( 'order', 'ASC' ); } }
Add this code to your child themes functions file (recommended) to add your single CPT pages to your main loop
add_action( 'pre_get_posts', 'add_custom_post_types_to_loop' ); function add_custom_post_types_to_loop( $query ) { if ( is_home() && $query->is_main_query() ) $query->set( 'post_type', array( 'post', 'portfolio' ) ); return $query; }
Source http://codex.wordpress.org/Post_Types
Or create a custom archive-portfolio.php page template which will only display your CPT pages. This only needs to be done if you haven't added a archive page using the plugin settings.
Example: 'has_archive' => true,
You can also control how many pages are displayed and the order in which they're displayed on the archive page using this code:
add_action( 'pre_get_posts', 'cpt_items' ); function cpt_items( $query ) { if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'portfolio' ) ) { $query->set( 'posts_per_page', '8' ); $query->set( 'order', 'ASC' ); } }
Я установил плагин пользовательского интерфейса пользовательского типа сообщения .После активации этого плагина я создал собственный тип сообщения под названием
portfolio
.Теперь я хочу использовать это на странице портфолио в интерфейсе.Как получить все сообщения произвольного типаportfolio
?