মাল্টিসাইটে ব্লগ আইডি দ্বারা আপলোড URL পান


11

প্রশ্নের সারমর্মটি হল, আমি এর মতো একটি সমাধান খুঁজছি:

$blog_upload_dir_info = wp_upload_dir( $date, $blog_ID );
$blog_upload_url = $blog_upload_dir_info[ 'baseurl' ];

যেখানে $blog_IDবর্তমান ব্লগ আইডি থেকে আলাদা। সর্বাধিক »ডাব্লুপি-সুস্পষ্ট« সমাধান ব্যর্থ হয়:

switch_to_blog( $blog_ID );
$blog_upload_dir_info = wp_upload_dir();
restore_current_blog();

যেমন wp_upload_dir () ধ্রুবকটির উপর নির্ভর করে WP_CONTENT_URLযা বিকল্পটি upload_url_pathসেট না করা অবধি বর্তমান ব্লগের ইউআরএলকে গতিশীলভাবে সেট করে ।

অবশ্যই, আমি এই বিকল্পটি সেট করতে পারতাম, তবে এটি আমার কোডটিকে কংক্রিট সিস্টেম সেটিংসে জোড়া দেবে যার মধ্যে অনেকগুলি »WTF?« - সম্ভাবনা রয়েছে।

সুতরাং আমি এই বিকল্পটি কার্যত যুক্ত করার সিদ্ধান্ত নিয়েছি:

/**
 * Apply a value to the option blog_upload_url 
 * if there's not already one 
 *
 * @wp-hook option_upload_url_path
 * @param string $upload_url
 * @return string
 */
function get_real_blog_upload_url( $upload_url ) {

    if ( '' !== trim( $upload_url ) )
        return $upload_url;

    $upload_path = trim( get_option( 'upload_path' ) );
    $siteurl = get_option( 'siteurl' );
    $wp_content_dir = $siteurl . '/wp-content';

    if ( empty( $upload_path ) || 'wp-content/uploads' == $upload_path ) {
        $dir = $wp_content_dir . '/uploads';
    } elseif ( 0 !== strpos( $upload_path, ABSPATH ) ) {
        // $dir is absolute, $upload_path is (maybe) relative to ABSPATH
        $dir = path_join( ABSPATH, $upload_path );
    } else {
        $dir = $upload_path;
    }

    if ( empty( $upload_path ) || ( 'wp-content/uploads' == $upload_path ) || ( $upload_path == $dir ) )
        $upload_path = $wp_content_dir . '/uploads';
    else
        $upload_path = trailingslashit( $siteurl ) . $upload_path;


    return $upload_path;
}

যা আসলে একটি আংশিক কাঁটাচামচ wp_upload_dir()এবং যেমন ধ্রুবকগুলির উপর নির্ভর করে যা মোটেই ভাল অনুশীলন নয় । তদাতিরিক্ত একটি কাঁটাচামচ সবসময় আসল বাস্তবায়নের সাথে মিলিত হয় এবং যদি আসল পরিবর্তন হয় তবে একটিও কাঁটাচামচ ঠিক করতে হবে।

সুতরাং এই সমাধানটি নিখুঁত হওয়ার থেকে দূরে থাকায় আমি ভাবছি যে ব্লগ আইডি দ্বারা ইউআরএলগুলি আপলোড করার আরও ভাল কোনও উপায় আছে কিনা।


1
প্লাগইন বহুভাষিক প্রেসে এই সমস্যার জন্য আরও একটি সমাধান রয়েছে: github.com/inpsyde/m
ডেভিড

1
আমি মনে করি এটি সহায়ক যে আপনি অন্যান্য পাঠকদের উত্তর হিসাবে উত্সটি যুক্ত করেছেন। লিঙ্কটি স্থিতিশীল নয় এবং ডাব্লুপিএসই উত্তরের বাইরে।
8:30 এ বেল্টেজ করুন

1
@ বেল্জ মূলত আমি সম্মত। তবে এই মন্তব্যটির উপর নির্ভর করে আমার মন্তব্যটি কিছুটা অতিমাত্রায় উজ্জীবিত হয়েছিল। সমাধান এই সমস্যার জন্য একটি পদ্ধতির, তবে এর কিছু সীমাবদ্ধতা রয়েছে: github.com/inpsyde/m Multilingual-press / issues / 133 যখন আমরা কোনও সমাধান পেয়েছি, অবশ্যই আমি এখানেও তার উত্তর দেব।
ডেভিড

উত্তর:


1

শুধু get_option('upload_path')আপনার পরে ব্যবহার করবেন না কেন switch_to_blog( $blog_ID );? এটা কি এটা করে?



এটি দেখুন wp_upload_dir(): বিকল্পটি upload_pathকোনও ডিফল্ট বিকল্প নয় এবং এটি খালি থাকতে পারে। আরও এটি বিকল্প দ্বারা বাদ দেওয়া যেতে পারে upload_url_path। তবে এই wp_upload_dir()সমস্ত সম্ভাব্য সেটিংস এবং প্রান্তের কেসগুলি কভার করার জন্য এই সমস্যার উপযুক্ত সমাধান হ'ল সম্পূর্ণভাবে কাঁটাচামচ ।
ডেভিড

-1

সম্পূর্ণতার জন্য, সমস্যার সমাধানটি সমাধান না হওয়া পর্যন্ত এই সমাধানটি কার্যকর বলে মনে হচ্ছে:

add_action('switch_blog', function($new_blog, $prev_blog_id) {
    update_option( 'upload_url_path',  get_option('siteurl') . '/wp-content/uploads');
}, 10, 2);

1
হ্যাঁ, এটি স্ট্যান্ডার্ড ওয়ার্ডপ্রেস ইনস্টলগুলিতে কাজ করা উচিত। যাইহোক, আমি ডিবি রাইট অ্যাকশনটির কারণে এটি ব্যবহার করতে চাই না। এটি switch_to_blog()আরও ধীর করে দেবে।
ডেভিড

এটি এমনও ধরে নিচ্ছে যে আপনার সামগ্রীর ইউআরএল আসলে ডাব্লুপি-সামগ্রী / আপলোডস, এটি নাও হতে পারে।
rfair404
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.