質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

受付中

別のwordpressの投稿情報を取得したい wpdb

su_da221
su_da221

総合スコア59

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

1回答

0グッド

0クリップ

178閲覧

投稿2022/11/28 07:44

前提

同じサーバー上の違うデータベースにあるwordpressの投稿情報を取得したいです。
RSSやなんとかAPIでは取得できませんでした。

現在はデータベースから引っ張ってくるか、
こちらのサイトをコピペして使用するかどちらも試していますがうまくいきません。

取得したい情報
タイトル
カスタムフィールドの値(ACF ギャラリーフィールド)
カスタムタクソノミーのターム

実現したいこと

別のwordpressの情報を取得したい
タームでの絞り込み検索も予定しております

【データベースから取得する場合】

該当のソースコード

php

1 $query = "SELECT * FROM {$table_posts} WHERE post_status = '" . $post_status . "' AND post_type = '" . $post_type . "' ORDER BY post_date DESC LIMIT {$limit}"; 2 3$result = $another_wpdb->get_results( $another_wpdb->prepare( $query ) ); 4// echo '\n 記事情報 \n'; 5var_dump($result); 6 7foreach ($result as $post) : 8 9 $post_id = $post->ID; 10 11 // 投稿の画像と費用のフィールドを取得 12 $table_postmeta = 'wp_postmeta'; 13 $query = "SELECT * FROM `wp_postmeta` WHERE `post_id` = '" . $post_id . "' AND `meta_key` = 'フィールドキー1'"; 14 $postmetaResult = $another_wpdb->get_results( $another_wpdb->prepare( $query ) ); 15 16 echo '\\n カスタムフィールド情報 \\n'; 17 var_dump($postmetaResult);

→ 取得できた情報

array(2) { [0]=> object(stdClass)#9442 (4) { ["meta_id"]=> string(7) "2280031" ["post_id"]=> string(5) "54800" ["meta_key"]=> string(11) "gallery_img" ["meta_value"]=> string(150) "a:9:{i:0;s:5:"54802";i:1;s:5:"54801";i:2;s:5:"54803";i:3;s:5:"54805";i:4;s:5:"54804";i:5;s:5:"54806";i:6;s:5:"54808";i:7;s:5:"54807";i:8;s:5:"54809";}" } [1]=> object(stdClass)#9441 (4) { ["meta_id"]=> string(7) "2280049" ["post_id"]=> string(5) "54800" ["meta_key"]=> string(16) "detail_data_cost" ["meta_value"]=> string(9) "550万円" } }

ギャラリーフィールドを使用しており、

["meta_value"]=> string(150) "a:9:{i:0;s:5:"54802";i:1;s:5:"54801";i:2;s:5:"54803";i:3;s:5:"54805";i:4;s:5:"54804";i:5;s:5:"54806";i:6;s:5:"54808";i:7;s:5:"54807";i:8;s:5:"54809";}" }

この欄の「54802」「54801」…を取得したいですが、この取得方法がわからずストップ

【参考サイトからの方法】
functions.phpはデータベース情報以外コピペ
テンプレートファイルで

php

1<?php 2 3 if ( !empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] === 'ダミー' ) : ?> 4 <?php habakiri_switch_blog(); ?> 5 <?php 6 7 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 8 if ($selected_style) { 9 // 絞り込み条件を追加 10 $taxquery_selected_style = array( 11 'taxonomy' => 'all_point', 12 'terms' => $selected_style, 13 'field' => 'slug', 14 ); 15 } 16 $args = array( 17 'post_type' => 'gallery', 18 'orderby' => 'date', 19 'order' => 'DESC', 20 'posts_per_page' => 10, 21 'tax_query' => $taxquery_selected_style, 22 ); 23 24 25 $blog_posts = get_posts($args); ?> 26 <?php if ( $blog_posts ) : ?> 27 <?php foreach ( $blog_posts as $post ) : setup_postdata( $post ); ?> 28 <?php 29 $terms = get_the_terms($post->ID,'all_point'); 30 var_dump($terms); 31 32 $image = ''; 33 $gallery_image = get_field('gallery_img'); 34 35 if ($gallery_image) : 36 $img_src = $gallery_image[0]['url']; 37 $image = '<img src="' . $img_src . '" alt="' . get_the_title() . '">'; 38 else : 39 $image = '<img src="/content/themes/common/images/gallery/thumb_default.gif" alt="">'; 40 endif; 41 42 var_dump($post); 43 ?> 44 45 <h2><?php the_title(); ?></h2> 46 47 <p> 記事 48 <?php the_ID(); ?></p> 49 50 <?php the_field('detail_data_cost'); ?> 51 52 <?php endforeach; wp_reset_postdata(); ?> 53 54 55 <?php endif; ?> 56 <?php habakiri_restore_current_site(); ?> 57 <?php endif; ?>

タクソノミー「all_point」に紐づくタームの一覧や記事に紐づくカスタムフィールドの値なども取得できませんでした。

試したこと

上記を試しました。

補足情報(FW/ツールのバージョンなど)

WordPress 6.0

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ACFの値がシリアライズされているため、meta_valueを読み込んだ後にmaybe_unserializeで非シリアライズ化するといいかと思います。
また、ACFをRestAPIで扱うためのプラグインとしてACF to REST APIがあります。
こちらでRestAPI経由でデータを取得したほうが簡単かもしれません。

*追記
上のサイトを参考にした場合、タームの取得方法ですが

PHP

1 <?php habakiri_switch_blog(); ?> 2 <?php $categories = get_terms( array( 'taxonomy'=>'category', 'get'=>'all' ) ); 3 print_r($categories); 4 ?>

habakiri_switch_blog実行後にget_termsで普通に取得できました

投稿2022/11/28 08:20

編集2022/11/29 00:28
gogoweb_ikeda

総合スコア1416

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

su_da221

2022/11/28 08:40

ACFに関しては解決できました。 コメントいただいたのにすみません。 RestAPIは取得したいカスタム投稿が見つかりませんになってしまうため諦めました。 https://2inc.org/blog/2015/10/23/5059/ こちらのサイトの取得方法でタームを取得する方法が分かりましたら教えていただきたいです。
gogoweb_ikeda

2022/11/28 08:52

カスタム投稿が取得できないのはregister_post_typeで登録時にshow_in_restをtrueにしてみると表示されるかもしれません。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。