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

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

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

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

WordPress

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

Q&A

1回答

586閲覧

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

su_da221

総合スコア59

phpMyAdmin

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

WordPress

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

0グッド

0クリップ

投稿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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

総合スコア1426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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にしてみると表示されるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問