Wie werden ausgewählte Beiträge mithilfe des Kontrollkästchens im Beitragsbearbeitungsbildschirm festgelegt?

7

Ich möchte die Auswahl eines vorgestellten Beitrags nur durch Aktivieren eines Kontrollkästchens im Bearbeitungsbildschirm vornehmen UND in der Lage sein, diese vorgestellten Artikel nur aus einer bestimmten Kategorie abzurufen.

Kurz gesagt, was ich suche:

  • Set vorgestellten Beitrag

  • Loop Throw empfohlene Beiträge in einer bestimmten Kategorie (nicht alle Beiträge)

Irgendeine Hilfe? und danke im voraus :)

Bialy
quelle

Antworten:

10

Sie können dies tun, indem Sie die folgenden Schritte ausführen:

  1. Fügen Sie Ihren Posts ein benutzerdefiniertes Meta-Feld hinzu
  2. Erstellen Sie eine Funktion zum Speichern der Metadaten mit der Aktion save_post
  3. Fügen Sie das Abfrageargument 'meta_key' zu jeder von Ihnen verwendeten Abfrage hinzu.

Fügen Sie dies in Ihre Datei functions.php ein:

function register_post_assets(){
    add_meta_box('featured-post', __('Featured Post'), 'add_featured_meta_box', 'post', 'advanced', 'high');
}
add_action('admin_init', 'register_post_assets', 1);

function add_featured_meta_box($post){
    $featured = get_post_meta($post->ID, '_featured-post', true);
    echo "<label for='_featured-post'>".__('Feature this post?', 'foobar')."</label>";
    echo "<input type='checkbox' name='_featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";
}

function save_featured_meta($post_id){
    // Do validation here for post_type, nonces, autosave, etc...
    if (isset($_REQUEST['_featured-post']))
        update_post_meta(esc_attr($post_id, '_featured-post', esc_attr($_REQUEST['_featured-post']))); 
        // I like using _ before my custom fields, so they are only editable within my form rather than the normal custom fields UI
}
add_action('save_post', 'save_featured_meta');

Verwenden Sie dann in Ihrer Vorlagendatei Folgendes für die Hauptschleife:

    $args = array(
        'meta_key' => '_featured-post', // include underscore prefix in key name
        'meta_value' => 1
    );
    // The number of posts displayed would be determined under Settings->Reading
    query_posts($args);

    if(have_posts()): while(have_posts()): the_post();
        // Do your bidding here

    endwhile; else:

    endif;

NUR ZU BEISPIELZWECKEN: Für benutzerdefinierte Schleifen (wenn mehrere Schleifen auf einer Seite ausgeführt werden) würden Sie Folgendes verwenden:

    $args = array(
        'posts_per_page' => 5,
        'meta_key' => '_featured-post',
        'meta_value' => 1
    );

    $featured = new WP_Query($args);

    if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post();
        the_title();
        the_content();
    endwhile; else:

    endif;
Brian Fegter
quelle
1
Warum sollten Sie eine zweite (neue) WP-Abfrage ausführen? Wäre es nicht genug, den Metawert zu überprüfen?
Kaiser
2
Ich habe nie gesagt, dass ich eine zweite Schleife erstellen soll. Ich habe ihm zum Beispiel gezeigt, ob er mehrere Schleifen auf einer Seite ausführen soll. Codex sagt, dass query_posts für die Hauptschleife und new WP_Query für eine zweite benutzerdefinierte Schleife verwendet werden sollen. Das Missverständnis hatte keine -1 verdient. :)
Brian Fegter
1
Rückgängig gemacht. Übrigens: Sehen Sie sich diese Antwort an. Es sollte auch beachtet werden, dass die vielleicht beste Wahl darin besteht, Filter zum Ändern der Abfrage zu verwenden.
Kaiser
1
Ich würde annehmen, dass die meisten Implementierungen von "vorgestellten" Posts eine sekundäre Schleife anstelle der primären Schleife verwenden würden - normalerweise in Form einer Liste von vorgestellten Posts oder eines Schiebereglers, der die vorgestellten Posts usw. anzeigt
Chip Bennett,
1
Nur ein Hinweis zu dem Code, der auf functions.php steht, ich denke, es braucht ein zusätzliches ")" in Zeile 15. Möglich?
Erdnüsse
0

Ich habe versucht, diesen Code auszuführen, und er hilft mir sehr dabei, meinen vorgestellten Beitrag auf meiner Homepage für meinen benutzerdefinierten Beitragstyp für Fallstudien anzuzeigen. Vielen Dank.

         <?php $args = array( 
                'post_type' => 'case_studies',
                'posts_per_page' => 1,
                'meta_key' => 'featured_post',
                'meta_value' => 1
            );

            $featured = new WP_Query($args);

            if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post(); ?>
                <div class="c-image"><?php the_post_thumbnail('large'); ?></div>
                <div class="cstext">
                     <article>
                        <h2><?php the_title(); ?></h2>  
                        <span class="sub-title"> USAF SOCONS </span>
                        <?php the_content(); ?>
                        <a href="<?php echo get_permalink(); ?>" class="readmore">Learn More</a>
                    </article> 

                    <a href="/case-studies" class="btn-primary">View all Case Studies</a>

                </div> 

            <?php 
                endwhile; 
                    else: 'No Content Added';
            endif; ?>
    </div>
</div>  

user164332
quelle