Cum poți afla tipul de postare personalizată dintr-o pagină de arhivă?

17 mar. 2013, 21:02:10
Vizualizări: 46.1K
Voturi: 9

În site-ul meu am trei tipuri de postări personalizate: scripts, scenes și plugins. Când vizitezi pagina de arhivă a unui singur tip de postare (de exemplu, accesând mysite.com/plugins) se afișează corect toate postările de acel tip.

În archive.php, cum pot afla ce tip de postare personalizată vizualizează utilizatorul în acest moment?

Am încercat următorul cod:

<?php 
    global $post; 
    $postTypeLabels = get_post_type_labels(get_post_type_object($post)); 
    echo var_export($postTypeLabels); 
?>

Dar primesc următorul rezultat:

Post name is stdClass::__set_state(
  array( 'name' => 'Posts', 
    'singular_name' => 'Post', 
    'add_new' => 'Add New', 
    'add_new_item' => 'Add New Post', 
    'edit_item' => 'Edit Post', 
    'new_item' => 'New Post', 
    'view_item' => 'View Post', 
    'search_items' => 'Search Posts', 
    'not_found' => 'No posts found.', 
    'not_found_in_trash' => 'No posts found in Trash.', 
    'parent_item_colon' => NULL, 
    'all_items' => 'All Posts', 
    'menu_name' => 'Posts', 
    'name_admin_bar' => NULL, 
  )
)

Bănuiesc că, fiind într-o pagină de arhivă, variabila $post nu este corectă.

P.S. Știu că pot crea archive-plugins.php pentru arhiva de plugin-uri. Din păcate, am instalat o temă care, din câte știu, într-un fel împiedică acest lucru. Deci această opțiune nu este disponibilă.

0
Toate răspunsurile la întrebare 6
4
15

Există mai multe modalități de a face acest lucru. Puneți:

var_dump($wp_query->query,get_queried_object()); die;

În fișierul dvs. archive.php și ar trebui să vedeți două dintre aceste modalități.

$wp_query->query va avea componenta post_type pentru tipurile personalizate de postări. Aceasta nu va fi prezentă pentru tipul de postări post. get_queried_object va returna destul de multe date pentru tipurile personalizate de postări, dar null pentru tipul de postări post.

Există și unele etichete de șablon asociate care ar putea ajuta. is_post_type_archive îmi vine în minte.

Între acestea, ar trebui să aveți informațiile necesare pentru a construi orice logică aveți nevoie. Nu este clar din întrebarea dumneavoastră care ar trebui să fie rezultatul final, așa că nu pot să scriu prea multe.

Deoarece ați menționat în mod specific archive.php, acesta este fișierul pe care l-am testat. S-ar putea să aveți nevoie de cod diferit pentru un alt șablon, în special cu get_queried_object, care returnează informații foarte diferite în funcție de context.

17 mar. 2013 21:36:10
Comentarii

get_query_object() era ceea ce căutam. Practic, voiam să aflu cum să obțin numele tipului de postare personalizată, dar am preferat să păstrez întrebarea mai generală pentru alții. Mulțumesc.

pek pek
18 mar. 2013 01:18:27

Practic, asta am făcut pentru a obține numele tipului de postare personalizată în archive.php: $qObj = get_queried_object(); echo $qObj->labels->name;

pek pek
18 mar. 2013 01:19:25

Pentru cei care trec pe aici: aveți grijă când folosiți get_queried_object(). Dacă is_post_type_archive() este adevărat, dar utilizați și filtrare bazată pe taxonomie, termenul de taxonomie va avea prioritate. În acest caz, get_queried_object() va returna un obiect de termen de taxonomie în loc de un obiect de tip postare, chiar dacă is_post_type_archive() este adevărat.

Mark Mark
3 sept. 2015 18:14:32

get_queried_object() va returna un număr de obiecte diferite în funcție de context.

s_ha_dum s_ha_dum
3 sept. 2015 18:26:42
0
10

Iată funcția pe care o dorești:

/**
 * Obține numele tipului de postare curent pentru arhivă (ex: post, pagină, produs).
 *
 * @return String|Boolean  Numele tipului de postare pentru arhivă sau false dacă nu se află pe o pagină de arhivă.
 */
function get_archive_post_type() {
    return is_archive() ? get_queried_object()->name : false;
}
7 dec. 2017 02:26:25
0

Am observat acest lucru în câteva comentarii la răspunsul acceptat, dar am vrut să clarific acest punct pentru alții care parcurg aceste răspunsuri: Obiectul global $wp_query este mai sigur pentru a obține tipul de postare al arhivei. Mai exact din $wp_query->query['post_type'].

Puteți folosi get_queried_object(), dar are anumite limitări. În special dacă aveți alți parametri de interogare, cum ar fi termenii de taxonomie. În acest caz, get_queried_object() va returna un obiect WP_Term în loc de tipul de postare pe care probabil îl căutați.

Deci, dacă arhiva are o interogare simplă pentru un tip de postare, atunci get_queried_object() va funcționa. Dar pentru mai multă siguranță, folosiți obiectul global $wp_query.

Iată o funcție pe care o puteți utiliza în tema dumneavoastră pentru acest lucru:

/*
* SCOP    : Dacă există zero rezultate (sau alți parametri) în interogarea arhivei, get_post_type() nu este sigur pentru a determina tipul de postare al arhivei. Această funcție obține tipul de postare din obiectul global $wp_query.
* PARAM   : n/a
* RETURNE : boolean / string - slug-ul pentru tipul de postare din $wp_query, sau false dacă acesta nu este găsit.
* NOTE    :
*/
function jp_get_archive_post_type(){
    $post_type = false;

    global $wp_query;
    if( isset($wp_query->query['post_type']) ){
        $post_type = $wp_query->query['post_type'];
    }

    return $post_type;
}
29 oct. 2020 16:50:00
1
die(var_dump(get_taxonomy(get_queried_object()->taxonomy)->object_type));

Cred că acesta este răspunsul la întrebarea ta.

Programare plăcută!!!

21 oct. 2016 12:12:28
Comentarii

Returnează NULL, chiar și când am încercat pe o pagină de arhivă. Nu e bine.

WordPress Mechanic WordPress Mechanic
7 dec. 2016 12:17:46
3

De ce să nu folosești pur și simplu get_query_var('post_type')?

https://developer.wordpress.org/reference/functions/get_query_var/

10 feb. 2021 14:46:08
Comentarii

Încearcă să adaugi puțin mai multe informații în răspunsurile tale, acesta este mai degrabă un comentariu.

Tony Djukic Tony Djukic
10 feb. 2021 21:26:47

Păi nu există alte informații. Întrebarea este: În archive.php, cum pot afla ce tip de postare personalizată vizualizează utilizatorul în acest moment? Cu get_query_var('post_type') obții ce tip de postare personalizată vizualizează utilizatorul în acest moment

GantangPedia GantangPedia
11 feb. 2021 05:05:12

Sincer, acesta ar trebui să fie răspunsul acceptat

MikeeeG MikeeeG
11 oct. 2024 14:07:04
0

Nicio altă opțiune mai bună decât crearea unui șablon!

Sau includerea unui fișier de șablon atunci când este accesată arhiva acelui tip de postare personalizată (în funcție de URL-ul său).

Consultați link-urile de mai jos pentru mai multe informații:

http://codex.wordpress.org/Function_Reference/load_template

wordpress - încărcarea unui șablon pe baza URI-ului

http://www.mihaivalentin.com/wordpress-tutorial-load-the-template-you-want-with-template_redirect/

17 mar. 2013 21:57:29