فرشاد گوهری

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

6 پست در این موضوع قرار دارد

ارسال شده در (ویرایش شده)

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

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

	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

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

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

ویرایش شده در توسط فرشاد گوهری
0

به اشتراک گذاری این پست


لینک به پست

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

0

به اشتراک گذاری این پست


لینک به پست
در 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');

 

1

به اشتراک گذاری این پست


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

سلام 

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

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

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

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

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

0

به اشتراک گذاری این پست


لینک به پست
در 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 کنید.

 

1

به اشتراک گذاری این پست


لینک به پست

در تکمیل صحبتهای @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 میکنید

1

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری