
php – Ganti konten blok dengan array
Saya menggunakan GenerateBlocks dan Metabox, dan secara khusus relevan untuk posting ini, Hubungan MB.
Saya memiliki loop kueri yang dibuat dengan GenerateBlocks yang menampilkan daftar Acara (CPT). Saya memiliki CPT lain yang disebut Penerima Lisensi, dan dengan Hubungan MB saya telah membuat ‘Hubungan’ antara 2 CPT ini.
Tujuan saya adalah untuk menyisipkan konten dari Posting ‘terkait’, yaitu saya ingin menampilkan nama Posting terkait di setiap objek loop kueri. Ini kode yang saya gunakan:
add_filter( 'render_block', function( $block_content, $block ) {
if ( !is_admin() && ! empty( $block['attrs']['className'] ) && strpos( $block['attrs']['className'], 'licensee-name' ) !== false ) {
$myreplace1 = 'placeholder';
$hol_licensee_name = MB_Relationships_API::get_connected( [
'id' => 'licensee-events',
'to' => get_the_ID(),
] );
$block_content = str_replace( $myreplace1, $hol_licensee_name , $block_content );
}
return $block_content;
}, 10, 2 );
Saya telah menguji cuplikan kode ini dengan nilai tetap, misalnya ‘Test value’, dan berhasil. Jadi saya tahu fungsinya pada dasarnya berfungsi.
Namun skrip tidak berfungsi (= merusak loop kueri seluruhnya). Saya percaya bagian yang menyinggung adalah tempat saya mendefinisikan $hol_licensee_name
.
Saya diberitahu oleh dukungan Metabox itu
Fungsi MB_Relationships_API::get_connected() mengembalikan array, Anda harus menggunakan nilai pengembalian sebagai array, bukan string.
Jadi saya mencoba potongan kode ini sebagai gantinya:
add_filter( 'render_block', function( $block_content, $block ) {
if ( !is_admin() && ! empty( $block['attrs']['className'] ) && strpos( $block['attrs']['className'], 'licensee-name' ) !== false ) { // CSS class 'licensee-name' to be added to the block where the value should be output
$myreplace1 = 'placeholder'; // Block content should be set to the word 'placeholder'
$myinsert1 = implode(
MB_Relationships_API::get_connected( [
'id' => 'licensee-events',
'to' => get_the_ID(),
] ),
); // Relationship value to retrieve
$block_content = str_replace( $myreplace1, $myinsert1 , $block_content );
}
return $block_content;
}, 10, 2 );
Itu masih tidak berfungsi, tapi setidaknya itu tidak merusak loop sepenuhnya. Namun blok tempat saya mencoba menampilkan data kosong. Apa yang saya lakukan salah?
Saya telah meneliti ini selama berminggu-minggu dan benar-benar membutuhkan bantuan… terima kasih!
PS: Saya anggap sudah jelas, tapi saya bukan ahli PHP. Saya kebanyakan mengambil cuplikan kode di tempat lain dan mencoba menyesuaikannya dengan kebutuhan saya.