it-swarm.com.de

The use of new wp_query in a user field is also that the content of the mainposts not shown

Ich habe einen benutzerdefinierten Beitragstyp für Dateien, die ich mit einer neuen WP_Query aufzulisten versuche.

Es funktioniert gut, wenn ich den Shortcode innerhalb des Hauptpost-Inhalts hinzufüge. Wenn ich jedoch den Shortcode einem benutzerdefinierten Feld hinzufüge (das ich auf der Seite zusammen mit dem Hauptinhalt als sekundäre "Spalte" angezeigt habe), verschwindet der Hauptinhalt!

Wenn ich die Zeilen "while ... have_posts ()" und "endwhile" auskommentiere, wird der Hauptinhalt angezeigt. Selbst wenn Sie jede zweite Zeile auskommentieren, wird der Hauptinhalt ausgeblendet, sofern Sie nicht auch das "while" entfernen.

Ich bin mir ziemlich sicher, dass es mit der Verwendung von WP_Query zu tun hat (irgendwie hijackt es die Schleife), auch wenn dies nicht der Fall sein sollte.

Fehlt mir etwas?

Hier ist der Shortcode:

   function ia_news_display_test($atts){ // [ia_news cat='category' num='numbertodisplay']

extract(shortcode_atts(array(
        'cat' => 'any',
        'num' => '2',
        ), $atts));

$dirloop = new wp_query( array( 
    'post_type' => 'ia_news', 
    'category_name' => $cat,
    'posts_per_page' => $num,
    'orderby' => 'menu_order',
    'order' => 'ASC'
));

if ($dirloop->have_posts()){
    $content = "<ul class='ia_news_list'>\n";
    while ( $dirloop->have_posts() ) : $dirloop->the_post();
        $custom = get_post_custom($post->ID);
        $file_id = $custom["upload_file"][0];
        $file_begin = $custom["begin_date"][0];
        $file_end = $custom["end_date"][0];
        if ('' != $file_end){$file_end = " to ".$file_end;}
        $file_url = wp_get_attachment_url($file_id);

            if ('' != $file_url) { //CHECK FOR EXISTENCE OF FILE URL
               $content .= "<li class='ia_nl'><a href='".$file_url."'>".$cat." ".$file_begin.$file_end."</a></li>\n";
            }
    endwhile;
    $content .= "</ul>\n";
} else { $content = "nothing"; }

return $content;

}

1
jfacemyer

Sie verwenden get_posts, der eine Reihe von Posts zurückgibt, die Sie mit foreach durchlaufen können, jedoch nicht mit the_loop. Versuchen Sie diese Version des Codes:

function ia_news_display_test($atts){ // [ia_news cat='category' num='numbertodisplay']

extract(shortcode_atts(array(
        'cat' => 'any',
        'num' => '2',
        ), $atts));

$dirloop = new WP_Query( array( 
    'post_type' => 'ia_news', 
    'category_name' => $cat,
    'posts_per_page' => $num,
    'orderby' => 'menu_order',
    'order' => 'ASC'
));

    if ($dirloop->have_posts())
    {
        $content = "<ul class='ia_news_list'>\n";
        while ( $dirloop->have_posts() ) : $dirloop->the_post();

            $file_id = get_post_meta(get_the_id(), "upload_file", true);
            $file_begin = get_post_meta(get_the_id(), "begin_date", true);
            $file_end = get_post_meta(get_the_id(), "end_date", true);

            if ('' != $file_end)
            {
                $file_end = " to ".$file_end;
            }
            $file_url = wp_get_attachment_url($file_id);

            if ('' != $file_url) 
            {   
                //CHECK FOR EXISTENCE OF FILE URL
                $content .= "<li class='ia_nl'><a href='".$file_url."'>".$cat." ".$file_begin.$file_end."</a></li>\n";
            }
        endwhile;
        $content .= "</ul>\n";
    } 
    else
    { 
        $content = "nothing";
    }
    wp_reset_postdata();

    return $content;
}

add_shortcode('ia_news_test', 'ia_news_display_test');

Wenn Sie den benutzerdefinierten Feldnamen upload_file haben, versuchen Sie, get_post_meta zu verwenden, anstatt einen langen Schnitt zu machen, wie Sie es mit Code tun.

4

Sie sollten wp_reset_postdata() verwenden, bevor Sie die Funktion verlassen. Ähnlich wie wp_reset_query(), stellt jedoch den globalen $post anstelle von $wp_the_query wieder her.

0
helenhousandi