kjmtsh
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: タグ一覧を表示したいのですが、上手くいきませんフォーラム: 使い方全般
返信が含まれるトピック: メディアを追加が無反応@Hinaloe さん
アップロードにFlashを利用していない…
おっと、そうでしたか。私が見てたのは、恐るべき「後方互換性」のためのコードってことですね。
手元のIE10で試してみたところいずれも問題は発生しませんでした。
これって、xdomain の無料サーバが相手ではありませんよね? 互換モードのテストはもうちょっと前のバージョンでやったほうがいいかもです。IE10 は、同じ Chakra ですし、11で追加された feature は必要ないので。ちなみに、互換モードのときは、ログインした途端に、でっかい警告が出るようになってます (最初に見たときには、広告かと思いましたです)。
ちゃんとしたメッセージが出せないというのは、4.1.1 の場合、どうなんでしょうね? 少なくとも、特定の条件下では機能しないということがわかりました。「特定の条件」がわかりませんけど。
IE11にもネットワークプロファイラがあるはずなのでそれの該当ページの応答本文を確認してみてください。
「ネットワーク」と「プロファイラ」ふたつのタブがありますから、「ネットワーク」の方を見てください。
4.0位にデグレードするのは有効でしょうか?
あまり有効ではないかもしれません。ついに、ベニー・グッドマンまできて、ビッグバンドのスターが出そろったバージョンで、とてもよいバージョンだったとは思いますが、今のところ何もはっきりしたことはわからないという状態ですからね。アップロードが失敗することはもちろん問題ですが、そのときに、エラーメッセージが出ないのは、4.0 では普通で、4.1 ではおかしなことです。少なくとも、リリースノートを見る限りでは、メッセージが出せるようになったはずのバージョンだからです。サーバ設定で影響を受けそうなところをちょっと読みましたが (もちろん、全部は読み切れていません)、わかりませんでした。サーバのログを見ればすぐに解決できそうにも見えますが…
ブラウザアップロードもダメということから、まず、PHP が意図したとおりに動作していないわけですが、「メディアの追加」はまたちょっと違います。一応、JavaScript を使わずに PHP だけでアップロードするテストコードを書いてみましたが、natzmahre-19810825 さん、試してみますか? ここに張り付けるには長いので、やってみようということでしたら、お知らせください。
フォーラム: 使い方全般
返信が含まれるトピック: WP_queryで複数タームごとに記事を指定して一覧を表示データベースからの記事取得は、お示しのコードでやって、表示をするときに調整するというはどうでしょう。どのように表示したいかによりますが、同じページに表示するという前提で考えました。途中でページが変わると、データが入れ替わってしまうので、うまく動きません。add_filter の無名関数は、PHP 5.3 より前のバージョンではエラーになります。
考え方は、こうです。$wp_query は普通、ループの終わりに、ループポインタを最初に戻します。途中でループを抜けると、ポインタをそのまま保持するのですが、rewind_posts() メソッドで、ポインタを最初に戻すことができます。これを利用して、ひとつのデータを複数回のループで利用するというものです。それぞれのループの中でタームを判定できるように取得するデータを通常とは違ったものにしてあります。ループ1回ごとに投稿 ID からタームを得ると、結局毎回 WP_Query が実行されるようなことになるので、まとめてデータを取り、表示部分で調整をするという感じです。
ソートについては、すべて共通のフィールドを使うことになります。pre_get_posts フックの中で指定してください。デフォルトは投稿日順です。それぞれのタームでソートアルゴリズムが違う場合は、PHP を使う必要があります。
functions.php
function term_filtered_query($query) { if (is_admin() && !$query->is_main_query()) return; if (...ページの条件...) { add_filter('posts_join_request', function($join) { $join .= ' INNER JOIN wp_term_taxonomy AS tt ON wp_term_relationships.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN wp_terms AS t ON tt.term_id = t.term_id'; return $join; }, 10, 1); add_filter('posts_fields_request', function($fields) { $fields .= ', t.name AS term_name'; return $fields; }, 10, 1); $query->set('tax_query', array( 'relation' => 'OR', array( 'taxonomy' => 'taxonomy', 'field' => 'slug', 'terms' => array('term1') ), array( ...., ))); } } add_action('pre_get_posts', 'term_filtered_query');
テンプレート
// 1回目の処理 global $wp_query; // 念のため $counter = 0; if (have_posts()) { while (have_posts()) { the_post(); if ($post->term_name == 'term1') { // term1 以外を読み飛ばす term1 を処理; if (++$counter > 3) break; // 投稿3つでループを抜ける } } } $wp_query->rewind_posts(); // ポインタを戻す $counter = 0; // カウンタも戻す while (have_posts()) { the_post(); if ($post->term_name == 'term2') { term2 を処理; if (++$counter < 4) break; // 投稿4つで終了 } } // ここで再びリワインドとポンタのリセット $wp_query->rewind_posts(); $counter = 0; while (have_posts()) { the_post(); if ($post->term_name == 'term3') { term3 を処理; if (++$counter < 5) break; // 投稿5つで終了 } } // まだ続くなら、同じ操作を繰り返す
フォーラム: 使い方全般
返信が含まれるトピック: メディアを追加が無反応正常なエラー・メッセージが返りませんねぇ。ブラウザでアップロードだとどうなりますかね… もう少し頑張ってみようというお気持ちがあれば、の話しですが、試してみてもいいかもしれません。WordPress のアップローダよりもちょっとマシという感じですが。
フォーラム: 使い方全般
返信が含まれるトピック: 投稿者(author)別の記事を検索したい。フォーラム: 使い方全般
返信が含まれるトピック: メディアを追加が無反応ああ、エラーが出るんですね。針の埋まった干し草の山が少し小さくなったかもしれませんね。
- Internet Explorer (どのバージョンでしょうか?) を使ってください。
- アップロードするファイルの名称を、001.jpg としてください (全て半角です)。
- もう一度同じ状況を作って、アップロードを試してください。
- 今度は、日本語のエラーメッセージが出るはずなので、その下にあるファイルへのリンクをクリック。
- デバッガのタブに移り、該当ファイルの該当箇所が表示されるので、それを控えておく。
これで何かわかるでしょうか? 前のポストで書き忘れましたが、Iron には Flash が載っていないので、基本的に WordPress のアップローダは使えないと思ったほうがいいです。WordPress は、IE のチェックはするけれども、Iron かどうかのチェックはしないのです。
本当は、サーバ側のキャッシュもクリアしてテストしないといけないんですが、Cache Controller なるものが止められず、サーバ設定ファイルもいじれないようなので、この点は、お手上げです。同じサーバを同じ条件で使っている人を探した方が早いかもしれませんね。初心者の方には、有償でもサポートのついたサーバを借りるほうがお勧めではあります。
フォーラム: 使い方全般
返信が含まれるトピック: メディアを追加が無反応「コンソール」というのは、ブラウザに付属の機能で、JavaScript というプログラムの簡易的な調査ができます。表示のしかたは、次のとおりです。
- 画面のリンクでない場所を右クリック
- メニューから、Iron なら「要素の検証」、IE なら「要素の検査」をクリック
- 画面下にウィンドウが開くので、ウィンドウの最上部にあるタブで、Iron なら「Console」、IE なら「コンソール」を選択する
プログラムに不備があった場合、ブラウザが補足したエラーがここに出力されます。「メディアを追加」のボタンをクリックしたときに、JavaScript で書かれたプログラムが動作しますので、この画面を開いたまま、操作をしてみてください。何も表示されない可能性もありますが、「何も出ない」という情報も大切です。
メディアライブラリの方は、ブラウザ・アップロードは試されましたか? やり方は次のとおりです。
ダッシュボード左側にあるメニューから、「メディア>>ライブラリ」ではなくて、「メディア>>新規追加」をクリックすると、別の画面になります。そこで、
うまくいかない場合はブラウザーアップローダーをお試しください。
のリンクをクリックしてから、ファイルを選択してアップロードを試してください。ファイル選択のボタンは、ブラウザによって違ったものになりますが、Iron なら「ファイルを選択」、IE なら「参照」となっているはずです。
フォーラム: 使い方全般
返信が含まれるトピック: 投稿者(author)別の記事を検索したい。訂正どす。
'include' => is_array($atts['include']) ? $atts['include'] : explode(' ', $atts['include'], 'exclude' => is_array($atts['exclude']) ? $atts['exclude'] : explode(' ', $atts['exclude'],
フォーラム: 使い方全般
返信が含まれるトピック: 投稿者(author)別の記事を検索したい。投稿者別アーカイブのウィジェットを有効化すればいいんじゃん、と思ったら、ウィジェットが…ない。メニューも自動で増えたりしてくれないので、初心者にはキツイですね。やっつけですが、こんなのでどうですか?
テーマの functions.php に以下を。
function mock_user_search() { $atts = shortcode_atts( array( 'include' => array(), 'exclude' => array() ), $atts, 'user_search'); $args = array( 'include' => is_array($atts['include']) ? $atts['include'] : array(), 'exclude' => is_array($atts['exclude']) ? $atts['exclude'] : array(), 'fields' => array( 'user_nicename', 'display_name', 'ID')); $users = get_users($args); if (!$users) return; $form = '<form method="GET" action="' . home_url('/') . '">'; $form .= '<select name="author_name">'; foreach ($users as $user) { $form .= '<option value="' . $user->user_nicename . '">' . $user->display_name . '</option>'; } $form .= '</select>'; $form .= '<input type="submit" value="検索">'; $form .= '</form>'; return $form; } add_shortcode('user_search', 'mock_user_search');
検索フォームがほしい場所で以下を記述 (投稿本文でっせ)
全べてのユーザを表示 [user_search] ユーザを限定する場合 include->含めるユーザのIDを指定 exclude->除外するユーザのIDを指定 どちらもスペースで区切る 片方だけ指定でも OK [user_search include="2 3 4" exclude="1"]
動作確認はとったけど、無保証。
フォーラム: 使い方全般
返信が含まれるトピック: 4つ目のh2タグの後にを自動挿入する方法確実に Pods が原因だということがわかっているなら、Pods のフォーラムで開発者に直接質問するのがいいと思います。上のコードに加えて、プラグインの設定やなにやらを書き、「これを動かすにはどうしたらいい?」って聞けば、何を言っているかはすぐにわかってくれるはずですし、最も有効なアドバイスが得られるはずです。
Pods がデータベースに書き込むときに、どんなことをしているのかがわかれば、修正方法が提示できるかもしません。使ってないのでよくはわかりませんが、以前、バグリポートをもらて、ちょっと調べたときに、自前のテーブルを作っていたような覚えがあるので、何かやっていることは確かなんでしょう、たぶん。調べられますか?
フォーラム: テーマ
返信が含まれるトピック: 未公開のページへアクセスがあった時の動きについて@gblsm さん
WP_Query のデータについては、整合性がとれているように見えるんですけど…
found_posts はもっぱらページング情報を作るための変数なので、is_single や is_page など、ID で指定するページや、ページングをしない場合 (SQL に LIMIT 句がない場合)、ほとんど意味のない値です。逆にページングをする場合は、found_posts と post_count との差異が重要な意味を持つことになります。
もうご存知でしょうけれども、found_posts 生成の過程は、LIMIT 句があるときは、
SELECT SQL_CALC_FOUND_ROWS ... LIMIT ...
を実行する- 結果のデータを
count($this->posts)
でカウントし、post_count にセットする SELECT FOUND_ROWS()
を実行して戻り値を found_posts にセットする
となり、ない場合は (あるいは明示的にユーザがページングを抑制する場合)、
SELECT ...
を実行するcount($this->posts)
の値を found_posts にセットする- 投稿データが公開すべきでないものの場合は、クエリの結果から post データを削除する
- post_count に0をセットする
となります。count() をやり直すというのはたぶん読み間違いでしょう。どちらの場合も共通なのは、found_posts は、データベースに該当のデータが何件存在するかを示す値だということで、両者の一貫性は保たれているように見えるんですよね。
そう考えると、通常の404なら、
found_posts = 0 post_count = 0
ユーザに閲覧権限がない、あるいは公開すべきでない場合。
found_posts = 1 post_count = 0
となるのは、それぞれの変数の役割りどおりということになりませんか? 強いて突っ込みどころを探すと、found_posts の doc string で、
<blockqoute>
* The amount of found posts for the current query.
*
* If limit clause was not used, equals $post_count.
</blockqoute>equals になってないぞ、というくらいでしょうか。意図してないのにそうなっちまった、という風には読めなくて、不具合になるという場面が思いつきません。
公開データかそうでないかの判定を SQL 文に含めないのは、WHERE 句の書き換えをするより、取得したデータで判定した方がメンテナンスが楽ということもあるかもしれません。投稿データが1件しかないというのが保証されてもいるので、ここはすっきりしたコードですよね。これをバグと呼ぶには、2つの値が合ってないと困る例があるといいかもしれないと思ったのですが、結局見つけられませんでした。バグリポート入口は以下です。
https://make.wordpress.org/core/reports/
@jan202020 さん
もうスレッドを見てないかもしれませんが、おもしろそうだったので、考えてみました。表示を変えたいというだけなので、template_include フィルタフックを使って、テンプレートを変更するのはどうでしょうか? 404.php は外部に表示するので、そのままにしておいて、表示用のテンプレートを別にひとつ作り、ログインユーザにはそちらを使うという考え方です。条件は future だけにしましたが、pending や private を加える可能性もありということで、配列にしてあります。
テンプレートにデータを渡す関係で、グローバル変数をひとつ作っているのが間抜けですが、$wp_query を強引に書き換えるよりはマシではないかということで、お許しを。
functions.php
function custom_template_include($template) { if (!is_user_logged_in()) return $template; if (is_404()) { global $wpdb; $posts_to_display = array('future'); $ID = get_query_var('p'); $result = $wpdb->get_row("SELECT post_status, post_date, post_content FROM wp_posts WHERE ID = $ID"); if ($result && in_array($result->post_status, $posts_to_display) { global $my_private_post; $my_private_post = $result; $new_template = locate_template(array('custom.php')); if ('' != $new_template) { $template = $new_template; } } } return $template; } add_filter('template_include', 'custom_template_include');
custom.php
global $my_private_post; if ($my_private_post) { if ($my_private_post->post_status == 'future') { echo 'ふふ、ひみつ...公開予定日' . '<br>'; echo date_i18n(get_option('date_format'), strtotime($my_private_post->post_date)); } else { echo '投稿内容を見せちゃいます' . '<br>'; echo $my_private_post->post_content; } } else { echo 'そんな投稿ありません'; }
フォーラム: 使い方全般
返信が含まれるトピック: 4つ目のh2タグの後にを自動挿入する方法「4つ目の後」というのは、「5つ目の直前」と解釈して…
function paging_filter($data, $postarr) { if (stripos($data['post_content'], '<!--nextpage-->') !== false) return $data; $nth = 4; $pattern = '/(<h2[^>]*>.+<\/h2>)/i'; $splitted = preg_split($pattern, $data['post_content'], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $len = count($splitted); if ($len < ($nth * 2)) return $data; for ($i = $j = 0; $i < $len; $i++) { if (preg_match($pattern, $splitted[$i])) { $j++; if ($j % 4 == 0) { $splitted[$i] = "\n<!--nextpage-->\n" . $splitted[$i]; } } } $data['post_content'] = implode('', $splitted); return $data; } add_filter('wp_insert_post_data', 'paging_filter', 10, 2);
本文に
<!--nextpage-->
(スペースなし) が含まれている場合には何もしません。また、本文に、<pre><h2>....</h2></pre>
みたいな部分があると、判定を間違います。特定のタグの中にある<h2>
を回避する判定をつけた方がより安全性が増しますが、面倒なので入れてません。etc… コードを読んでください。フォーラム: 使い方全般
返信が含まれるトピック: readmoreというスクリプトを使用したいのですがjQueryが動きません。array(jquery)
ではなくて、
array('jquery')
ではないかな? jQuery の使い方も間違えているので、ちゃんと勉強した方がいいかもですね。運がよければ、これで動作しますかねぇ…
jQuery(document).ready(function() { .... });
ついでに、
wp_enqueue_script()
は functions.php で使った方がいいです。フォーラム: テーマ
返信が含まれるトピック: オリジナルテンプレートの動作・不具合エックスサーバーで動くテーマがさくらサーバーで動かないと言う事があるのでしょうか?
可能性としてはあり得ます。ブラウザの画面が白くなるエラーの場合、PHP がデバッグ・エンジンを起動できずに終了していますので、ウェブサーバのエラーログを確認するのがよいと思います。
フォーラム: 使い方全般
返信が含まれるトピック: サイトがうまく表示されない。