フォーラムへの返信

15件の返信を表示中 - 1 - 15件目 (全94件中)
  • トピック投稿者 d.w.c

    (@dwc-1)

    ありがとうございます!とても助かります。
    そのままコピペで使えました。
    見慣れない記述方法があったのでそれも調べつつ、カスタマイズ方法も調べてみます。

    ありがとうございました。

    トピック投稿者 d.w.c

    (@dwc-1)

    調べていただいてありがとうございます。

    なるほど、JavaScriptで書き換えてしまう方法がありましたね。
    PHP自体を書き換えれないのは残念ではありますが、そちらの方からやってみます!
    ありがとうございます。

    フォーラム: 使い方全般
    返信が含まれるトピック: エラー原因の見つけ方
    トピック投稿者 d.w.c

    (@dwc-1)

    $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が使いたかったですが、とりあえずエラー出さなくなっただけで良しとします。

    フォーラム: 使い方全般
    返信が含まれるトピック: エラー原因の見つけ方
    トピック投稿者 d.w.c

    (@dwc-1)

    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' );

    これで怒涛のエラーメッセージの嵐から解放されました。
    ありがとうございました。

    フォーラム: 使い方全般
    返信が含まれるトピック: エラー原因の見つけ方
    トピック投稿者 d.w.c

    (@dwc-1)

    ありがとうございます。
    ルートディレクトリの.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エラーを無視する方法などありますでしょうか・・・

    フォーラム: 使い方全般
    返信が含まれるトピック: エラー原因の見つけ方
    トピック投稿者 d.w.c

    (@dwc-1)

    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が編集しました。
    トピック投稿者 d.w.c

    (@dwc-1)

    functions.phpwp_enqueue_scriptsmy-ajax.jsを下記のように追加修正して、ajaxのjsファイル内で適用させたいjsファイルを再度取得することで、一応動作する様になりました。

    ただ、なぜ普通にfunctions.php内に書いてあるコードがajaxで取得してきた部分の中の引用テンプレート内で利用できないかは不明なままです。
    読み込みの順番がおかしいとかなのか・・・

    functions.phpwp_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);
    トピック投稿者 d.w.c

    (@dwc-1)

    状況の認識間違いがあったので、追記します。

    ◆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.phptemplate_a.phptemplate_b.php のすべてで適用する必要があります。

    ajaxで template_a.php を呼び出した状況だと、 page.phptemplate_a.php では targetjs1.js ファイルが適用されるのですが、 template_b.php 内では適用されなくなっています。

    フォーラム: 使い方全般
    返信が含まれるトピック: add_image_size()をPDFファイルにも適用させたい
    トピック投稿者 d.w.c

    (@dwc-1)

    @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ファイルにも適用させたい
    トピック投稿者 d.w.c

    (@dwc-1)

    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翻訳越しだと細かいことまではよくわからないです・・・

    トピック投稿者 d.w.c

    (@dwc-1)

    ルートディレクトリの.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>

    手探りでやったのですが、記述方法にまずいところなどありますでしょうか?

    トピック投稿者 d.w.c

    (@dwc-1)

    ログインユーザーは除外だと望んだ結果にならないですね。
    内部アクセスなら除外にしないといけないですが、やり方が見つけられません・・・。

    トピック投稿者 d.w.c

    (@dwc-1)

    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文の分岐が権限によって違う反応になる
    トピック投稿者 d.w.c

    (@dwc-1)

    権限で効果が反転する理由はわかりませんが、動作内容としては自己解決しました。

    if( is_object_in_term(***) == true )
    ではなく、
    if( is_object_in_term(***) === true )
    と書くことで目的の動きをするようになりました。

    トピック投稿者 d.w.c

    (@dwc-1)

    ありがとうございます!
    書いていただいたコードで解決しました。

    もともとのコードにエラーを見つけたのでそこも修正し、組み込んだコードが下記です。
    一応記録のために載せておきます。

    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 );
    
15件の返信を表示中 - 1 - 15件目 (全94件中)