مزامنة فئات Wordpress و Discourse

مرحباً، هل يمكنك مساعدتي في كيفية مزامنة فئات ووردبريس و ديسكورس؟

على سبيل المثال، عندما ينشئ المستخدم فئة جديدة على موقعي، أريده أن يتم إنشاؤها في ديسكورس، وأن يكون لكل من المنشور وموضوع المنتدى نفس الفئة.

هذا الكود لم يتم اختباره بالكامل وسيحتاج إلى معالجة الأخطاء/ضمانات السلامة/التسجيل للاستخدام الإنتاجي، ولكنه يجب أن يساعدك في البدء:

add_action( 'create_category', 'discourse_create_category', 10, 1 );
function discourse_create_category( $term_id ) {
	$category = get_term_by( 'id', $term_id, 'category' );
	$name = $category->name;
	$path = '/categories.json';
	// Use the WPDiscourse plugin to generate a new category
	new \WPDiscourse\Utilities\PublicPluginUtilities()->discourse_request(
		$path,
		[
			'method' => 'POST',
			'name'   => $name,
		]
	);
}

add_action( 'set_object_terms', 'discourse_set_object_terms', 10, 1 );
function discourse_set_object_terms( $object_id ) {
	if ( ! metadata_exists( 'post', $object_id, 'publish_to_discourse' ) ) {
		// Enable publishing in Discourse, during initial save only.
		update_post_meta( $object_id, 'publish_to_discourse', true );
		$discourse_publish_option = get_option( 'discourse_publish' );
		// set the Discourse category based on WP category
		if ( is_array( $discourse_publish_option ) && array_key_exists( 'publish-category', $discourse_publish_option ) ) {
			$categories_list = wp_get_post_categories( $object_id );
			update_post_meta( $object_id, 'publish_post_category', $categories_list[0]->name );
		}
	}
}
إعجاب واحد (1)

مرحباً غاري، شكراً على إجابتك!

للأسف، لدي خطأ “خطأ في بناء الجملة، غير متوقع ‘->’ (عامل تشغيل الكائن)” للسطر التالي:

new \\WPDiscourse\\Utilities\\PublicPluginUtilities()-\u003ediscourse_request(

إصدار PHP هو 7.4، يجب أن يعمل. ليس لدي فكرة عن سبب حدوث الخطأ.

هل قلت إنها غير مختبرة، صحيح؟ :sweat_smile: لا يمكنني تقديم الكثير من المساعدة في تصحيح الأخطاء الآن، ولكن إليك نسخة محدثة يجب أن تصلح هذه المشكلة بالإضافة إلى إزالة فحص زائد في الإجراء الثاني:

add_action( 'create_category', 'discourse_create_category', 10, 1 );
function discourse_create_category( $term_id ) {
	$category = get_term_by( 'id', $term_id, 'category' );
	$name = $category->name;
	$path = '/categories.json';
	// Use the WPDiscourse plugin to generate a new category
	$utils = new \WPDiscourse\Utilities\PublicPluginUtilities();
	$utils->discourse_request(
		$path,
		[
			'method' => 'POST',
			'name'   => $name,
		]
	);
}

add_action( 'set_object_terms', 'discourse_set_object_terms', 10, 1 );
function discourse_set_object_terms( $object_id ) {
	if ( ! metadata_exists( 'post', $object_id, 'publish_to_discourse' ) ) {
		// Enable publishing in Discourse, during initial save only.
		update_post_meta( $object_id, 'publish_to_discourse', true );
		$discourse_publish_option = get_option( 'discourse_publish' );
		// set the Discourse category based on WP category
		if ( is_array( $discourse_publish_option ) ) {
			$categories_list = wp_get_post_categories( $object_id );
			update_post_meta( $object_id, 'publish_post_category', $categories_list[0]->name );
		}
	}
}

7.4 على وشك الانتهاء بعد حوالي ثلاثة أشهر فقط، لذا يجب عليك حقًا البدء في التخطيط لترقية بيئة الاستضافة الخاصة بك، إذا لم تكن قد فعلت ذلك بالفعل :calendar:

نعم، لقد فعلت ذلك :sweat_smile: ولكن حقيقة أنني لست جيدًا في البرمجة تجعلني أبحث في كل مكان عن حل. لم أجد أي مستقل بعد، لذلك كنت آمل أن أجعله يعمل بنفسي أو بمشورتك :slight_smile:

شكرًا لك مرة أخرى، سأتحقق!