Cum să setezi postări recomandate folosind o căsuță de selectare în ecranul de editare a postării?

17 sept. 2011, 22:42:46
Vizualizări: 15K
Voturi: 7

Vreau să fac selecția unei postări recomandate să fie posibilă prin bifarea unei căsuțe în ecranul de editare ȘI să pot prelua aceste articole recomandate doar dintr-o anumită categorie?

Pe scurt, ce caut:

  • setare postare recomandată

  • buclă prin postările recomandate dintr-o categorie specifică (nu toate postările)

Cineva poate ajuta? Mulțumesc anticipat :)

0
Toate răspunsurile la întrebare 2
7
10

Puteți face acest lucru urmând acești pași:

  1. Adăugați o cutie meta personalizată la articolele dumneavoastră
  2. Creați o funcție pentru a salva metadatele folosind acțiunea save_post
  3. Adăugați argumentul de interogare 'meta_key' la orice interogare folosiți.

Puneți acest cod în fișierul functions.php al temei dumneavoastră:

function register_post_assets(){
    add_meta_box('featured-post', __('Articol Recomandat'), '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'>".__('Articol recomandat?', 'foobar')."</label>";
    echo "<input type='checkbox' name='_featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";
}

function save_featured_meta($post_id){
    // Faceți validări aici pentru tipul de post, nonces, autosave etc...
    if (isset($_REQUEST['_featured-post']))
        update_post_meta(esc_attr($post_id, '_featured-post', esc_attr($_REQUEST['_featured-post']))); 
        // Folosesc _ înaintea câmpurilor personalizate, astfel încât să fie editabile doar în formularul meu și nu în UI-ul standard pentru câmpuri personalizate
}
add_action('save_post', 'save_featured_meta');

Apoi, în fișierul șablon, folosiți următorul cod pentru bucla principală:

    $args = array(
        'meta_key' => '_featured-post', // include prefixul underscore în numele cheii
        'meta_value' => 1
    );
    // Numărul de articole afișate ar fi determinat în Setări->Citire
    query_posts($args);

    if(have_posts()): while(have_posts()): the_post();
        // Faceți ce aveți de făcut aici

    endwhile; else:

    endif;

DOAR PENTRU EXEMPLU: Pentru bucle personalizate (dacă rulați mai multe bucle pe o singură pagină), ați folosi acest cod:

    $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;
18 sept. 2011 04:58:35
Comentarii

De ce ai rula un al doilea (nou) WP Query? Nu ar fi suficient să verifici valoarea meta?

kaiser kaiser
18 sept. 2011 06:01:32

Nu am spus niciodată să creezi un al doilea loop. I-am arătat ca exemplu, în cazul în care ar rula mai multe loop-uri pe o singură pagină. Codex spune să folosești query_posts pentru loop-ul principal și new WP_Query pentru un al doilea loop personalizat. Neînțelegerea nu merita un -1. :)

Brian Fegter Brian Fegter
18 sept. 2011 06:21:37

Inversat. Apropo: Aruncă o privire la acest răspuns. De asemenea, trebuie remarcat faptul că poate cea mai bună alegere este să folosești filtre pentru modificarea Query-ului.

kaiser kaiser
18 sept. 2011 08:08:09

Aș presupune că majoritatea implementărilor de postări "recomandate" ar folosi o buclă secundară, mai degrabă decât bucla principală - de obicei sub forma unei liste de postări recomandate, sau a unui slider care afișează postările recomandate, etc.

Chip Bennett Chip Bennett
19 oct. 2011 19:43:20

Doar o observație despre codul care merge în functions.php, cred că ar avea nevoie de un ")" în plus la linia 15. Posibil?

Peanuts Peanuts
4 iul. 2013 20:13:53

Băieți, la mine nu actualizează câmpul personalizat... ce ar putea fi?

Peanuts Peanuts
4 iul. 2013 21:05:14

@BrianFegter, știu că acest răspuns este foarte vechi, dar acum nu mai funcționează. Adică primesc opțiunea "Feature this post?" cu caseta de bifare pe pagina postării (la partea de jos a postării), am selectat și am actualizat ceea ce a funcționat perfect, dar acum când încerc să afișez pe pagina mea postările selectate, acest lucru nu mai funcționează.

Naren Verma Naren Verma
14 nov. 2019 11:00:10
Arată celelalte 2 comentarii
0

Am încercat să rulez acest cod și m-a ajut foarte mult pentru afișarea articolului meu recomandat pe pagina principală pentru tipul personalizat de postare "case study". Mulțumesc mult.

         <?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">Află mai multe</a>
                    </article> 

                    <a href="/case-studies" class="btn-primary">Vezi toate studiile de caz</a>

                </div> 

            <?php 
                endwhile; 
                    else: 'Nu există conținut adăugat';
            endif; ?>
    </div>
</div>  

3 apr. 2019 05:14:47