رفتن به مطلب

سوال درباره نحوه ایجاد یک هوک برای یکی از توابع افزونه


پست های پیشنهاد شده

سلام دوستان عزیز، وقتتون بخیر

من قصد دارم یک هوک برای یکی از توابع موجود در یکی از پلاگین‌هام بنویسم، اما نمی‌دونم دقیقا چطور باید این کار رو انجام بدم، این کد تابع موجود در پلاگین هست:

	function wp_ulike_get_posts_microdata(){
		global $post;
		$get_ulike_count = get_post_meta( $post->ID, '_liked', true );
		// Check data output
		if( !is_singular() || !wp_ulike_get_setting( 'wp_ulike_posts', 'google_rich_snippets') || $get_ulike_count == 0 ) {
			return;
		}
		// Post meta structure
		$post_meta  = '<meta itemprop="name" content="' . the_title_attribute( 'echo=0' ) . '" />';
		$post_meta .= apply_filters( 'wp_ulike_extra_structured_data', NULL );
		$post_meta .= '<span itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="' . esc_attr( get_the_author() ) . '" /></span>';
		$post_meta .= '<meta itemprop="datePublished" content="' . esc_attr( get_post_time('c') ) . '" />';
		// Rating meta structure
		$ratings_meta  = '<span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">';
		$ratings_meta	.= '<meta itemprop="bestRating" content="5" />';
		$ratings_meta .= '<meta itemprop="worstRating" content="1" />';
		$ratings_meta .= '<meta itemprop="ratingValue" content="'. wp_ulike_get_rating_value( $post->ID ) .'" />';
		$ratings_meta .= '<meta itemprop="ratingCount" content="' . $get_ulike_count . '" />';
		$ratings_meta .= '</span>';
		// Return value
		$itemtype  = apply_filters( 'wp_ulike_remove_microdata_post_meta', false );
		return apply_filters( 'wp_ulike_generate_google_structured_data', ( $itemtype ? $ratings_meta : ( $post_meta . $ratings_meta ) ) );
	}
	add_filter( 'wp_ulike_posts_microdata', 'wp_ulike_get_posts_microdata');

قسمتی از تابع داره خروجی رو کنترل میکنه و یک استرینگ رو برای strucrucherd date گوگل ایجاد می‌کنه (و داخل متغیر $ratings_meta قرارش میده)

داخل تابع دوتا متغیر زیر هست:

wp_ulike_get_rating_value( $post->ID )
$get_ulike_count

حالا من چطور باید یک هوک بنویسم که مقدار این دو متغیر رو بگیره و یه تغییراتی روشون بده و بعد مجددا برشون گردونه به تابع اصلی؟ 

پیشاپیش از کمکتون سپاسگزارم.

ویرایش شده توسط فرشاد گوهری
لینک به ارسال
  • فرشاد گوهری عنوان را به سوال درباره نحوه ایجاد یک هوک برای یکی از توابع افزونه تغییر داده است

دوستان عزیز، کسی اطلاعی نداره باید چجوری بنویسم این هوک رو؟ :)

لینک به ارسال
در 1 ساعت قبل، فرشاد گوهری گفته است :

دوستان عزیز، کسی اطلاعی نداره باید چجوری بنویسم این هوک رو؟ :)

سلام 

من فکر میکنم برای اینکه بتونید کنترلی روی این مقادیر داشته باشید باید هوک فیلتر رو براشون به این شکل استفاده کنید:

 

function wp_ulike_get_posts_microdata(){
		global $post;
		$get_ulike_count = get_post_meta( $post->ID, '_liked', true );
	    $get_ulike_count = apply_filters( 'w_change_ulike_count', $get_ulike_count, $post->ID );
		// Check data output
		if( !is_singular() || !wp_ulike_get_setting( 'wp_ulike_posts', 'google_rich_snippets') || $get_ulike_count == 0 ) {
			return;
		}
		// Post meta structure
		$post_meta  = '<meta itemprop="name" content="' . the_title_attribute( 'echo=0' ) . '" />';
		$post_meta .= apply_filters( 'wp_ulike_extra_structured_data', NULL );
		$post_meta .= '<span itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="' . esc_attr( get_the_author() ) . '" /></span>';
		$post_meta .= '<meta itemprop="datePublished" content="' . esc_attr( get_post_time('c') ) . '" />';
		// Rating meta structure
		$ratings_meta  = '<span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">';
		$ratings_meta	.= '<meta itemprop="bestRating" content="5" />';
		$ratings_meta .= '<meta itemprop="worstRating" content="1" />';
		$ratings_meta .= '<meta itemprop="ratingValue" content="'. apply_filters( 'w_change_ratingvalue' ,wp_ulike_get_rating_value( $post->ID ), $post->ID ) .'" />';
		$ratings_meta .= '<meta itemprop="ratingCount" content="' . $get_ulike_count . '" />';
		$ratings_meta .= '</span>';
		// Return value
		$itemtype  = apply_filters( 'wp_ulike_remove_microdata_post_meta', false );
		return apply_filters( 'wp_ulike_generate_google_structured_data', ( $itemtype ? $ratings_meta : ( $post_meta . $ratings_meta ) ) );
	}
	add_filter( 'wp_ulike_posts_microdata', 'wp_ulike_get_posts_microdata');

 

لینک به ارسال
در ۱ ساعت قبل، sajad گفته است :

سلام 

من فکر میکنم برای اینکه بتونید کنترلی روی این مقادیر داشته باشید باید هوک فیلتر رو براشون به این شکل استفاده کنید:

متشکرم از پاسختون سجاد عزیز، فکر می‌کنم منظورم رو در سوال اشتباه رسوندم.

اون کدی که گذاشتم، تابعیه که داخل خود پلاگین بای دیفالت تعریف شده و من ننوشتمش.

به توسعه‌ی دهنده‌ افزونه که پیام دادم، بهم گفتن تابع wp_ulike_get_posts_microdata رو در افزونه سرچ کنید اونجا یک هوک مشخص شده با  نام wp_ulike_generate_google_structured_data که میتونید بر اون اساس ساختار این قسمت رو بر اساس نظر خو.دتون تغییر بدید.

ولی متاسفانه نتونستم کدش رو پیاده‌سازی کنم.

لینک به ارسال
در 27 دقیقه قبل، فرشاد گوهری گفته است :

متشکرم از پاسختون سجاد عزیز، فکر می‌کنم منظورم رو در سوال اشتباه رسوندم.

اون کدی که گذاشتم، تابعیه که داخل خود پلاگین بای دیفالت تعریف شده و من ننوشتمش.

به توسعه‌ی دهنده‌ افزونه که پیام دادم، بهم گفتن تابع wp_ulike_get_posts_microdata رو در افزونه سرچ کنید اونجا یک هوک مشخص شده با  نام wp_ulike_generate_google_structured_data که میتونید بر اون اساس ساختار این قسمت رو بر اساس نظر خو.دتون تغییر بدید.

ولی متاسفانه نتونستم کدش رو پیاده‌سازی کنم.

خواهش میکنم.

من فکر کردم که کد این بخش توسط خودتون نوشته شده و الان برای این که کاربردی تر باشه قصد دارید هوک برای پلاگین تعریف کنید.

خب برای اینکه بتونید خروجی رو کنترل کنید همونطور که سازنده پلاگین بهتون گفته میشه خروجی رو توسط هوک فیلتری که تو تابع تعریف کردن کنترل و ساختار مورد نظر رو بفرستید برای خروجی. برای این منظور میتونید به عنوان مثال به این شکل هوک رو بنویسید:

add_filter( 'wp_ulike_generate_google_structured_data', function(){
      return "Hi";
});

خروجی که این هوک داره اینه که الان میاد و تمام post_meta , ratings_meta رو حذف میکنه و فقط یه Hi میفرسته تو خروجی.

اینجا شما میتونید post_meta , ratings_meta خودتون رو بنویسید و در نهایت return کنید.

 

لینک به ارسال

در تکمیل صحبتهای @sajad

کد شما یه فیلتر داره تو خط اخرش به صورت زیر
 

return apply_filters( 'wp_ulike_generate_google_structured_data', ( $itemtype ? $ratings_meta : ( $post_meta . $ratings_meta ) ) );

کد هوک شما به صورت زیر میشه

function ulike_google_structured_data($meta_data){
    
    //your code here
    
    return $meta_data;
}


add_filter('wp_ulike_generate_google_structured_data','ulike_google_structured_data');

مقدار خروجی تابع wp_ulike_get_posts_microdata رو تو متغییر $meta_data تابع دریافت میکنید و تغییرات مورد نیاز رو روش اعمال میکنید و بعد return میکنید

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...