• Доброго времени суток, я тут на днях решил заняться внутренней оптимизацией сайта и возник такой вопрос, как можно настроить загрузку скрипта только в определенной категории сайта. Пытался использовать in_category (‘obzor’) не прокатило, либо неправильно назвал категорию в цикле (название брал из «ярлыка» категории) либо просто способ не годиться. Так же пробовал замутить эту радость при помощь is_singular, но опять же не судьба =(

    Заранее спасибо за помощь =)

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Неверно составили цикл if, видимо. А для категории будет is_category. Можно же в Кодексе почитать, что проверяют функции.

    Вот строение самого плагина (кусок кода отвечающий за вывод таблицы, за подгрузку скриптов и сам вид плагина)

    /*-----------------------------------------------------------------------------------*/
    # Register and Enquee plugin's styles and scripts
    /*-----------------------------------------------------------------------------------*/
    function taqyeem_scripts_styles(){
    	if( !is_admin()){
    		wp_register_style( 'taqyeem-style' , plugins_url('style.css' , __FILE__) ) ;
    		wp_enqueue_style( 'taqyeem-style' );
    		wp_register_script( 'taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    		wp_enqueue_script( 'taqyeem-main' );
    	}
    }
    add_action( 'init', 'taqyeem_scripts_styles' );
    
    /*-----------------------------------------------------------------------------------*/
    # Get Reviews Box
    /*-----------------------------------------------------------------------------------*/
    function taqyeem_get_review( $position = "review-top" ){
    
    	if( !is_singular() && taqyeem_get_option('taq_singular') ) return false;
    
    	global $post ;
    	$get_meta = get_post_custom($post->ID);
    	$criterias = unserialize( $get_meta['taq_review_criteria'][0] );
    	$title = $get_meta['taq_review_title'][0] ;
    	$summary = htmlspecialchars_decode( $get_meta['taq_review_summary'][0] );
    	$short_summary = $get_meta['taq_review_total'][0] ;
    	$style = $get_meta['taq_review_style'][0];
    
    	$image_style = taqyeem_get_option('rating_image');
    	if( empty($image_style) ) $image_style ='stars';
    
    	$total_score = $total_counter = $score = $ouput = 0;
    
    	if( taqyeem_get_option('allowtorate') != 'none' )
    		$users_rate = taqyeem_get_user_rate();
    	else $users_rate = '';
    
    	if( $style == 'percentage' ) $review_class = ' review-percentage'; elseif( $style == 'points' ) $review_class = ' review-percentage'; else $review_class = ' review-stars';
    	$ouput = '
    <div class="review_wrap" itemscope itemtype="http://schema.org/Review">
    	<div style="display:none" itemprop="reviewBody">'. wp_trim_words($post->post_content, 500 ) .'</div>
    	<div style="display:none" class="name entry-title" itemprop="name">'. get_the_title() .'</div>
    	<div style="display:none" class="entry-title" itemprop="itemReviewed" itemscope itemtype="http://schema.org/Thing"><span itemprop="name">'. get_the_title() .'</span></div>
    	<div style="display:none" class="updated">'. get_the_time( 'Y-m-d' ) .'</div>
    	<div style="display:none" class="vcard author" itemprop="author" itemscope itemtype="http://schema.org/Person"><strong class="fn" itemprop="name">'. get_the_author() .'</strong></div>
    
    	<meta itemprop="datePublished" content="'. get_the_time( 'Y-m-d' ) .'" />
    
    	<div id="review-box" class="review-box '. $position.$review_class.'">';
    	if( !empty($title) ){
    		$ouput .= '<h2 class="review-box-header">'.$title.'</h2>';
    	}
    
    	if( !empty($criterias) && is_array($criterias) ){
    		foreach( $criterias as $criteria){
    			if( $criteria['name'] && is_numeric( $criteria['score'] )){
    				if( $criteria['score'] > 100 ) $criteria['score'] = 100;
    				if( $criteria['score'] < 0 ) $criteria['score'] = 0;
    
    			$score += $criteria['score'];
    			$total_counter ++;
    			if( $style == 'percentage' ): $ouput .= '
    		<div class="review-item">
    			<span><h3>'. $criteria['name'] .' - '. $criteria['score'] .'%</h3><span data-width="'. $criteria['score'] .'"></span></span>
    		</div>';
    		elseif( $style == 'points' ):   $point =  $criteria['score']/10;
    		$ouput .= '	<div class="review-item">
    			<span><h3>'. $criteria['name'] .' - '. $point.'</h3><span data-width="'. $criteria['score'] .'"></span></span>
    		</div>';
    		else:
    		$ouput .= '<div class="review-item">
    			<h3>'. $criteria['name'] .'</h3>
    			<span class="post-large-rate '.$image_style.'-large"><span style="width:'. $criteria['score'] .'%"></span></span>
    		</div>';
    		endif;
    			}
    		}
    	}
    		if( !empty( $score ) && !empty( $total_counter ) )
    			$total_score =  $score / $total_counter ;
    		$ouput .= '
    		<div class="review-summary" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
    		<meta itemprop="worstRating" content = "1" />
    		<meta itemprop="bestRating" content = "100" />
    		<span class="rating points" style="display:none"><span class="rating points" itemprop="ratingValue">'. round($total_score) .'</span></span>';
    		if( $style == 'percentage' ):
    		$ouput .= '
    			<div class="review-final-score">
    				<h3>'. round($total_score) .'<span>%</span></h3>
    				<h4>'. $short_summary .'</h4>
    			</div>';
    		elseif( $style == 'points' ): $total_score = $total_score/10 ;
    		$ouput .= '
    			<div class="review-final-score">
    				<h3>'. round($total_score,1).'</h3>
    				<h4>'. $short_summary .' </h4>
    			</div>';
    		else:
    		$ouput .= '
    			<div class="review-final-score">
    				<span title="'. $short_summary .'" class="post-large-rate '.$image_style.'-large"><span style="width:'. $total_score .'%"></span></span>
    				<h4>'. $short_summary .'</h4>
    			</div>';
    		endif;
    		if( !empty( $summary ) ){
    			$ouput .= '
    			<div class="review-short-summary" itemprop="description">
    				<p>'. $summary .'</p>
    			</div>';
    		}
    			$ouput .= '
    		</div>'.$users_rate.'
    		<span style="display:none" itemprop="reviewRating">'. round($total_score) .' </span>
    	</div>
    
    </div>';
    
    	return $ouput ;
    }
    
    /*-----------------------------------------------------------------------------------*/
    # Get Reviews Box
    /*-----------------------------------------------------------------------------------*/
    function taqyeem_insert_review($content) {
    	global $post;
    
    	if( is_feed() ) return $content;
    
    	$get_meta = get_post_custom($post->ID);
    	if( !empty( $get_meta['taq_review_position'][0] ) )	$review_position = $get_meta['taq_review_position'][0] ;
    	$output = $output2 = '';
    	if( !empty( $review_position ) &&  $review_position == 'top'  ) $output =  taqyeem_get_review('review-top');
    	if( !empty( $review_position ) &&  $review_position == 'bottom' ) $output2 = taqyeem_get_review('review-bottom');
    
    	return $output.$content.$output2;
    }
    add_filter ('the_content', 'taqyeem_insert_review');

    Я пытался сделать это разными способами вот 3 из них.

    1.

    if( taqyeem_get_review()){
    		wp_register_script( 'taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    		wp_enqueue_script( 'taqyeem-main' );
    	}

    непонятно почему но подгружает скрипт на всех страницах блога, даже на главной, где упоминания о get_review даже нету.

    2.

    function taqyeem_onload(){
    if( is_category('obzor')){
    		wp_register_script( 'taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    		wp_enqueue_script( 'taqyeem-main' );
    	}
    	} add_action ('wp_head' 'taqyeem_onload')

    так же безуспешно. Скрипт не подгружается вообще нигде. То же самое если я размещаю условие не при помощи хука, а вручную в head.

    3.

    if( is_singular()){
    		wp_register_script( 'taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    		wp_enqueue_script( 'taqyeem-main' );
    	}

    опять таки скрипт не загружается нигде, хотя порывшись в исходниках wp с comment-reply.js — это прокатывает.

    Что скажите? =)) Большое спасибо за помощь =)

    http://codex.wordpress.org/Function_Reference/is_category#Examples
    Если у вас эта функция не срабатывает, значит вы неверно её используете.

    Но больше похоже на то, что вы неверно подключаете скрипты. Делайте всё как в кодексе.
    http://codex.wordpress.org/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA_%D0%BF%D0%BE_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%D0%BC/wp_enqueue_script

    Рабочий пример, похожий на ваш:

    function scripts_and_styles() {
    	if (!is_user_logged_in() AND is_front_page()){
    		wp_enqueue_script( 'promo', get_stylesheet_directory_uri().'/js/promo.js' );
    	}
    }
    add_action( 'wp_enqueue_scripts', 'scripts_and_styles' );

    После долгих метаний по форумам, проблему решил таким условием

    function taqyeem_scripts_and_styles() {
    	if (is_single () && taqyeem_insert_review($content)){
    		wp_enqueue_script('taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    	}
    }
    add_action( 'wp_enqueue_scripts', 'taqyeem_scripts_and_styles' );

    Скрипт подключается только на странице архива и только там где есть вызов taqyeem_insert_review.

    Варианты с is_category; in_category; query_post(‘obzor’) и еже с ними, провалились, ибо скрипт подключался везде где есть хотя бы упоминание о этой категории. Помогло только двойное условие типа:
    if (is_single () && in_category(78)){}

    Pixelix, огромное спасибо Вам за то что натолкнули на поиск правильного решения =)

    P.s.s Кстати, может кто помнит условие по которому можно сделать вызов функции только на странице где есть комментарии =)

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Загрузка скрипта только в определенных категориях» закрыта для новых ответов.