Получение записи по названию страницы или слагу
Я знаю, что это звучит очень авангардно, но прошу вас потерпеть. Я читал, что можно запросить страницу по её названию или слагу. Я пытаюсь сделать это, потому что мне нужна информация со страницы с похожим названием/слагом, и у меня не будет возможности получить ID страницы (если только нет способа преобразовать название в ID).
Я пробовал различные варианты, но без успеха. Этот способ кажется наиболее разумным, но он просто не работает.
<?php
$args = array(
'pagename' => 'CM-145',
'post_type' => 'page',
'posts_per_page' => 1,
'numberposts' => 1
); ?>
<div>
<?php
query_posts( $args );
get_template_part( 'loop' );
wp_reset_query();
?>
</div>
Цикл (Loop)
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php if ( is_front_page() ) { ?>
<h2 class="entry-title"><?php the_title(); ?></h2>
<?php } else { ?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php } ?>
<div class="entry-content">
<?php the_content(); ?>
<?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Страницы:', 'twentyten' ), 'after' => '</div>' ) ); ?>
<?php edit_post_link( __( 'Редактировать', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?>
</div><!-- .entry-content -->
</div><!-- #post-## -->
<?php comments_template( '', true ); ?>
<?php endwhile; // конец цикла. ?>
Я также пробовал 'name' => 'CM-145'
, но не уверен, что это правильный или разумный способ выполнить эту операцию. В конечном итоге мне просто нужно получить миниатюру страницы и её краткое описание (excerpt), поэтому, если у вас есть лучшая идея, не стесняйтесь подсказать.
Заранее спасибо.
Привет, @Zach Shallbetter:
Если я правильно понял ваш вопрос, то вы пытаетесь решить проблему с помощью функций темы, когда на самом деле вам нужно использовать API WordPress. Следующий код можно скопировать в файл test.php
и запустить через http://yoursite.com/test.php
, чтобы увидеть, как он работает (разумеется, заменив http://yoursite.com
на домен вашего сайта!). Затем прочитайте комментарии, чтобы понять, куда вставить код для использования на вашем сайте:
<?php
// Эту функцию нужно добавить в файл functions.php вашей темы
function get_excerpt( $post_id ) {
$post = get_post( $post_id );
$excerpt = $post->post_excerpt;
return ( post_password_required($post) ? false :
apply_filters( 'get_the_excerpt', $excerpt ) );
}
include('../wp-load.php');
// Этот код размещается там, где нужно получить и вывести цитату и миниатюру
$post = get_page_by_path('CM-145');
$excerpt = get_excerpt($post->ID);
$thumbnail = get_the_post_thumbnail($post->ID);
?>
<div style="width:300px">
<span style="float:right;"><?php echo $thumbnail; ?></span>
<?php echo $excerpt ?>
</div>
Кроме того, меня немного беспокоит, что у вас может быть синдром "молотка и гвоздя" — когда у вас есть проблема, и в руках только молоток, вы пытаетесь решить её как гвоздь, хотя, возможно, вам нужна отвёртка?
Конкретно меня беспокоит, что вы используете Страницу для чего-то, что должно быть либо просто Настройкой, либо, возможно, Пользовательским типом записи. Не могли бы вы подробнее объяснить ваш сценарий использования и почему вы выбрали именно Страницу?

Абсолютно верно, в данный момент я работаю над http://redesign.openeye.net. Я сделал продукты в виде страниц, а все дополнительные элементы — в виде записей (видео, программное обеспечение, документы и т. д.). Эти элементы (записи) категоризированы по номеру модели, так что несколько записей могут быть связаны с одним номером модели. У нас есть ситуация, когда клиент заходит на страницу поддержки, выбирает категорию из выпадающего списка и затем видит список "записей", связанных с этим продуктом. Я бы хотел вывести изображение и описание страницы продукта в верхней части этой страницы.

Кроме того, я активно использую пользовательские типы записей, поля и таксономии. Большая часть сайта генерируется автоматически. И, простите за инлайн-стили повсюду, я всё ещё работаю над дизайном.

@Zach Shallbetter — Почему бы не создать пользовательские типы записей 'product'
и 'add-on'
?

Потому что они будут конфликтовать со списками категорий, и мы вложили огромное количество времени, так что это не окупается, пока я не начну исправлять баги. Также постоянная ссылка выглядит красивее http://redesign.openeye.net/products/recorders/e-series/oe2-e480

Для потомков, мне всё ещё интересно, почему его код, который должен работать (и, кстати, работает у меня), не работает.

Не стесняйтесь поправлять мои выводы. Я в целом иду на ощупь в этом процессе.

@Zach Shallbetter - Это вполне возможно сделать "красивые" URL с пользовательскими типами записей, просто к сведению.

Замените get_template_part( 'loop' );
на get_template_part( 'loop','page' );
или вручную вставьте цикл напрямую в этот шаблон и проверьте, в этом ли проблема. В остальном ваш код правильный.
*примечание - Предполагаю, что ваш файл цикла содержит некоторые условные проверки для определения способа отображения записей в разных контекстах, которые не выполняются для вашего запроса страницы, поэтому ничего не отображается.

Да, я тоже думал, что всё правильно, но вообще не возвращает никаких результатов. Даже если страница есть в шаблоне. Как минимум, должен возвращаться заголовок страницы. Интересно, может я что-то упускаю.

Я создал страницу с заголовком "CM-145" и скопировал/вставил твой код. Когда я проверяю $wp_query, он действительно возвращается, но цикл, который ты привёл здесь, не работает без вызова the_post();
сначала. Для проверки я бы использовал print_r($wp_query);
, чтобы понять, проблема в запросе или в цикле.
