サポート » 使い方全般 » ページ送りのurlを取得して、ある特定のカテゴリに属する記事か判定

  • 解決済 eijiy

    (@eijiy)


    WordPressテーマtwentyten使っています。

    それで、単一の記事を表示している時に、記事の上下に表示されるページ送りのurlを取得して、ある特定のカテゴリーに属する記事かどうかを判定する事は可能でしょうか。

    または、現在開いている単一の記事の前後の記事が、ある特定のカテゴリーに属する記事かどうかを判定する事は可能でしょうか。

    目的は、ページ送りをAjax非同期通信する時に、ある特定のカテゴリーに属する記事に使っているSyntaxHighlighterが機能しないので、そのカテゴリーの記事をAjax非同期通信せずに開きたいと言う事です。

    現在テスト中のjQueryとPHPのコードは以下の通りです。
    jQuery

    jQuery(function(){
    	var url = "http://127.0.0.1:8080/wp/ajaxpost.php";
    	jQuery("#nav-above div a,#nav-below div a").click(function(e){
    		jQuery.ajax({
    			type: "GET",
    			url: url,
    			data: {data: this.href},
    			success: function(ajaxpost,status){
    				jQuery("#content").html(ajaxpost);
    			}
    		});
    	});
    });

    PHP(ajaxpost.php)WordPressのインストールフォルダ

    <?php require('./wp-load.php'); ?>
    <?php
        $data = $_REQUEST['data'];
        $str = substr($data,35);
        $post_id = $str;
        $post = get_post($post_id);
        $content = $post->post_content;
        $content = apply_filters('the_content',$content);
        echo $content;
    ?>

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック投稿者 eijiy

    (@eijiy)

    上記を踏まえて調べた結果、get_previous_posts_linkget_next_posts_linkで前と次のページの情報を取得出来る事がわかったので、以下の様にsingle.phpのループ内でテストしてみたんですが、反応はありませんでした。

    <?php
    	$prev = get_previous_posts_link();
    	$next = get_next_posts_link();
    	$prevStr = substr($prev,25,9);
    	$nextStr = substr($next,25,9);
    	if ($prevStr == 'wordpress') {
    		echo $prevStr;
    	} else if ($nextStr == 'wordpress') {
    		echo $nextStr;
    	}
    ?>

    これは取得した情報の中にurl以外も含まれているからだと思うのですが、そうだとすればurlのカテゴリー名の部分だけ取り出すにはどうしたらいいでしょうか。

    どなたかご教授下さい。

    宜しくお願い致します。

    現在開いている単一の記事の前後の記事が、ある特定のカテゴリーに属する記事かどうかを判定する

    <?php
    // このコードは「ループ内(the_post();以降)」で使用してください。
    $prev = get_previous_post();
    $next = get_next_post();
    
    if ( $prev )
      $prev_cats = wp_get_post_categories( $prev->ID );
    if ( $next )
      $next_cats = wp_get_post_categories( $next->ID );
    
    if ( in_array( 123, (array) $prev_cats) ) {
      // 前投稿がカテゴリ123に属する場合
    } else {
      // 前投稿がカテゴリ123に属さない場合
    }
    if ( in_array( 123, (array) $next_cats) ) {
      // 次(後)投稿がカテゴリ123に属する場合
    } else {
      // 次(後)投稿がカテゴリ123に属さない場合
    }
    ?>

    な感じで OK です。

    トピック投稿者 eijiy

    (@eijiy)

    kzさん、返信ありがとうございます。

    解説書を見ても検索しても分からず諦めようとしていたところで、感謝!感謝!です。
    以下の様にして、ページ送りの部分でクラス分けが出来ました。

    <?php
            $prev = get_previous_post();
            $next = get_next_post();
    
            if ( $prev )
                $prev_cats = (array) wp_get_post_categories( $prev->ID );
            if ( $next )
                $next_cats = (array) wp_get_post_categories( $next->ID );
    
            echo '<div id="nav-above" class="navigation">';
        	if ( in_array( 13, $prev_cats) ) {
    			 echo '<div class="nav-previous">';
    		} else {
    			 echo '<div class="nav-previous_ajax">';
    		}
            previous_post_link( '%link', '<span class="meta-nav">' . _x( '&larr;', 'Previous post link', 'twentyten' ) . '</span> %title' );
    		echo '</div>';
        	if ( in_array( 13, $next_cats) ) {
                echo '<div class="nav-next">';
    		} else {
                echo '<div class="nav-next_ajax">';
    		}
    		next_post_link( '%link', '%title <span class="meta-nav">' . _x( '&rarr;', 'Next post link', 'twentyten' ) . '</span>' );
    		echo '</div></div>';
    ?>

    本来はJavaScriptでSyntaxHighlighterを再起動すべきところなんでしょうが、そちらも初心者でままなりません。

    しかし条件分岐で良い勉強になり有難うございました。

    トピック投稿者 eijiy

    (@eijiy)

    修正

    <?php
        $prev = get_previous_post();
        $next = get_next_post();
    ?>
        <div id="nav-above" class="navigation">
    <?php
        if ( $prev ) :
            $prev_cats = (array) wp_get_post_categories( $prev->ID );
    
            if ( in_array( 13, $prev_cats) ) :
    		echo '<div class="nav-previous_cancel">';
    	else :
    		echo '<div class="nav-previous">';
    	endif;
    
            previous_post_link( '%link', '<span class="meta-nav">' . _x( '←', 'Previous post link', 'twentyten' ) . '</span> %title' );
            echo '</div>';
      endif;
    
        if ( $next ) :
            $next_cats = (array) wp_get_post_categories( $next->ID );
    
        	if ( in_array( 13, $next_cats) ) :
    		echo '<div class="nav-next_cancel">';
    	else :
            	echo '<div class="nav-next">';
    	endif;
    
            next_post_link( '%link', '%title <span class="meta-nav">' . _x( '→', 'Next post link', 'twentyten' ) . '</span>' );
           	echo '</div>';
      endif;
    ?>
        </div><!-- end nav-above -->

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「ページ送りのurlを取得して、ある特定のカテゴリに属する記事か判定」には新たに返信することはできません。