サポート » テーマ » 同じDB内の別サイトから、カスタムフィールドの画像などを読み込んだ際のパスを変更したい

  • 解決済 twilightranigh

    (@twilightranigh)


    メインのWP(A)と同じドメイン内のサブディレクトリに、別でサブのWP(B)をインストールしています。DBも同じで、接頭辞だけが違います。

    そこで、サブのWP(B)の一部に、メインのWP(A)の情報の一部を読み込ませたく、下記のコードでデータを取得しています。

    テキストなどの読み込みはメインのWP(A)のものを問題なく取得できているのですが、
    カスタムフィールドの画像のパスなどが、メインのWP(A)のものではなく、サブのWP(B)のサイトのものになってしまっており、この部分を変更する方法がわからず困っております。

    こちらのウェブページ(https://2inc.org/blog/2015/10/23/5059/)を参考にさせていただき、
    アップロードディレクトリなどを書き換える必要がありそう‥と思い、functions.php に下記のコードを追加したりしてみましたが、画像のパスには変化はありませんでした。

    PHPやDBに関する知識が少ないため、質問の仕方に拙い部分があるかと思い、
    大変恐縮ではございますが、どうぞよろしくお願いいたします。

    ■該当のソースコード

    <?php
    
    global $wpdb;
    
    $news = array();
    
    $args = array(
      'post_type' => 'post',
      'post_status' => 'publish'
    );
    
    $temp_prefix = 'wp_'; //テーブルプリフィックスを切り替え
    $old_prefix = $wpdb->set_prefix($temp_prefix);
    wp_cache_init();
    add_filter( 'upload_dir', '_switch_blog_upload_dir');
    
    $wpq = new WP_Query($args);
    if ($wpq->have_posts()) {
      while ($wpq->have_posts()) {
        $wpq->the_post(); ?>
    
    <!-- ここにテキストや画像を読み込み -->
    
    <?php
      }
    }
    
    // 初期状態に戻す
    $wpdb->set_prefix($old_prefix);
    wp_cache_init();
    remove_filter( 'upload_dir', '_switch_blog_upload_dir' );
    ?>

    ■functions.php

    function _switch_blog_upload_dir( $upload_dir ) {
        $pattern = '/^(https?:\/\/[^\/]+)/';
        $replacement = home_url();
        $upload_dir['url'] = preg_replace( $pattern, $replacement, $upload_dir['url'] );
        $upload_dir['baseurl'] = preg_replace( $pattern, $replacement, $upload_dir['baseurl'] );
        $upload_dir['path'] = preg_replace( $pattern, $replacement, $upload_dir['path'] );
        $upload_dir['basedir'] = preg_replace( $pattern, $replacement, $upload_dir['basedir'] );
        return $upload_dir;
    }
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • カスタムフィールドの画像のパス

    とは何ですか?
    肝心な部分の説明が抜けているように思いますが?

    ご指摘ありがとうございました。わかりづらく申し訳ございません。

    “カスタムフィールドの画像のパス”とは、
    上記の「<!– ここにテキストや画像を読み込み –>」の部分で、
    例えば、下記のコードを実行した場合の、
    imgタグのsrcの部分のソースを指しております。

    <?php
    if (get_field('画像')) { 
    $attachment_id = get_field('画像');
    $size = "full"; // (thumbnail, medium, large, full or custom size)
    $image = wp_get_attachment_image_src( $attachment_id, $size );
    ?>
    
    <img src="<?php echo $image[0]; ?>">
    
    <?php } ?>

    ■imgタグのsrc

    現状:http://abc.com/subdirectory/wp-content/uploads/2017/07/01.png
    このようにしたい:http://abc.com/wp-content/uploads/2017/07/01.png

    • この返信は4 ヶ月、 1 週前に  twilightranigh さんが編集しました。
    • この返信は4 ヶ月、 1 週前に  twilightranigh さんが編集しました。

    画像の返り値はURLですよね?
    以下で良いと思いますがどうでしょう?

    <?php
    if (get_field('画像')) { 
    $attachment_id = get_field('画像');
    $image = str_replace( 'subdirectory/', '', $attachment_id );
    ?>
    <img src="<?php echo $image; ?>">
    <?php } ?>

    >manbo様

    ご返信ありがとうございます。

    画像の返り値は「画像ID」に設定しております。

    ちなみに、srcの値は正確には下記のようにしたいと考えております。
    (”このようにしたい”のほうに/wp/というディレクトリを一つ追加いたしました)

    ■imgタグのsrc(修正)

    現状:http://abc.com/subdirectory/wp-content/uploads/2017/07/01.png
    このようにしたい:http://abc.com/wp/wp-content/uploads/2017/07/01.png

    そこで、下記のようにすることで解決いたしました。
    アドバイス・ご協力いただき誠にありがとうございました。深く御礼申し上げます。

    <?php
    if (get_field('画像')) { 
    $attachment_id = get_field('画像');
    $image = wp_get_attachment_image_src( $attachment_id, $size );
    $imageURL = str_replace( 'subdirectory/', 'wp/', $image[0] );
    ?>
    <img src="<?php echo $imageURL; ?>">
    <?php } ?>
    • この返信は4 ヶ月、 1 週前に  twilightranigh さんが編集しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。