フォーラムへの返信

15件の返信を表示中 - 271 - 285件目 (全327件中)
  • 投稿の順番を指定するプラグインです。両プラグインとも、ポストの menu_order フィールド(固定ページの順番を指定するフィールド)を使っています。

    1) プラグイン postMash(Filtered)
    プラグインを有効にして、[投稿-postmash] で順番を Drag&Drop で決定します。
    カテゴリーページ、サイドバーなどで、投稿が指定順に表示されます。
    ここは、日付順で、ここは指定順番で、ということはできません。

    2) プラグイン CMS Tree Page View
    固定ページとカスタム投稿タイプにしか対応していませんが、
    /plugins/cms-tree-page-view/index.php で「continue」(1ヶ所)を見つけこれをコメントにしてやると、投稿でも使えるようになります。

    どちらかというと、NEWS(投稿)は日付順、商品(カスタム投稿タイプ)は指定順で表示したいというようなときに便利です。

    プラグインを有効にして、[投稿-投稿 Tree View] で順番を Drag&Drop で決定します。

    以下テンプレートのコード

    functions.php で
    <?php
    function cms_view_orderPosts($orderBy) {
    	global $wpdb;
    	$orderBy = "{$wpdb->posts}.menu_order ASC";
    	return($orderBy);
    }
    ?>

    を定義して、順番指定が必要なところで、

    <?php
    	add_filter('posts_orderby', 'cms_view_orderPosts');
    	query_posts($query_string);
    	remove_filter('posts_orderby', 'cms_view_orderPosts');
    ?>
    
    とか、
    
    <?php
    	add_filter('posts_orderby', 'cms_view_orderPosts');
    	query_posts('cat=10&posts_per_page=-1');
    	remove_filter('posts_orderby', 'cms_view_orderPosts');
    ?>
    
    にします。

    直接SQLを使って投稿を抽出しているプラグイン(サイトマップなど)は、プラグインを直接修正するしかありません。

    フォーラム: 使い方全般
    返信が含まれるトピック: キャッチフレーズでの改行

    一般設定に入力項目を追加したい

    こういう方法もあると思いますが、キャッチフレーズを頻繁に更新するのでなければ、テンプレートに埋め込んだ方が手っ取り早いと思います。

    アイキャッチ(中サイズ)は、孫ページへリンクしています。

    <?php
    $children = get_pages('parent=AのID&hierarchical=0');
    foreach ($children as $child) {
    ?>
    	<h3><?php echo esc_html($child->post_title);?></h3>
    <?php
    	$grandchildren = get_pages('parent='.$child->ID.'&hierarchical=0');
    	foreach ($grandchildren as $grandchild) {
    		$eye_catch = get_post_thumbnail_id($grandchild->ID);
    ?>
    		<div class="eye-catch"><a href="<?php echo esc_url($grandchild->guid);?>"><?php echo wp_get_attachment_image($eye_catch,'medium');?></a></div>
    <?php
    	}
    }
    ?>

    再び修正

    function pinpon($the_cats,$cat_obj) {
      $n = count($the_cats);
      if ($n==1) {
    	if ($cat_obj->cat_ID==$the_cats[0]->cat_ID) {
    		$rtn = true;
    	} else	{
    		$rtn = false;
    	}
      } else {
    	if ($cat_obj->category_parent!=0) {
    	  $rtn = true;
    	  for ($i = 0; $i <$n ; $i++) {
    		if ($cat_obj->cat_ID!=$the_cats[$i]->cat_ID) {
    		  if (!(cat_is_ancestor_of($the_cats[$i]->cat_ID,$cat_obj->cat_ID))) {
    			$rtn = false;
    			break;
    		  }
    		}
    	  }
    	} else {
    	  $rtn = false;
    	}
      }
      return $rtn;
    }
    $myposts = get_posts('numberposts=-1&orderby=menu_order&order=ASC&cat='.$category->cat_ID);
      ▽
    $myposts = get_posts('numberposts=-1&order=ASC&cat='.$category->cat_ID);
    (&orderby=menu_order を取る)

    —————————————–
    記事1 親カテゴリー1
    記事2 親カテゴリー1
    記事3 親カテゴリー1,子カテゴリー1
    記事4 親カテゴリー1,子カテゴリー2
    記事5 子カテゴリー2(親カテゴリー1なし)
    記事6 親カテゴリー2
    記事7 親カテゴリー2,子カテゴリー3
    —————————————–
    とすると、以下のようになるはずです。
    http://powercms.sitemix.jp/

    カテゴリーや記事の順番指定は適当に変更してください。

    もしかして、私が勘違いしていたのかもしれません。カテゴリーが必ず一つというのなら
    —————————————–
    記事1 親カテゴリー1
    記事2 親カテゴリー1
    記事3 子カテゴリー1
    記事4 子カテゴリー2
    記事5 子カテゴリー2
    記事6 親カテゴリー2
    記事7 子カテゴリー3
    —————————————–
    無条件に正しく表示することが出来ます。ただし、こうするとパンクズナビがネストして表示できないような気がします。

    まずは、修正から、
    1) function disp_child($catid) { の上の方のelse節で、hierarchical=0 を追加してください。
    2) query_posts() はえらく遅いので、get_posts() に変更してください。

    function disp_child($catid) {
      if ($catid==0) {
    	$categories = get_categories('parent=0&orderby=name&order=DESC');
      } else {
    	$categories = get_categories('hierarchical=0&orderby=name&order=DESC&child_of='.$catid);
      }
    
      if (!(empty($categories))) {
    
          foreach($categories as $category) :
    ?>
    	  <h3><?php echo esc_html($category->cat_name); ?></h3>
    	  <ul>
    	  <?php
    	  $myposts = get_posts('numberposts=-1&orderby=menu_order&order=ASC&cat='.$category->cat_ID);
    	  foreach ($myposts as $p) {
    	      $cat_array = get_the_category($p->ID);
    	      if (pinpon($cat_array,$category)) {
    	  ?>
    	  	  <li><a href="<?php echo esc_url($p->guid); ?>"><?php echo esc_html($p->post_title); ?></a></li>
    	  <?php
    	      }
    	  }
    	  disp_child($category->cat_ID);
    	  ?>
    	  </ul>
    <?php
          }
      }
    }
    ?>
    
    ■ フロントページ
    <?php if(is_home() && !is_paged()): ?>
    <?php
            disp_child(0);
            // 不要 wp_reset_query();
    ?>
    <?php endif; ?>

    カテゴリーは、親子関係にある場合にのみ「複数のチェック可」という前提です。
     ↓
    直径の親子関係以外のものが含まれる場合は×。

    [すべて直径の親子関係の範囲内はOK]
    親子孫
    ■
     ■
      ■
    □
     □
    —- or ——-
    親子孫
    □
     □
      □
    ■
     ■
    —- or ——-
    親子孫
    ■
     □
      ■
    □
     □

    [直径以外が含まれる場合はNG]
    親子孫
    ■
     □
      □
    ■
     □
    —- or ——-
    親子孫
    ■
     □
      ■
     ■
    □
     □
    —- or ——-
    □
     □
      ■
     □
    ■
     □

    <例>
    ■記事にチェックしても良い組み合わせ
    [親カテゴリー1]
    [子カテゴリー1]
    [子カテゴリー2]
    [親カテゴリー1,子カテゴリー1]
    [親カテゴリー1,子カテゴリー2]
    [親カテゴリー2]
    [子カテゴリー3]
    [親カテゴリー2,子カテゴリー3]
    etc

    ■記事にチェックしてはいけない組み合わせ
    [親カテゴリー1,親カテゴリー2]
     親カテゴリー1,親カテゴリー2 が親子関係ではない。
    [親カテゴリー1,子カテゴリー1,親カテゴリー2]
     親カテゴリー1,親カテゴリー2 が親子関係ではない。
    [親カテゴリー1,子カテゴリー1,子カテゴリー2]
     子カテゴリー1,子カテゴリー2 が親子関係ではない。
    [親カテゴリー1,親カテゴリー2,子カテゴリー3]
     親カテゴリー1,親カテゴリー2 が親子関係ではない。
    [親カテゴリー2,子カテゴリー1]
     親カテゴリー2,子カテゴリー1 が親子関係ではない。
    etc

    >子カテゴリーにある記事が親カテゴリーにもリストアップされます。
    あら?
    [親カテゴリー1]
    ・記事3
    となるように、pinpon() ではじいているはずなのですが??

    カテゴリーは、親子関係にある場合にのみ「複数のチェック可」という前提です。
    ■
     ■
      ■
    □
    □
     □
    はいいけれども、
    ■
     ■
      ■
    ■
    □
     □
    はダメです。

    ■ functions.php
    
    <?php
    function pinpon($the_cats,$cat_obj) {
      $rtn = false;
      $n = count($the_cats);
      if ($n==1) {
    	$rtn = true;
      } else {
    	if ($cat_obj->category_parent!=0) {
    	  $rtn = true;
    	  for ($i = 0; $i <$n ; $i++) {
    		if ($cat_obj->cat_ID!=$the_cats[$i]->cat_ID) {
    		  if (!(cat_is_ancestor_of($the_cats[$i]->cat_ID,$cat_obj->cat_ID))) {
    			$rtn = false;
    			break;
    		  }
    		}
    	  }
    	} else {
    	  $rtn = false;
    	}
      }
      return $rtn;
    }
    
    function disp_child($catid) {
    
      if ($catid==0) {
    	$categories = get_categories('parent=0&orderby=name&order=DESC');
      } else {
    	$categories = get_categories('orderby=name&order=DESC&child_of='.$catid);
      }
    
      if (!(empty($categories))) {
    
    	foreach($categories as $category) :
    ?>
    	  <h3><?php echo esc_html($category->cat_name); ?></h3>
    	  <ul>
    		  <?php
    		  query_posts('posts_per_page=-1&cat='.$category->cat_ID);
    		  if (have_posts()) : while (have_posts()) : the_post();
    			$cat_array = get_the_category();
    			if (pinpon($cat_array,$category)) :
    		  ?>
    			  <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    			<?php endif; ?>
    		  <?php endwhile; endif; ?>
    		  <?php disp_child($category->cat_ID);?>
    	  </ul>
    <?php
    	endforeach;
      }
    }
    ?>
    
    ■ フロントページ
    <?php if(is_home() && !is_paged()): ?>
    <?php
            disp_child(0);
            wp_reset_query();
    ?>
    <?php endif; ?>

    カテゴリーのネストが深かったり、記事が多い場合は遅いかもしれません。また、真剣にテストはしていないので、どこかにシクジリがあるかもしれません。

    WordPress では、フォームの name に使ってはいけない名前が幾つかあります。
    ‘day’ もその一つです。

    wp-include/classes.php の 29行目くらい
    $public_query_vars = array(‘使ってはいけない名前’);

    >単純にdepth=1をpost_parent=0に変えて下さいという意味ですよね?
    そういうことです。

    最上位の event のみを表示したいなら、
    depth=1 => post_parent=0

    結論から言うと、WordPress で作るのはやめたほうがいいです。
    そもそも、なぜ WordPress にしようと思ったのですか?

    もし、私がやるとすれば(大雑把で、たぶんご批判もあると思いますが)、
    1) 今のシステムを強化する。
    2) PHP フレームワークで作り直す。
    3) Drupal で作り直す。
    4) WordPress の Plugin pods を使う。
    5) wp_store にデータを保存し、自前の更新処理を追加する。
    6) 今のデータを post,category,customfield に変換してから取り込む。
    の順番にします。

    4万件のデータを扱うとすると、性能も考慮しなければなりません。
    http://dev.podscms.org/2010/10/15/pods-data-storage-vs-cpt-custom-fields-mysql-testing/
    pods の性能 ≒ wp_store の性能でしょう。

    固定ページには、カテゴリーが付かないので(通常は付かない)カテゴリーは表示されません。

    もしかしてやりたいことは、
    wp_list_categories()
    なのでは?

    the_category()は、the_ がついていることからもわかるように、普通はループの中(the_post() の後)で使います。

    明らかにおかしそうなのは、
    post_type=page
     ↓
    post_type=basho(定義したカスタム投稿タイプ名)

    この修正だけで動くかどうかはわかりません。

    jim912さんのコードを見てなるほどと思いましたが、parent を指定した get_pages() に問題があるのか確かにうまくいきません。

    yumebunsekiさんの方法だと、ページB-Bの下に B-B-1,B-B-2,B-B-3 のようなページがあるとうまくいきません。そういうページは作らないなら良いのですが・・。

    get_pages() は使わずに、

    function flatten_page_list($exclude = '') {
        global $wpdb;
        global $post;
    
        $pagelist = $wpdb->get_results( "
            SELECT *
            FROM   $wpdb->posts
            WHERE  post_type = 'page'
                   AND post_parent = $post->post_parent
                   AND post_status = 'publish'
                   ORDER BY menu_order;
        " );
    
       //$pagelist = get_pages($args);
       $mypages = array();
        :

    のようにすると一般的にうまくいくようです。
    (jim912さんの方式をget_pages()を使わずにやっただけです)

    Plugin の説明に
    allowing Drupal-like book navigation.
    とあったので、これだと思いましたが、子供の端っこで親へのリンクが付いてしまうのは、Drupal の Book モジュールとは違うようですね。

    プラグインを適当にいじれば(たぶん、どっかに1,2行条件を加えれば)、B-Aのprev,B-Eのnextのリンクを表示させないようにすることはできると思います。

    プラグイン Next Page
    http://wordpress.org/extend/plugins/next-page/
    がやりたいことに近いのではないでしょうか。

    子ページだけに「次」「前」を付けたいなら、子ページ用のテンプレートを作るか、ページの親フィールドが 0 でない場合のみテンプレートタグを埋め込めばよいと思います。

    自分で関数を作る場合でも、プラグインの中の
    function flatten_page_list(){]
    function get_next_link(){}
    function get_previous_link(){}
    この辺の関数が参考になると思います。

15件の返信を表示中 - 271 - 285件目 (全327件中)