web-dev-qa-db-fra.com

Comment sortir d'une option de base de données qui est un tableau dans un tableau get_posts?

Cela doit être assez simple, mais je suis perplexe. Et je vais peut-être y aller à reculons.

Comment puis-je générer une option de base de données qui est un tableau dans un tableau get_posts?

J'ai une option dans la base de données qui stocke des identifiants de post dans le format de tableau `1234,5678 '. Je peux les récupérer et leur faire écho

$options = get_option( 'pu_theme_options' );
$newspostids = $options['pu_textbox'];
echo $newspostids;

donc je sais que je reçois la sortie `1234,5678 '. La base de données "option" n'est qu'un texte, enregistré à partir d'un champ de formulaire dans les options de thème.

Ce que je dois faire est d’obtenir les données de cette option dans un tableau get_posts afin que je puisse afficher les publications par ID.

Ce dont j'ai besoin, c'est que get_posts fonctionne comme ceci:

$news = get_posts( array( 
            'post_type' => 'post', 
            'post__in'=> array(1234,5678)
            ) );

Et, évidemment, cela ne fonctionne pas, placer la variable directement dans le tableau et s'attendre à ce qu'il produise `1234,5678 ':

$news = get_posts( array( 
            'post_type' => 'post', 
            'post__in'=> array($newspostids)
            ) );

Alors, comment cela devrait-il fonctionner?

2
markratledge

Vous pouvez utiliser wp_parse_id_list() pour assainir votre liste d'identifiants de publication séparés par des virgules. Il est défini comme:

function wp_parse_id_list( $list ) {
    if ( !is_array($list) )
        $list = preg_split('/[\s,]+/', $list);

    return array_unique(array_map('absint', $list));
}

où nous pouvons voir qu'il renvoie aussi des valeurs de tableau uniques.

Notez que absint() est défini comme étant abs( intval() ) et que la sortie maximale diffère de intval() pour les systèmes 32 et 64 bits selon les docs PHP.

1
birgire

get_posts n'a pas de post__in "variable", c'est-à-dire dans wp_query, dans get_posts (ou get_pages), vous devez utiliser include, par exemple.

$news  = get_posts(
 array(
  'post_type' => 'post',
  'include' => $newspostids,
 )
);

https://codex.wordpress.org/Function_Reference/get_posts

0
Gareth Gillman