حقل علاقة ACF في discourse_publish_format_html

هل لديك أي أفكار حول كيفية نشر منشور في ووردبريس يتضمن حقول علاقة ACF؟

هل يُعد تضمين الإطار (iFrame) هو الخيار الأفضل؟

مرحبًا ريتشارد،

نادرًا جدًا :wink: وليس في هذه الحالة.

هل يمكنك توضيح الحاجة هنا بشكل أكثر تفصيلاً، وما الذي جربته حتى الآن؟

كما يشير عنوان موضوعك، يمكنك استخدام مرشح discourse_publish_format_html لتغيير HTML للمشاركة قبل إرسالها إلى Discourse. كما توجد بعض الأمثلة الجيدة حول كيفية استخدام حقول العلاقات من ACF في وثائق ACF. يمكن تطبيق هذه الأمثلة جنبًا إلى جنب مع مرشح discourse_publish_format_html.

لدي نوعان مخصصان للمحتوى (CPTs): Memes و People. يحتوي كل منهما على حقل علاقة من ACF يسمى meme_person. قد يرتبط كل ميم بعدد من الأشخاص، ويحتوي الميم أيضًا على حقل نصي للتعليقات. اسم كل شخص هو عنوان منشور People.

أريد عرض صورة الميم على Discourse، متبوعة بالتعليق وقائمة بالأشخاص المرتبطين.

إليك محاولتي الحالية التي لم أجربها بعد لأن سطر foreach الخاص بي مجرد تخمين.

هل هذا هو التنسيق الصحيح؟

// عند نشر منشور إلى Discourse

function rs_custom_publish_format_html( $output, $post_id ) {

	$post = get_post( $post_id );
	$type = get_post_type($post_id);
	
	// إذا كانت الصورة المميزة موجودة، استخدمها
	if ( has_post_thumbnail( $post_id ) ) {
		$image = "{thumbnail}<br><br>";
	} else {
		$image = "";
	}

    // إذا كان المنشور ميمًا، احصل على معلومات الحقل المخصص
    if ( 'memes' === $type) {
    	$comment = get_post_meta($post->ID, '_comment', true);
		$people = '';
		$meme_person = get_field('meme_person');
		if( $meme_person ):
			foreach( $meme_person as $person_id ):
				$title = get_the_title( $person_id );
				$people .= $title ? $title . ', ' : '';
			each;
		endif;

        ob_start();
  
        <small>أُعيد نشره في الأصل من: {blogurl}</small><br><br>
        <?php echo $image ?>
        <?php echo $comment ?><br>
        <?php echo $people ?>
        {excerpt}
	  
        <?php 
        $output = ob_get_clean();
        
        return $output;
    }
      
    // وإلا فعد
    ob_start();
    the_permalink( $post_id );
    $output = ob_get_clean();
    return $output;
    
}
add_filter( 'discourse_publish_format_html', 'rs_custom_publish_format_html', 10, 2  );

آسف على الإبطاء، لكنني لست متأكدًا تمامًا مما إذا كنت تطلب مني مراجعة جميع أكوادك أم فقط استخدام فلتر Discourse. إنه التنسيق الصحيح من حيث أن الفلتر يتوقع منك تعديل $output واستخدام وسوم القالب لتضمين القيم. لمزيد من المعلومات حول ذلك، راجع هذا الموضوع:

شكرًا لك. يذكر ذلك الموضوع: يحتوي القالب على وسوم القالب التالية المتاحة له: {excerpt}, {blogurl}, {author}, {thumbnail}, {featuredimage}

عند القراءة الأولى، ظننت أن هذه هي العناصر الوحيدة التي يمكن تمريرها، وهو ما دفعني في الأصل إلى السؤال حول iFrame. وقد أشارت بعض المواضيع الأخرى إلى أن إمكانية البحث حسب معرف المنشور (Post ID) لحقول أخرى من البيانات الوصفية أصبحت متاحة الآن. (وهو ما ربما يجب ذكره في موضوع تخصيص القالب)

أكدت ردك الأصلي على هذا الموضوع إمكانية البحث عبر حقول العلاقات، وسألت عما جربته حتى الآن.

الكود الذي قمت برفعه هو ما لدي حتى الآن، وتساءلت عما إذا كان لديك أي insight حول سطر foreach، حيث أنه الجزء الوحيد في بحث حقل العلاقات الذي يحيرني. إذا لم يكن كذلك، فسأبحث في أماكن أخرى وأعود للنشر هنا.

تحياتي.

بالنسبة لأي شخص يرغب في توسيع حقل علاقة ACF، إليك ما نجح أخيرًا عندما كان نوع المحتوى المخصص (CPT) الذي أرسله إلى Discourse يسمى memes، ويشمل حقل علاقة (ككائن) يسمى meme_person يربط بنوع محتوى مخصص آخر يسمى people

function rs_custom_publish_format_html( $output, $post_id ) {

	$post = get_post( $post_id );
	$type = get_post_type($post_id);
	
	// إذا كانت الصورة المميزة موجودة، استخدمها
	if ( has_post_thumbnail( $post_id ) ) {
		$image = "{thumbnail}<br><br>";
	} else {
		$image = "";
	}

    // إذا كان المنشور من نوع "memes"، احصل على معلومات الحقل المخصص
    if ( 'memes' === $post->post_type) {
    	$comment = get_post_meta($post->ID, 'comment', true);
		$peopleout = ' ';

		$persons = get_post_meta($post->ID, 'meme_person', true);
		if( $persons ):
			foreach( $persons as $person ):
		        $title = get_the_title($person);
				$peopleout .= $title . ' ' ;
			endforeach;
		endif; ?>

        <?php ob_start(); ?>
  
        <small>نُشر في الأصل على: {blogurl}</small><br><br>
        <?php echo $image ?>
        <?php echo $comment ?><br>
        <?php echo $peopleout ?>

        {excerpt}
	  
        <?php 
        $output = ob_get_clean();
        
        return $output;
    }
  
      
    // وإلا، أعد النتيجة
    ob_start();
    the_permalink( $post_id );
	$output = ob_get_clean();
	return $output;
    
}
add_filter( 'discourse_publish_format_html', 'rs_custom_publish_format_html', 10, 2  );