フォーラムへの返信

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • 以下をテーマの functions.php にコピペでいいんじゃないかしら

    add_action( 'pre_get_posts', function( $query ) {
      if ( is_admin() || ! $query->is_main_query() )
        return;
    
      if ( current_user_can( '相談者権限' ) ) { // 「相談者権限」は実際の値に変更
        $query->set( 'author', get_current_user_id() );
      }
    } );

    テーマの functions.php に以下をコピペでいけるんじゃないかしら

    add_filter( 'wp_nav_menu', function( $nav_menu, $args ) {
      return preg_replace(
        '@<a ([^>]+)>(.+)</a>\n+\t*<ul class="sub-menu">@m',
        '<a $1>$2</a><ul class="sub-menu"><li>'.
        '<h2>$2</h2>'.
        '</li>',
        $nav_menu
      );
    }, 10, 2 );

    フォーラム: 使い方全般
    返信が含まれるトピック: リンク先にGETパラメタを引き継ぎたい

    別アプローチ:html の下の方に Javascript を書くだけ。

    !function($){
     $('a').on('click', function(){
        var q = document.location.search.substring(1)
          , h = $(this).attr('href')
          , g = -1 === h.indexOf('?') ? '?' : '&';
    
          if(-1 !== q.indexOf('cms=')){
          	h = [h, q].join(g);
          }
    
        document.location.href = h;
    
        return false;
      });
    }(window.jQuery);

    カスタムフィールドに画像のURLが入っているなら

    post_custom( 'カスタムフィールド名' )
    get_post_meta( get_the_ID(), 'カスタムフィールド名', true )
    $post->カスタムフィールド名

    などを echo esc_url() します。

    カスタムフィールドに画像のIDが入っているなら
    上記の値を echo wp_get_attachment_image() します。

    カスタムフィールドに入っている画像(写真)を一緒に出したい

    このトピックとは別の話題になるので、わからない場合はトピックを新しく追加すると良いです。

    こうですね。

    <div id="side">
    <ul id="submenu">
    <?php
      $current_page_id = $wp_query->get_queried_object_id();
      $args = array(
        'post_type'      => 'staff',
        'posts_per_page' => -1,
      );
      $your_posts = get_posts($args);
    
      foreach ( $your_posts as $post ) {
        setup_postdata($post);
        $current_class = get_the_ID() == $current_page_id ? ' current_page_item' : '';
    ?>
    <li class="page_item<?php echo $current_class; ?>"><?php echo post_custom('name'); ?></li>
    <?php
      }
      wp_reset_postdata();
    ?>
    </ul>
    </div>

    以下のように functions.php に書けば、コメントを #test の後に挿入できます。

    add_filter('the_content', 'test_append');
    function test_append( $content ) {
      ob_start();
      echo $content;
    ?>
    <script type="text/javascript">!function($){
      $('<div class="myclass"><ul><?php
      if ( $comments = get_approved_comments( get_the_ID() ) ) : ?>
    <?php
    foreach( $comments as $comment ): ?><li><?php
      $text = str_replace( array( "\r\n", "\r", "\n" ), '', nl2br( get_comment_text( $comment ) ) );
      echo wp_kses_post( str_replace( '\'', '\\\'', $text ) );
    ?></li><?php
    endforeach;
    endif;
    ?></ul></div>').appendTo('#test')
    }(window.jQuery)
    </script>
    <?php
      return ob_get_clean();
    }

    コードの意味は、PHPのリファレンスCodexなどで調べてください。

    functions.php に以下のコードを追加します。

    add_filter( 'posts_fields', 'my_posts_fields', 10, 2 );
    function my_posts_fields( $fields, $query ) {
      if ( ! empty( $query->query_vars['ave'] ) ) {
        global $wpdb;
    
        $fields .= ",( {$wpdb->postmeta}.meta_value + mt1.meta_value + mt2.meta_value ) AS point";
      }
    
      return $fields;
    }
    
    add_filter( 'posts_orderby', 'my_posts_orderby', 10, 2 );
    function my_posts_orderby( $orderby, $query ) {
      if ( ! empty( $query->query_vars['ave'] ) ) {
        global $wpdb;
    
        $orderby = 'point DESC';
      }
    
      return $orderby;
    }

    TOP10を出力するところで以下のように書きます。

    $top10 = get_posts( array(
      'ave'               => true,
      'suppress_filters'  => false,
      'posts_per_page'    => 10,
      'meta_query'        => array(
        array(
          'key'       => 'aaa', // 効果のメタキー
          'value'     => 0,
          'type'      => 'NUMERIC',
          'compare'   => '>'
        ),
        array(
          'key'       => 'bbb', // すっきり感のメタキー
          'value'     => 0,
          'type'      => 'NUMERIC',
          'compare'   => '>='
        ),
        array(
          'key'       => 'ccc', // 落ちやすさのメタキー
          'value'     => 0,
          'type'      => 'NUMERIC',
          'compare'   => '>='
        ),
      ),
    ) );
    
    foreach( $top10 as $post ) :
      setup_postdata( $post );
      echo '<p>' . get_the_title() . ' (' . sprintf( '%.1f', $post->point / 3 ) . ')</p>';
    endforeach;
    wp_reset_postdata();

    [編集 | クイック編集 | ゴミ箱 | 表示]が表示される

    これらは $columns['title'] のカラムに表示されます。
    unset() すると、当然表示されなくなります。

    タイトル欄に記事タイトル以外の内容を表示させるなら以下のようにします。

    add_action( 'load-edit.php', 'my_edit' );
    function my_edit() {
      if ( 'news' == $GLOBALS['typenow'] ) // カスタム投稿タイプが news の場合
        add_filter( 'the_title', 'my_title', 9, 2 );
    }
    
    function my_title( $title, $id ){
      return get_post_meta( $id, 'news_title', true);
    }

    the_content() で、add_filter() された test_append() が実行されるので、あえて apply_filters() しなくても良いです。

    filter は値を返すのがお約束なので echo せずに全部 return すると良いです。

    function test_append( $content ) {
      return $content
      . '<script type="text/javascript">'
      . '//<![CDATA['
      . '$(function(){$(
      . '"<div class=\'myclass\'>テスト追記</div>").appendTo("div#test");'
      . '});'
      . '//]]>'
      . '</script>';
    }

    追記分のdivへclassやidをつける

    上のコードではクラス名を括るクォーテーションが文字列中(の文字列中)に出てくるのでエスケープしています。

    以上を気をつければ大丈夫だと思います。

9件の返信を表示中 - 1 - 9件目 (全9件中)