d.w.c
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 管理画面の記事一覧のタイトルリンク先を書き換えたいありがとうございます!とても助かります。
そのままコピペで使えました。
見慣れない記述方法があったのでそれも調べつつ、カスタマイズ方法も調べてみます。ありがとうございました。
フォーラム: 使い方全般
返信が含まれるトピック: 管理画面の記事一覧のタイトルリンク先を書き換えたい調べていただいてありがとうございます。
なるほど、JavaScriptで書き換えてしまう方法がありましたね。
PHP自体を書き換えれないのは残念ではありますが、そちらの方からやってみます!
ありがとうございます。フォーラム: 使い方全般
返信が含まれるトピック: エラー原因の見つけ方$target_post_idを取得する部分のコード間違ってたみたいだったので修正版一応記載します。
というか、固定ページと投稿ページとカスタム投稿で取得できる$queryの中身が違うようで、存在するページなのかの判別の付け方がわからなく、もう諦めて教えていただいたコードの通りすべてのfeedは弾くことにしました。function feed_404( $query ) { if ( $query->is_feed ) { $query->set_404(); status_header(404); } } add_action( 'parse_query', 'feed_404' );
出来れば新しく作られた投稿やカスタム投稿ではfeedが使いたかったですが、とりあえずエラー出さなくなっただけで良しとします。
フォーラム: 使い方全般
返信が含まれるトピック: エラー原因の見つけ方Tetsuaki Hamano さん、ありがとうございます。
現在は存在していない過去サイトの、まったく重要ではないブログのURLだったのでトップに飛ばしていましたが、たしかに404の方がよさそうですね。現在も生きているページのRSSは公開したままでも大丈夫なので、書いていただいたwordpressでコントロールする方法を参考に書いてみました。
wp_die()
を使ってみたら表示されるのがちょっとよくわからない画面になってしまったので、そこも代替え案にしています。function feed_404( $query ) { if ( $query->is_feed ) { $target_post_id = @$query->queried_object->ID; if ( empty( $target_post_id )) { $query->set_404(); status_header(404); } } } add_action( 'parse_query', 'feed_404' );
これで怒涛のエラーメッセージの嵐から解放されました。
ありがとうございました。フォーラム: 使い方全般
返信が含まれるトピック: エラー原因の見つけ方ありがとうございます。
ルートディレクトリの.htacessで<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RedirectMatch 301 ^/event/(.*)/feed/(.*)$ / </IfModule>
とリダイレクト処理をしたところ、eventディレクトリ下のrssではエラーを吐かなくなりました。
ただその後もエラーが出るので調べたところ、違うディレクトリ構造のURLでのアクセスも出てきてしまい、さらに調べると
https://ドメイン/sonzaisinaiyo/feed/
のようにそもそも存在しないページだとしてもURLの最後に/feed/さえ入っていればアクセスできてしまい、エラーを吐くようでした。自分の能力では.htacessでの汎用性のある対応が思いつかなかったので下記のようにfunctions.phpでリダイレクトをかけてみました。
function is_redirect_to_top(){ $request_uri = home_url('/') . $_SERVER['REQUEST_URI']; if( empty( $request_uri )) return; if( strpos( $request_uri, "feed" ) === false ) return; $request_uri_nofeed = preg_replace( "/\/feed/", '', $request_uri ); $response = @file_get_contents( $request_uri_nofeed ); if ($response !== false) { //存在するページ return; } else { //存在しないページ wp_safe_redirect( home_url('/') ); exit(); } } add_action( 'template_redirect', 'is_redirect_to_top');
ただ、これだとリダイレクト自体はできたんですが、エラー文章はまた出てきてしまいました。
どうやら'template_redirect'
で判別する前の段階でエラーが出てしまっているようで….htacessでURLから
/feed/
を取り除いた場合のページが存在するかどうかを判別する方法か、
そもそもTrying to get property
エラーを無視する方法などありますでしょうか・・・フォーラム: 使い方全般
返信が含まれるトピック: エラー原因の見つけ方shokun0803さん、ありがとうございます。とても助かります。
サーバーのログを確認したところ、サイトリニューアルよりずいぶん昔の、現在は存在しないブログ記事のRSSフィードに対してのアクセスだったようです。
[19/Jan/2022:10:39:56 +0900] "GET /event/%E5%BF%98%E5%B9%B4%E4%BC%9A%EF%BC%81/feed/ HTTP/1.1" 200 458 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
これは現存しないURLに対してアクセスが来ているけど、404エラーで返していないということになるんでしょうか?
デバッグログがこのアラートで埋まってしまって不便なので何とかしたいのですが、RSSフィードのことよくわからなくてどう対策すればいいのかちょっと糸口が見つけられないです…
何かアドバイスいただけますと幸いです。- この返信は2年、 7ヶ月前にd.w.cが編集しました。
フォーラム: 使い方全般
返信が含まれるトピック: ajaxで取り込んだテンプレートパーツ内で他のjsが動かないfunctions.php
のwp_enqueue_scripts
とmy-ajax.js
を下記のように追加修正して、ajaxのjsファイル内で適用させたいjsファイルを再度取得することで、一応動作する様になりました。ただ、なぜ普通にfunctions.php内に書いてあるコードがajaxで取得してきた部分の中の引用テンプレート内で利用できないかは不明なままです。
読み込みの順番がおかしいとかなのか・・・functions.php
のwp_enqueue_scripts
*jsファイルが置いてあるディレクトリのURLをjsファイルに渡すコードを追記<?php //--------------------------------------------------------------------------- // JS読み込み //--------------------------------------------------------------------------- if (!function_exists( 'register_my_jquery' )) { function register_my_jquery() { //ajax利用で取得したテンプレートで適用されなかったjs wp_register_script('targetjs1', get_stylesheet_directory_uri() .'/js/targetjs1.js', array(), '', true); wp_enqueue_script('targetjs1'); //特定のページだけajax適用 $ajax_target_id = array( 8, 566, ); if( in_array( get_the_ID(), $ajax_target_id, true )){ wp_register_script( 'ajax-script', get_stylesheet_directory_uri() .'/js/my-ajax.js', array('jquery'), null, true ); wp_enqueue_script( 'ajax-script'); $pass_data_for_js = array( "ajax_url" => admin_url( 'admin-ajax.php'), "post_id" => get_the_ID(), "js_dir" => get_stylesheet_directory_uri() . "/js/", ); wp_localize_script( 'ajax-script', "PassedData", $pass_data_for_js ); } } } add_action( 'wp_enqueue_scripts', 'register_my_jquery' );
my-ajax.js
*無視されていたjsファイルをajaxを使って取得&実行( function($) { $(function() { var TargetArea = $('section#loading_area'); //引用するテンプレートパーツ の出力先section var TargetTemplateDirectory = TargetArea.data("d"); //テンプレートパーツのディレクトリ名 var TargetTemplateFile = TargetArea.data("f"); //テンプレートパーツのファイル名 var printMessage = ""; $.ajax({ type: "POST", url: PassedData.ajax_url, data: { 'action' : 'my_action', "post_id_ajax": PassedData.post_id, //$_POSTに変数を格納 wp_localize_script()を利用してfunctions.phpの方で定義済み "d_name" : TargetTemplateDirectory, "f_name" : TargetTemplateFile, } }).done( function( data ){ if( data === "" ){ printMessage = "情報を取得できませんでした。<br>お手数ですが、管理者までご連絡ください。"; TargetArea.html( printMessage ); }else{ TargetArea.hide(); TargetArea.html( data ); TargetArea.fadeIn( 1000 ); //customer_info_box.js がなぜか適用されないので、改めて呼び出し jQuery.ajax({ url: PassedData.js_dir + "targetjs1.js", type: "POST", dataType: "script" }).done(function(js_data) { // 文字列をjavascriptとして実行。 eval(js_data); }); } }).fail(function( XMLHttpRequest, textStatus, error ){ console.log(error); console.log(XMLHttpRequest.responseText); printMessage = "情報の取得に失敗しました。<br>お手数ですが、管理者までご連絡ください。"; TargetArea.html( printMessage ); }); }); })(jQuery);
フォーラム: 使い方全般
返信が含まれるトピック: ajaxで取り込んだテンプレートパーツ内で他のjsが動かない状況の認識間違いがあったので、追記します。
◆page.php
ajax利用でget_template_part( 'template_a' );
呼び出し◆template_a.php
通常の記載でget_template_part( 'template_b );
呼び出し◆template_b.php
上記のように3層の入れ子のようになっていて、
functions.php
でif (!function_exists( 'register_my_jquery' )) { function register_my_jquery() { wp_register_script('targetjs1', get_stylesheet_directory_uri() .'/js/targetjs1.js', array(), '', true); wp_enqueue_script('targetjs1'); } } add_action( 'wp_enqueue_scripts', 'register_my_jquery' );
としたjsは
page.php
とtemplate_a.php
とtemplate_b.php
のすべてで適用する必要があります。ajaxで
template_a.php
を呼び出した状況だと、page.php
とtemplate_a.php
ではtargetjs1.js
ファイルが適用されるのですが、template_b.php
内では適用されなくなっています。フォーラム: 使い方全般
返信が含まれるトピック: add_image_size()をPDFファイルにも適用させたい@munyagu さん
すごい!!
できました!!!functions.php
// オリジナル画像サイズを作成 function thumbnail_original_size() { add_image_size('thumbnail-original', 300, 300, false); } add_action('after_setup_theme','thumbnail_original_size'); // オリジナル画像サイズをPDFに反映 & 不要なサイズを除外 function my_fallback_intermediate_image_sizes( $fallback_sizes, $metadata ){ // 不要なサイズを除外 foreach( $fallback_sizes as $key => $size_name ){ $unset_size = array( "medium", "large" ); //fullは消せないもよう if( in_array( $size_name, $unset_size )){ unset( $fallback_sizes[ $key ] ); } } // 必要なサイズを適用 $fallback_sizes[] = 'thumbnail-original'; return $fallback_sizes; } add_filter( 'fallback_intermediate_image_sizes', 'my_fallback_intermediate_image_sizes', 10, 2 );
上記のように記載して必要な画像サイズを作成し、不要なものを削除することに成功しました。ありがとうございます。
(作成されるjpegはthumbnail
thumbnail-original
full
のみに変更)実際は
full
の画像も不要なんですけど、これはほかのサイズを作成するときの大元になってるのかこのコード内では消せませんでした。が、まあ大した問題ではないのでこのままにしておこうと思います。- この返信は5年、 1ヶ月前にd.w.cが編集しました。
フォーラム: 使い方全般
返信が含まれるトピック: add_image_size()をPDFファイルにも適用させたい1年ちょっと前に海外で同じような質問があるみたいです。
>https://wordpress.org/support/topic/pdf-upload-handle-thumbnails/
ここではプラグインを使うってことで話が終わってしまっています。wordpressのバージョン4.7.1以降はPDFにも
add_image_size()
は効くんじゃないんですかね・・・
>#39231 – PDF fallback_intermediate_image_sizes フィルターを add_image_size() のサイズ処理にも適用するこれはバグなんでしょうか。
Google翻訳越しだと細かいことまではよくわからないです・・・フォーラム: 使い方全般
返信が含まれるトピック: 自動生成ディレクトリの中身を外部アクセス禁止にしたいルートディレクトリの
.htaccess
に下記のように記入することで
『特定のディレクトリ内の画像のみ』を『外部からのアクセスを禁止』にすることができました。SetEnvIf Request_URI "/another-folder/" secure_dir SetEnvIf Referer "^http://サイトURL" ref_ok <Files ~ "\.(jpg|png|pdf)$"> Order Deny,Allow Deny from env=secure_dir Allow from env=ref_ok </Files>
手探りでやったのですが、記述方法にまずいところなどありますでしょうか?
フォーラム: 使い方全般
返信が含まれるトピック: 自動生成ディレクトリの中身を外部アクセス禁止にしたいログインユーザーは除外
だと望んだ結果にならないですね。
内部アクセスなら除外
にしないといけないですが、やり方が見つけられません・・・。フォーラム: 使い方全般
返信が含まれるトピック: 自動生成ディレクトリの中身を外部アクセス禁止にしたいSetEnvIf Request_URI "/another-folder/" secure_dir Order Allow,Deny Allow from all Deny from env=secure_dir
をルートディレクトリの.htaccessに記載することで、とりあえず誰も指定ディレクトリ内を表示できなくなりました。
あとはこれをログインユーザーは以外は除外
or内部アクセスなら除外
の設定にできればいいのですが・・・- この返信は5年、 12ヶ月前にd.w.cが編集しました。
フォーラム: 使い方全般
返信が含まれるトピック: if文の分岐が権限によって違う反応になる権限で効果が反転する理由はわかりませんが、動作内容としては自己解決しました。
if( is_object_in_term(***) == true )
ではなく、
if( is_object_in_term(***) === true )
と書くことで目的の動きをするようになりました。フォーラム: 使い方全般
返信が含まれるトピック: 管理画面の記事一覧で投稿IDを検索対象に含めたい。ありがとうございます!
書いていただいたコードで解決しました。もともとのコードにエラーを見つけたのでそこも修正し、組み込んだコードが下記です。
一応記録のために載せておきます。function posts_search_custom_fields( $orig_search, $query ) { if ( $query->is_search() && $query->is_main_query() && isset( $query->query_vars['search_terms'] )) { // 4.4のWP_Query::parse_search()の処理を流用しています。(検索語の分割処理などはすでにquery_vars上にセット済のため省きます) global $wpdb; $q = $query->query_vars; $n = ! empty( $q['exact'] ) ? '' : '%'; $searchand = ''; foreach ( $q['search_terms'] as $term ) { $include = '-' !== substr( $term, 0, 1 ); if ( $include ) { $like_op = 'LIKE'; $andor_op = 'OR'; $id_op = '='; } else { $like_op = 'NOT LIKE'; $andor_op = 'AND'; $term = substr( $term, 1 ); $id_op = '!='; } $like = $n . $wpdb->esc_like( $term ) . $n; // カスタムフィールド用の検索条件を追加します。 if( !isset( $search )){ $search = ""; } $search .= $wpdb->prepare( "{$searchand}(($wpdb->posts.ID $id_op %d) $andor_op ($wpdb->posts.post_title $like_op %s) $andor_op ($wpdb->posts.post_content $like_op %s) $andor_op (custom.meta_value $like_op %s))", $term, $like, $like, $like ); $searchand = ' AND '; } if ( ! empty( $search ) ) { $search = " AND ({$search}) "; if ( ! is_user_logged_in() ) $search .= " AND ($wpdb->posts.post_password = '') "; } return $search; } else { return $orig_search; } } add_filter( 'posts_search', 'posts_search_custom_fields', 10, 2 );