zachshallbetter
  • 0
Учитель

Извлекать настраиваемые поля из настраиваемых сообщений в цикле

  • 0

Это прозвучит немного глупо. У меня есть ситуация, когда я показываю список продуктов, которые пользователь выбирает для перехода на страницу продуктов. У меня также есть документы и видео, для которых я создал пользовательские типы сообщений и поля. Мне нужно запустить второй цикл в текущем цикле, чтобы извлечь настраиваемое поле из пользовательского типа сообщения. Если это имеет смысл?

например, это цикл «каталог» продукта (извините за мои хакерские приемы)

<div id="content" role="main">
<?php 
    $parent = $post->ID; 
    query_posts('post_type=page&order=ASC&orderby=title&post_parent='.$parent);?>
<?php while (have_posts()) : the_post(); ?>
<?php $model = get_the_title(); ?>
<div class="product-selection-container round">
    <h2 class="directory-title"><a href="<?php the_permalink() ?>"><?php echo get_post_meta($post->ID, "product-main-title", true); ?></a></h2>
    <h3>Model <?php echo $model ?></h3><!-- the model -->
    <?php echo my_excerpts(); ?>
    <ul class="round">
        <li><a href="<?php the_permalink() ?>">Learn More</a></li>
        <li><a href="">Specification Sheet</a></li>
        <li><a href="">Video Tour</a></li>
    </ul>
</div>
</div>
<?php endwhile; ?>

И это цикл, который я обычно использую для добавления документов на страницы (за исключением пользовательского шаблона цикла).

<?php
        $documents = array('numberposts' => 5, 'post_type' => 'documents', 'category_name' => $model);
        query_posts( $documents );
        get_template_part( 'loop', 'documents' );
        wp_reset_query();
 ?>

Я попытался объединить два, где бы я добавил второй цикл, <li><a href="">Specification Sheet</a></li> но это привело к тому, что страница работала в вечном цикле.

Альтернативный вариант, который я искал, заключался в том, чтобы извлечь одно настраиваемое поле из типа сообщения без создания цикла. Например.

get post_type => document, meta_key => document-type, meta_value => spec-sheet

Любая помощь будет оценена по достоинству.

Share
  1. Посмотрите документы цикла в кодексе, для вложенных циклов или нескольких циклов на одной странице не используйте query_posts, используйте что-то вроде $my_query = new WP_Query.

    • 0
  2. Я предполагаю, что вы используете что-то вроде этого… чтобы получить желаемое пользовательское значение. Как только вы окажетесь внутри цикла.

    $customfieldvalue = get_post_meta($post->ID, "metakeyname", true);
    

    Поскольку вы используете $model в качестве основы для запроса. Вы можете создать функцию, которая будет запрашивать то, что вы хотите, а затем сбрасывать текущий запрос. Вы могли бы использовать его где угодно. Вот шаблон.

    function modelquery($model) {
        global $wp_query, $post, $paged, $post_count;
    
            // YOUR QUERY
            $query_args = array (
                'numberposts' => 5, 
                'post_type' => 'documents', 
                'category_name' => $model
            );    
    
            // SAVE CURRENT QUERY
            $temp = $wp_query;
            $wp_query= null;    
    
            // CREATE NEW QUERY
            $wp_query = new WP_Query();
            $wp_query->query($query_args);      
    
            // THE LOOP, DO WHAT YOU HAVE TO DO HERE
            while ($wp_query->have_posts()) : $wp_query->the_post();    
                $customfieldvalue = get_post_meta($post->ID, "metakeyname", true);
                echo $customfieldvalue;
            endwhile;   
    
            // SWAP BACK THE PREVIOUS QUERY
            $wp_query = null; 
            $wp_query = $temp;
            wp_reset_query();       
    
    
    }
    
    • 0

Оставить ответ

You must login to add an answer.