🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ سامان عزیزی
مشکل نمایش post meta پست تایپ‌های سفارشی
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۱۳ تیر ۱۴۰۲

سلام در نظر بگیرید ما یه post Type سفارشی داریم به اسم state و میخوایم برای اون postmeta‌ها رو نشون بدیم همون کاری که اینجا استاد کردن رو انجام دادم ولی متاسفانه به اون قسمت اضافه نمیشه


/* Create Custom Endpoint */
add_action('rest_api_init', 'create_custon_endpoint');
function create_custon_endpoint()
{
    register_rest_route(
        'wp/v2',
        '/states',
        array(
            'methods' => 'GET',
            'callback' => 'get_states',
        )
    );
    register_rest_field(
        'states',
        'statemeta',
        [
            'get_callback' => function () {
                return [
                    'masahat-zamin' => get_post_meta(get_the_ID(), 'masahat-zamin')
                ];
            }
        ]
    );
}
function get_states()
{
    global $wpdb;
    $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE post_type='state'", OBJECT);
    return $results;
}

سلام وقت بخیر

برای اضافه کردن پست تایپ کاستوم خودتون به api فقط کافیه جایی که دارین پست تایپتون رو تعریف میکنید show_in_rest رو true بزارین

function custom_post_type_books() {
    $args = array(
        'public'      => true,
        'label'       => 'Books',
        'show_in_rest' => true // فعال کردن REST API
        // سایر تنظیمات مورد نیاز را اینجا اضافه کنید
    );
    register_post_type( 'books', $args );
}
add_action( 'init', 'custom_post_type_books' );

بعدش با استفاده از register_rest_field متادیتای خودتون رو بهش اضافه کنید

ابوالفضل محجوب ۲۴ تیر ۱۴۰۲، ۱۱:۴۴

مشکل اینه اون پست تایپ رو من نساختم و توی خود قالب ساخته شده و کد فایل functions.php هم قفل هست و احتمالا این کد رو داخلش قرار ندادند این مورد

سامان عزیزی ۲۴ تیر ۱۴۰۲، ۱۱:۴۸

شما چون روت جدید ایجاد کردین و محتوی اش رو استاتیک گرفتین پس هرچی که بعدا اضافه کنید به محتوی اش اضافه نمیشه شما میتونید تو فانکشن get_states که محتوی روت رو تشکیل دادین قبل از اینکه return کنید یک حلقه بزنید روی result هاتون و نسبت به آیدی هر آیتم کاستوم متادیتاهاتون رو بوسیله آیدی که هر کدوم داره رو اضافه کنید

کدشو براتون میزارم که استفاده کنید ازش

$i = 0;
foreach($results as $result){
$result = (array)$result;
$result[’masahat_zamin’] = get_post_meta($result[’ID’], 'masahat-zamin');
$result = (object)$result;
$results[$i] = $result;
$i++;
}
return $results;
ابوالفضل محجوب ۲۴ تیر ۱۴۰۲، ۱۶:۰۶

البته کلمه static که گفتم اینجا درست نیست

اطلاعات اضافه ای که برای هر پست ذخیره میکنیم تو جدولی ذخیره میشه به اسم posts_meta و شما اینجا فقط دارین جدول posts رو از دیتابیس میخونید منظورم از کلمه static این بود

موفق باشین

ابوالفضل محجوب ۲۴ تیر ۱۴۰۲، ۱۶:۲۹