WordPress: obține valoarea meta după cheia meta

13 mar. 2013, 17:57:26
Vizualizări: 37.2K
Voturi: 4

Cum să obții valoarea meta după cheia meta

Vreau să obțin valoarea după cheia meta. Iată ce am încercat până acum:

   $args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'meta_key' => 'picture_upload_1'
);
$dbResult = new WP_Query($args);

var_dump($dbResult);

dar nu primesc valoarea meta

6
Comentarii

mulțumesc, dar cum am menționat în întrebare. am nevoie să obțin valoarea meta după cheia meta. Nu am ID-ul postării!

meWantToLearn meWantToLearn
13 mar. 2013 18:14:10

dacă nu ai ID-ul postării, cum știi care valoare meta cauți dacă mai multe postări au acea cheie asociată cu ele? ce plănuiești să faci cu valorile meta?

Milo Milo
13 mar. 2013 18:20:42

scriu un plugin, acesta are un custom post type și un shortcode care acceptă un parametru. Când utilizatorul salvează custom post-ul, stochez cheia ca slideshow_1, unde 1 va fi o cheie unică aleatorie. Când utilizatorul folosește shortcode-ul [images id=1], voi adăuga 1 la slideshow_ și voi rula o interogare pentru a obține valoarea meta, care conține calea imaginii

meWantToLearn meWantToLearn
13 mar. 2013 18:21:53

asta nu răspunde la niciuna dintre întrebările mele.

Milo Milo
13 mar. 2013 18:23:04

nu vor exista mai multe postări cu aceeași cheie, cheia va fi unică

meWantToLearn meWantToLearn
13 mar. 2013 18:24:59
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 3
1

WP_Query selectează postări și nu valorile meta, motiv pentru care nu obții valoarea. Poți folosi ID-ul postării returnat pentru a obține valoarea astfel:

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => 1,
    'meta_key' => 'picture_upload_1'
);
$dbResult = new WP_Query($args);
global $post;
if ($dbResult->have_posts()){
   $dbResult->the_post();
   $value = get_post_meta($post->ID,'picture_upload_1',true);
}

Acest cod va obține valoarea meta a ultimei postări publicate care are un câmp personalizat numit picture_upload_1.

O altă opțiune este să creezi o interogare personalizată, astfel:

global $wpdb;
$value = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s LIMIT 1" , $meta_key) );
13 mar. 2013 18:25:08
Comentarii

este super, dar de ce trebuie să facem global $post și $dbResult->the_post(); și de ce post_content este gol când folosim funcția $dbResult->get_posts();

mohsin mohsin
20 oct. 2017 18:04:45
2

Obțineți toate valorile meta_key de oriunde:

global $wpdb;
$meta_key = 'picture_upload_1';

$data = $wpdb->get_results($wpdb->prepare( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) , ARRAY_N  );

$result = [];
foreach($data as $array){
    $result[] = $array[0];
}

print_r($result);
14 aug. 2020 19:38:46
Comentarii

De ce mai parcurgi acel array încă o dată?

fuxia fuxia
15 aug. 2020 02:56:14

Pentru că array-ul original conține array-uri imbricate (array multidimensional)

Hisham Dalal Hisham Dalal
15 aug. 2020 10:21:39
0

Ai putea lua în considerare stocarea valorii în tabelul wp_options în loc de wp_postmetas.

Astfel, ai putea utiliza get_option cu cheia personalizată pentru a seta și prelua valoarea ta.

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

14 aug. 2020 19:53:08